我新建了一个对话框程序, 在该窗口上按下鼠标, 可以得到wm_lbutton, 一直按鼠标, 并在窗口内拖动, 可以得到wm_mousemove(flags标志有鼠标按下状态). . 这是对的.在桌面上(位于我们的窗口外)的任一文件上按下鼠标, 我们的程序不能得到wm_lbutton, 一直按鼠标, 将文件拖动到窗口上, 可以得到wm_mousemove(但flags标志没有鼠标按下状态).在这种情况下, 鼠标拖动与mousemove区分不了, 怎么办?有没有不依赖于消息机制就可以判断鼠标正在按下的方法?

解决方案 »

  1.   

    用 全局钩子,把所有 关于鼠标消息 全部 勾取 过来 ,然后 判断 鼠标这个时候的状态 ,设置一个 成员变量,如果 鼠标是 wm_lbutton 记作 1,up记作2 ,然后 当 你的wm_mousemove 过来的 时候,判断 这个 成员变量的 值就行了。
      

  2.   

    全局 钩子 在你 启动 exe 的时候 才会 勾取 鼠标消息。你关闭 exe 程序的时候 ,当然 钩子 也就失效了。
    我没有 试过 这样 做 ,只是 提供一个 解决办法,希望能 给你 帮助。
      

  3.   

    afx_msg void OnMouseMove(
       UINT nFlags,
       CPoint point 
    );
    第一个参数不是有说明吗,详细参考MSDN文档