对于界面上的诸多按钮,希望多个在被点击时由同一个过程来处理点击事件,由此想到了自定义 WindowProc。在这个自定义过程中希望能够捕获当前被点击的按钮的文字内容(这些都是数字,比如:计算器就是这样的),我们知道 WindowProc 的原型是这样的:LRESULT CALLBACK WindowProc(
  HWND hwnd,      // handle to window
  UINT uMsg,      // message identifier
  WPARAM wParam,  // first message parameter
  LPARAM lParam   // second message parameter
);能否通过这里的参数 hwnd 来获取当前被点击的按钮本身??

解决方案 »

  1.   

    能否通过这里的参数 hwnd 来获取当前被点击的按钮本身??
    =======
    可以啊,hwnd就是这个按钮窗口的句柄。
      

  2.   

    LRESULT CALLBACK WindowProc(
      HWND hwnd,       // handle to window
      WM_COMMAND,      // the message to send
      WPARAM wParam,   // notification code and identifier
      LPARAM lParam    // handle to control (HWND)
    );所有的按钮点击消息都是WM_COMMAND,wParam的低字表示ID,你可以LOWORD(wParam),然后和你设定的ID比较就可以了,点击按钮时,wParam的高字表示notification ,HIWORD(wParam)=BN_CLICKED 就表示按钮被点击了
      

  3.   

    你是用MFC还是SDK啊,如果是MFC比较容易,直接用ON_COMMAND_RANGE就行了,如果是SDK的话,处理WM_COMAND就行了。
      

  4.   

    可以用钩子
    在回调函数里面
    LRESULT CALLBACK MyProc(
      HWND hwnd, // handle to window
      UINT uMsg, // message identifier
      WPARAM wParam, // first message parameter
      LPARAM lParam // second message parameter
    )
    {
       CButton *pBtn=CWnd::FromHandlePermanent(hWnd);
       if(NULL != pBtn)
       {
         ........
       }
       .....
       ....
    }
      

  5.   

    MFC里面 每个窗口都会 添加窗口句柄到指针的hash映射