我正在创建一个程序,可以在特定时间显示弹出窗口(就像一些聊天客户端一样),用户可以单击窗口。但是,我不想从当前应用程序中拿走焦点。
目前我使用的方法是使用带有WS_POPUPWINDOW属性的HWND,并将窗口最小化然后还原。然而,这会从当前应用程序中夺取焦点。设置前景或隐藏并显示窗口并没有使它出现在前景。我希望仍然能够使用HWND,以便我可以在此窗口中使用其他元素,但我不知道如何在不夺取焦点的情况下将其置于前景。
我使用win32和c++。
不激活地展示:
ShowWindow(hwnd, SW_SHOWNOACTIVATE);
不激活而引发:SetWindowPos(hwnd, HWND_TOP, 0, 0, 0, 0, SWP_NOMOVE|SWP_NOSIZE|SWP_NOACTIVATE);
很遗憾,这对我不起作用。窗口是使用CreateWindowExA创建的,并使用ShowWindow(hwnd, SW_SHOWNOACTIVATE)显示,但键盘焦点仍然被从具有焦点的窗口窃取(该窗口是通过使用SetWindowLong()和SetLayeredWindowAttributes()创建具有分层和透明属性的窗口的)。
附注:具有焦点的窗口不是新创建的窗口的父窗口。
已解决:当我删除SetForegroundWindow调用时,它起作用了。此函数会导致传递给参数的窗口被激活。