似乎MFC提供的所有消息处理函数定义方法都不支持直接得到发送者的hWnd。
比如ON_COMMAND,ON_MESSAGE等等怎么办?

解决方案 »

  1.   

    发现一个办法:
    _AFX_THREAD_STATE* pThreadState = AfxGetThreadState();
    可以得到:pThreadState->m_lastSentMsg.hwnd
    不过感觉怪怪的,处理消息的时候明明应该直接得到发送者,这样又非要绕一大圈……
    尤其是_AFX_THREAD_STATE以下划线开头,好像这样的用法很不地道哦。如果有其他办法,请指教!
      

  2.   

    发送者有的时候不是hwnd, 假如是的话,多半是控件发送给父窗口的吧,那就是WM_COMMAND和WM_NOTIFY了, WM_NOTIFY参数里有发送者hWnd的,WM_COMMAND标准映射则是一个ID对应一个处理函数,既然ID知道,大多时候可以用GetDlgItem之类的找到发送者,WM_COMMAND_RANGE映射不是一对一,却有个ID作为参数。不过也确实有时候就是不容易找到hwnd,只好绕圈了。
    ON_MESSAGE自定义消息可以在wParam, lParam里存储hwnd线索的.