常听说vc中可以自定义消息,我很迷惑。
到底什么时候需要用户自定义消息,自定义什么消息,vc处理的不都是windows的消息吗,
用户可以定义什么消息?
麻烦给个例子,谢谢!

解决方案 »

  1.   

    如何处理自定义消息     ClassWizard不允许增加用户自定义消息,所以你必须手工输入。输入后, ClassWizard就可以象处理其它消息一样处理你自定义的消息了。       下面是增加自定义消息的步骤:       第一步:定义消息。开发Windows95应用程序时,Microsoft推荐用户自定义消息 至少是WM_USER+100,因为很多新控件也要使用WM_USER消息。       第二步:实现消息处理函数。该函数使用WPRAM和LPARAM参数并返回LPESULT。   LPESULT CMainFrame::OnMyMessage(WPARAM wParam, LPARAM lParam) {     // TODO: 处理用户自定义消息         ...     return 0; }     第三步:在类头文件的AFX_MSG块中说明消息处理函数:   class CMainFrame:public CMDIFrameWnd {     ...     // 一般消息映射函数     protected:         // {{AFX_MSG(CMainFrame)         afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);         afx_msg void OnTimer(UINT nIDEvent);         afx_msg LRESULT OnMyMessage(WPARAM wParam,  LPARAM lParam);         //}}AFX_MSG         DECLARE_MESSAGE_MAP() }     第四步:在用户类的消息块中,使用ON_MESSAGE宏指令将消息映射到消息处理 函数中。   BEGIN_MESSAGE_MAP(CMainFrame, CMDIFrameWnd)     //{{AFX_MSG_MAP(CMainFrame)     ON_WM_CREATE()     ON_WM_TIMER()     ON_MESSAGE(WM_MY_MESSAGE, OnMyMessage)     //}}AFX_MSG_MAP END_MESSAGE_MAP()     如果用户需要一个整个系统唯一的消息,可以调用SDK函数RegisterWindowMessage 并使用ON_REGISTER_MESSAGE宏指令取代ON_MESSAGE宏指令,其余步骤同上。 
      

  2.   

    #define WM_YOURMSG WM_USER+5
    POSTMESSAGE(HWND,WM_YOURMSG,WPARAM,LPARAM);ON_MESSAGE(WM_YOURMSG , YOUR_FUNCTION)YOUR_FUNCTION()
    {
    }IS IT EASY?
      

  3.   

    关于自定义消息的用处,随便说两句:
    Windows的消息其实是一个32位的值(大部分是你平时看到的WM_打头的宏定义值),可以带两个参数wParam和lParam。Windows预定义了许多值,这些值所对应的消息都有自己的意义。自定义消息,就是你程序中可以自己定义一些超出这些基本消息以外的消息ID,而Windows为自定义消息的值的起点定义了WM_USER,也就是说,自定义的消息值一般>=WM_USER。有了自定义消息,你就可以自由的在窗口之间发送自己的消息,这些消息不会被Windows默认处理,于是,你就可以自己控制消息处理的行为。这样,可以在窗口间传递自己的数据,发送自己的命令,等等。