我正在尝试将鼠标指针(使用自定义光标)限制到我的应用程序窗口的客户区域,该应用程序最初有效,但当我从应用程序切换回来时遇到问题。我正在使用ClipCursor()
来限制游标并使用一些与情境有关的不同游标,所以我使用SetCursor()
而不是设置窗口的类游标。
通过检查我的WndProc中的WM_SETCURSOR消息,当Alt-Tabbing远离应用程序并返回(我想允许)时,我已经正确恢复了光标本身:
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?
答案 0 :(得分:1)
您可以观看失去焦点并获得焦点消息
1)WA_ACTIVE或WA_CLICKACTIVE - 窗口得到了重点
2)WA_INACTIVE - 窗口失去焦点
你应该看看你的应用是否以全屏模式运行:
3)WM_DISPLAYCHANGE - 当Windows更改桌面分辨率时
并调整消息大小
WM_SIZE - 如果wparam等于SIZE_MINIMIZED,SIZE_MAXIMIZED或SIZE_RESTORED,则可以剪辑或取消剪辑光标
答案 1 :(得分:0)
WM_SETFOCUS
,这允许ClipCursor工作。