MFC中的afx_msg和BEGIN_MESSAGE_MAP

来源:互联网 发布:二手手机估值软件 编辑:程序博客网 时间:2024/05/16 10:27

BEGIN_MESSAGE_MAP 下面是定义:什么事件发生时该执行哪个子程序。

是MFC定义的宏,表示开始一个消息的映射描述。  
  BEGIN_MESSAGE_MAP(   theClass,   baseClass   )  
  Parameters  
  theClass  
  Specifies   the   name   of   the   class   whose   message   map   this   is.  
  baseClass  
  Specifies   the   name   of   the   base   class   of   theClass  
  Remarks  
  Use   the   BEGIN_MESSAGE_MAP   macro   to   begin   the   definition   of   your   message   map.  
  In   the   implementation   (.CPP)   file   that   defines   the   member   functions   for   your   class,   start   the   message   map   with   the   BEGIN_MESSAGE_MAP   macro,   then   add   macro   entries   for   each   of   your   message-handler   functions,   and   complete   the   message   map   with   the   END_MESSAGE_MAP   macro.  
  For   more   information   on   message   maps   and   the   BEGIN_MESSAGE_MAP   macro,   seeAdding   a   Dialog   Box   in   Visual   C++   Tutorials.  
  Example  
  //   example   for   BEGIN_MESSAGE_MAP  
  BEGIN_MESSAGE_MAP(   CMyWindow,   CFrameWnd   )  
        //{{AFX_MSG_MAP(   CMyWindow   )  
          ON_WM_PAINT()  
          ON_COMMAND(   IDM_ABOUT,   OnAbout   )  
        //}}AFX_MSG_MAP  
  END_MESSAGE_MAP(   ) 

在相应的.cpp中写入这样的消息映射之前,要在相应的类中用 afx_msg 声明某个函数是消息映射函数

如在类class CExample1Dlg : public CDialog的头文件中添加:(这块没理解,需要声明吗,当然声明也没错,但是直接类里定义不就完了吗,反正消息处理函数不是要在类里定义吗)  (理解了,因为一个类的定义一般是在其头文件中,源程序文件.cpp里一般是类成员函数的定义等)

(还有一个,我以为消息处理函数只能在窗口类CFramWnd或其派生类里声明,看来CDialog也行,还是CDialog是窗口类的派生类,晕,再查查?)

afx_msg LRESULT OnServerMessage(WPARAM wParam,LPARAM lParam);

在.cpp文件中添加:ON_MESSAGE(SER_MESSAGE,OnServerMessage)

然后就在其.cpp文件中写好关于OnServerMessage()的定义函数.

但是在本例中SER_MESSAGE没有事先定义一个消息映射

要在类class CExample1Dlg : public CDialog的头文件中定义一个消息映射号如

#define SER_MESSAGE WM_USER+100

才可以实现消息的映射和响应.(这块没有接触过)

原创粉丝点击