我试图将鼠标指针(使用自定义光标)限制在我的应用程序窗口的客户端区,它最初可以工作,但当我从应用程序切换回来时会遇到问题。我使用ClipCursor()来限制游标,并使用了两个不同的游标,它们依赖于情况,所以我使用SetCursor()而不是设置窗口的类游标。
我已经通过检查WndProc中的WM_SETCURSOR消息,让光标在按住Alt键离开应用程序并返回(我想要允许的)时正确地恢复到原来的状态:
case WM_SETCURSOR:
{
if (mIsMouseGrabOn) // a bool that indicates if the mouse should be restricted to the cient area or not
SetCursor(gmInstance->m_cursorTargetGreen);
else
SetCursor(gmInstance->m_cursorTargetRed);
return 0; // prevent DefWndProc from resetting it
}但在切换回来时,光标不再被裁剪到我的应用程序窗口的客户区。我尝试过检查WM_ACTIVATEAPP (如下所示),但没有成功,也尝试过使用相同的代码和相同的结果检查WM_ACTIVATE。
case WM_ACTIVATEAPP:
{
if(wParam == TRUE) // When we are activated
{
if (mIsMouseGrabOn)
GrabMouse(); // function to determine client area and call ClipCusor with the results
else
ClipCusor(NULL); // make the sure cursor is freed
}
else if(wParam == FALSE) // When we are deactivated
{
ClipCursor(NULL);
}
//return 0; // Let DefWndProc handle anything else
}有了上面的代码,光标将正确更改,但无论mIsMouseGrabOn的状态如何,都不会被捕获。
我如何让我的光标被正确绑定时,从应用程序切换回来?我应该关注哪些邮件而不是WM_ACTIVATEAPP?
发布于 2013-04-11 10:42:03
您可以观看丢失的焦点和获得焦点消息
1) WA_ACTIVE或WA_CLICKACTIVE -窗口获得焦点
2) WA_INACTIVE -窗口失去焦点
如果你的应用程序在全屏模式下运行,你应该注意:
3) WM_DISPLAYCHANGE -当Windows更改桌面分辨率时
和调整消息大小
WM_SIZE -如果wparam等于SIZE_MINIMIZED、SIZE_MAXIMIZED或SIZE_RESTORED,则可以裁剪或取消裁剪光标
发布于 2016-07-06 05:09:12
在窗口接收到键盘焦点后发送WM_SETFOCUS,这将允许ClipCursor工作。
https://stackoverflow.com/questions/10791439
复制相似问题