VC 鼠标钩子 程序假死 大家进来帮忙看看啊
程序员小哈
领域专家: 嵌入式与硬件开发技术领域 2009-10-17 08:54:18 我初始化中注册了一个鼠标钩子
初始化函数中:
hHook=SetWindowsHookEx(WH_MOUSE,MouseProc,0,GetCurrentThreadId());
全局函数:
LRESULT CALLBACK MouseProc (int nCode,WPARAM wParam,LPARAM lParam)
{
//跟踪鼠标移动时的位置变化信息
if(wParam == WM_LBUTTONDOWN)
{ //是鼠标移动消息
point=((MOUSEHOOKSTRUCT *)lParam)->pt;//取鼠标信息
CString str;
str.Format("此处坐标为x=%d,y=%d",point.x,point.y);
CRect rc;
GetClientRect(wnd,&rc);
ScreenToClient(wnd,&point);
if (rc.PtInRect(point))
{
::PostMessage(wnd,WM_NCLBUTTONDOWN, HTCAPTION, MAKELPARAM(point.x,point.y));
}
}
//传递勾子信息
return CallNextHookEx(hHook,nCode,wParam,lParam);
}
为什么刚开始可以拖动对话框,但是拖动几次之后,cpu使用率就到了50%,像假死了一样
这么做哪不对吗?正确的用法该怎么用呢?
我的目的是想实现鼠标左键点击时拖动窗口移动,因为我在做一个程序的精简模式,精简模式下没有标题栏,整个对话框窗口都被一个web控件覆盖了,此时我点击对话框窗口时,无法响应鼠标左键点击事件,我上网查了一下,说要用钩子来做,我照网上的方法做了,可以实现,但是几次拖动之后就出现假死了,过了一会又会恢复回来,望各位指点一下,谢谢大家
还有一个问题就是,我上面的全局函数中如果不用PostMessage,而改用::SendMessage(wnd,WM_NCHITTEST,HTCAPTION, MAKELPARAM(point.x,point.y));的话,调试,发现WM_NCHITTEST对应的函数根本没有进入,怀疑是这种发送消息的方式不行,这是为什么呢?