自定义消息为什么不能被ClassWizard识别?如何解决? 消息响应函数一定只能最多带两个参吗?

解决方案 »

  1.   

    ClassWizard好像是不能识别自定义消息的,只能自己手动写代码了响应消息函数,如果有多个参数,可以自定义一种数据结构,通过传地址的方法例如
    //自定义消息
    #define MY_WND_MSG   WM_USER + 1001//自定义数据结构
    typedef struct
    {
       int    ia;
       double db;
       //其他的变量
    }My_Struct;My_Struct struct;
    struct.ia = 0;
    struct.db = 0;//发送消息
    ::PostMessage(::AfxGetMainWnd()->m_hWnd, MY_WND_MSG, NULL, (LPARAM)&struct);//重载主框架的WindowProc或者PretranslateMessage虚函数,接管消息if (message == MY_WND_MSG)
    {
       My_Struct *pStruct = (My_Struct *)lParam;  ::AfxMessageBox(_T("OK, Received Message!"));
    }
      

  2.   

    不好意思,刚才没注意关键字
    My_Struct struct;
    应该定义成My_Struct myStruct;
      

  3.   

    Up,自己也可以在类中进行消息映射
    //.h
    #define WM_MYMSG WM_USER+1afx_msg void OnMyMsg(WPARAM,LPARAM);
    //.cpp
    BEGIN_MESSAGE_MAP(...)
    ON_MESSAGE(WM_MYMSG,OnMyMsg)
    END_MESSAGE_MAP()
      

  4.   

    program_ghost(高山流水) 的方法比较规范。
      

  5.   

    ClassWizard是只能识别系统定义的消息,自定义的消息是不能让ClassWizard识别的。