#pragma data_seg("share")
BOOL down = false;
#pragma data_seg()
#pragma comment(linker,"/SECTION:share,RWS")LRESULT CALLBACK MouseProc(int nCode,WPARAM wParam,LPARAM lParam) {
if(wParam == WM_LBUTTONUP) {
if(down) {
down = false;
MessageBox(NULL,"button up","test",0);
}
}
else {
if(!down) {
down = true;
}
}
}安了个键盘钩子,代码如上,运行的时候我在一个对话框上按下鼠标不放,然后拖到对话框外面,结果没有弹出对话框。为什么呢?如果不拖到对话框外面,可以弹出。
变量down已经是共享的了,那拖不拖到外面应该没差别啊
求解,先谢谢了

解决方案 »

  1.   

    建议使用WH_MOUSE_LL,这样就无需使用dll,没有这些麻烦事
      

  2.   

    这个问题很简单。你鼠标拖动到对话框外面时,对话框窗口是接收不到WM_LBUTTONUP 消息的,当然就hook不到了。你可以用spy++验证一下
      

  3.   

    我在一个对话框上按下鼠标不放,然后拖到对话框外面按下鼠标不放 会导致强行捕捉输入事件, 参看SetCapture的MSDN