首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在alt-tab键切换后恢复ClipCursor约束

如何在alt-tab键切换后恢复ClipCursor约束
EN

Stack Overflow用户
提问于 2012-05-29 07:24:53
回答 2查看 887关注 0票数 2

我试图将鼠标指针(使用自定义光标)限制在我的应用程序窗口的客户端区,它最初可以工作,但当我从应用程序切换回来时会遇到问题。我使用ClipCursor()来限制游标,并使用了两个不同的游标,它们依赖于情况,所以我使用SetCursor()而不是设置窗口的类游标。

我已经通过检查WndProc中的WM_SETCURSOR消息,让光标在按住Alt键离开应用程序并返回(我想要允许的)时正确地恢复到原来的状态:

代码语言:javascript
复制
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。

代码语言:javascript
复制
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?

EN

回答 2

Stack Overflow用户

发布于 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,则可以裁剪或取消裁剪光标

票数 1
EN

Stack Overflow用户

发布于 2016-07-06 05:09:12

在窗口接收到键盘焦点后发送WM_SETFOCUS,这将允许ClipCursor工作。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10791439

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档