none
如何让基于对话框的应用程序响应窗口外的鼠标移动消息 RRS feed

  • 问题

  • 我做了一个Dialog,响应鼠标移动消息,但是鼠标一旦出了窗体外就不会响应了。我用WM_MOUSEMOVE则只能收到客户区的消息,用WM_NCMOUSEMOVE消息只能收到非客户区消息,出了窗体外就收不到。当然,我用了GetCursorPos也没用的。不知道有没有方法能够响应鼠标在窗体内外的移动消息,或者说怎么确定鼠标在屏幕上的坐标位置?
    2012年4月23日 4:37

答案

  • HHOOK hOldHook = NULL;
    HWND hEdit = NULL;
    LRESULT CALLBACK LowLevelMouseProc(int nCode, WPARAM wParam, LPARAM lParam)
    {
    	if((HC_ACTION == nCode) && (WM_MOUSEMOVE == wParam))
    	{
    		CPoint pt;
    		GetCursorPos(&pt);
    		CString str;
    		str.Format(_T("%d, %d"), pt.x, pt.y);
    		SetWindowText(hEdit, str);
    	}
    	return CallNextHookEx(hOldHook, nCode, wParam, lParam);
    }
    void CXXXXDlg::OnOK() 
    {
    	hEdit = GetDlgItem(IDC_EDIT1)->GetSafeHwnd();
    	hOldHook = SetWindowsHookEx(WH_MOUSE_LL, LowLevelMouseProc, AfxGetInstanceHandle(), 0);
    }
    


    Visual C++ enthusiast, like network programming and driver development. At present is being engaged in the WinCE/Windows Mobile platform embedded development.

    • 已标记为答案 TeenSword 2012年4月24日 2:51
    2012年4月23日 13:13
    版主

全部回复

  • HHOOK hOldHook = NULL;
    HWND hEdit = NULL;
    LRESULT CALLBACK LowLevelMouseProc(int nCode, WPARAM wParam, LPARAM lParam)
    {
    	if((HC_ACTION == nCode) && (WM_MOUSEMOVE == wParam))
    	{
    		CPoint pt;
    		GetCursorPos(&pt);
    		CString str;
    		str.Format(_T("%d, %d"), pt.x, pt.y);
    		SetWindowText(hEdit, str);
    	}
    	return CallNextHookEx(hOldHook, nCode, wParam, lParam);
    }
    void CXXXXDlg::OnOK() 
    {
    	hEdit = GetDlgItem(IDC_EDIT1)->GetSafeHwnd();
    	hOldHook = SetWindowsHookEx(WH_MOUSE_LL, LowLevelMouseProc, AfxGetInstanceHandle(), 0);
    }
    


    Visual C++ enthusiast, like network programming and driver development. At present is being engaged in the WinCE/Windows Mobile platform embedded development.

    • 已标记为答案 TeenSword 2012年4月24日 2:51
    2012年4月23日 13:13
    版主
  • 通过SetCapture捕获鼠标

    不用时ReleaseCapture


    新浪微博http://weibo.com/xianglitian,欢迎围观

    2012年4月24日 1:32
  • 非常感谢。
    2012年4月24日 2:51