HWND g_hwnd=NULL;
BOOL CMyfirstDlg::OnInitDialog()
{
g_hwnd=m_hWnd;
LRESULT CALLBACK KeyboardProc(
  int code,       // hook code
  WPARAM wParam,  // virtual-key code
  LPARAM lParam   // keystroke-message information
)
{
if(VK_F11==wParam)
{
::SendMessage(g_hwnd,WM_CLOSE,0,0);
}
return 1;
}
void CMyfirstDlg::OnOK() 
{ hkeyborad=SetWindowsHookEx(WH_KEYBOARD,KeyboardProc,NULL,GetCurrentThreadId());
hmouse=SetWindowsHookEx(WH_MOUSE,MouseProc,NULL,GetCurrentThreadId());
}
为什么我再用sendMessage这个函数的时候一定要这样才能成功?
最开始我在CMyfirstDlg类里面声明HWND g_hwnd;
然后再构造函数里面g_hwnd=m_hWnd就不行。。我很费解。
谢谢大家!

解决方案 »

  1.   

    构造函数的时候m_hWnd的值是多少你看了没?
      

  2.   

    构造函数里面窗口还没有创建,m_hWnd是无效的。
      

  3.   

    所以,程序里面必须给这个初始化:这是为什么必须在开始令HWND g_hwnd=NULL的原因.
      

  4.   


    CDialog 类的数据成员 m_hWnd 保存了[窗口对象]的句柄.
    但是在 CDialog 类构造的时候,[窗口对象]还没有建立,这时, m_hWnd == NULL 
    等[窗口对象]建立后, m_hWnd 才会是一个有效的句柄.