Win32,C++:创建一个不会抢占焦点的弹出窗口

10

我正在创建一个程序,可以在特定时间显示弹出窗口(就像一些聊天客户端一样),用户可以单击窗口。但是,我不想从当前应用程序中拿走焦点。

目前我使用的方法是使用带有WS_POPUPWINDOW属性的HWND,并将窗口最小化然后还原。然而,这会从当前应用程序中夺取焦点。设置前景或隐藏并显示窗口并没有使它出现在前景。我希望仍然能够使用HWND,以便我可以在此窗口中使用其他元素,但我不知道如何在不夺取焦点的情况下将其置于前景。

我使用win32和c++。

2个回答

25

不激活地展示:

ShowWindow(hwnd, SW_SHOWNOACTIVATE);
不激活而引发:
SetWindowPos(hwnd, HWND_TOP, 0, 0, 0, 0, SWP_NOMOVE|SWP_NOSIZE|SWP_NOACTIVATE);

1

很遗憾,这对我不起作用。窗口是使用CreateWindowExA创建的,并使用ShowWindow(hwnd, SW_SHOWNOACTIVATE)显示,但键盘焦点仍然被从具有焦点的窗口窃取(该窗口是通过使用SetWindowLong()SetLayeredWindowAttributes()创建具有分层和透明属性的窗口的)。

附注:具有焦点的窗口不是新创建的窗口的父窗口。

已解决:当我删除SetForegroundWindow调用时,它起作用了。此函数会导致传递给参数的窗口被激活。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接