如果自己定义一个消息,想制定特定的窗口来处理该消息,一般我们可这样的
处理。
//////.h
......
#define WM_YOURMESSAGE WM_USER+1
...........class CTemp:...
{
afx_msg void OnYourMessage();
};
...........
//////.cpp
....
void CTemp::OnYourMessage()
{
}MESSAGE_MAP
...
ON_MESSAGE(WM_YOURMESSAGE, OnYourMessage)
...
但是,如果想要处理的消息,如带有参数,请问有何高招?
我是这么处理的,即重载我的类的哦OnCommand(WPARAM wParam, LPARAM lParam) 消息处理函数,然后用
PostMessage((HWND)m_dwNotifyCallback,m_dwNotifyData,wParam,lParam);
来向他发消息,
可是为什么我的类的窗口接受不到该消息呢?

解决方案 »

  1.   

    OnYourMessage()应该可以收到消息
      

  2.   

    OnCommand()忽略message>WM_USER的消息。重载PreTranslateMessage()吧。
      

  3.   

    NONO,你理解有问题.#define WM_YOURMESSAGE WM_USER+1
    ...........class CTemp:...
    {
    afx_msg LRESULT OnYourMessage(WPARAM w, LPARAM l);
    };
    ...........
    //////.cpp
    ....
    LRESULT CTemp::OnYourMessage(WPARAM w, LPARAM l)
    {}MESSAGE_MAP
    ...
    ON_MESSAGE(WM_YOURMESSAGE, OnYourMessage)_________-
    SendMessage( WM_YOURMESSAGE, 0,0 );//后两个参数就是
    //LRESULT CTemp::OnYourMessage(WPARAM w, LPARAM l)里面的
    //w和l
      

  4.   

    标准的消息函数应该是这样定义的:
    afx_msg LRESULT OnXXXMsg(WPARAM wParam, LPARAM lParam);发送消息时是这样:
    PostMessage(hwnd, WM_XXX_MESSAGE, wParam, lParam);

    SendMessage(hwnd, WM_XXX_MESSAGE, wParam, lParam);
      

  5.   

    窗口消息的处理函数格式一定是:
    LRESULT OnYourMessage(WPARAM w, LPARAM l);
    线程消息处理寒士格式一定是:
    void OnYourMessage(WPARAM w, LPARAM l);否则RELEASE版本运行会出错.
      

  6.   

    比方说你想把CString传过来。就
    if (m_dwNotifyCallback)
    SendMessage((HWND)m_dwNotifyCallback,WM_YOURMESSAGE ,(WPARAM)(LPVOID)&str,0);
      

  7.   

    to ZHENG017(风中王子) :
    这样传CString很危险吧?假如在消息接收方处理WM_YOURMESSAGE之前,发送方的str内存已被释放,接收方一读WPARAM岂非就出错?纯属讨论:)