微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

永远不会失去焦点的消息框

如何解决永远不会失去焦点的消息框

使用

创建的消息框
MessageBox (NULL,"Text","Title",MB_ICONinformatION | MB_SYstemMODAL);

停留在其他窗口之上,但当用户单击另一个窗口时它会失去键盘焦点。 我如何创建一个永远不会失去键盘焦点的消息框(或编辑框或对话框),所以如果我尝试使用 [ALT-TAB] 或鼠标或任何其他方法切换到另一个窗口,或者如果另一个应用程序正在运行在后台打开自己的编辑框,键盘焦点会跳回到我的消息/编辑框? 标准的 MessageBox 函数没有这样的选项,所以我尝试了一个自定义的编辑框。我尝试了 WM_SETFOCUS、WM_KILLFOCUS、WM_NCACTIVATE、SetForegroundWindow、SetFocus,但到目前为止没有运气。当我打开另一个窗口时,键盘焦点顽固地转到那个窗口。

解决方法

RegisterHotKey(0,1,MOD_ALT,VK_TAB); //disables alt+tab until message box returns
SetTimer(hwnd,100,0); //0.1 sec is enough for message box window creation
MessageBox(0,"Text","Title",MB_ICONINFORMATION|MB_SYSTEMMODAL); //since it's system modal,main message loop will wait for it to return
ClipCursor(0); //frees cursor
UnregisterHotKey(0,1); //enables alt+tab again

这里我们使用一个计时器来剪辑光标,这样用户将无法在消息框外单击。我将消息框的标题部分留在了剪辑区域之外,因为单击那里会取消光标剪辑。

case WM_TIMER:
{
    KillTimer(hwnd,1);
    RECT rc;
    GetWindowRect(FindWindow(0,"Title"),&rc);
    rc.top+=22; //title area left out of clip area
    ClipCursor(&rc); //user cannot move their mouse outside of the message box
    break;
}

然而,这不能阻止 Ctrl + Alt + Del 但可以满足您的要求。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。