C++ Win32,C++;:在不窃取焦点的情况下创建弹出窗口

C++ Win32,C++;:在不窃取焦点的情况下创建弹出窗口,c++,windows,winapi,C++,Windows,Winapi,我正在创建一个程序,在特定的时间显示一个弹出窗口(就像一些聊天客户端一样),用户可以点击它。但是,我不想从当前应用程序中去掉焦点 我现在的做法是使用带有WS_POPUPWINDOW的HWND,最小化然后恢复窗口。但是,这会抢走当前应用程序的焦点。设置前景或隐藏并显示窗口不会使其显示在前景上。我希望能够继续使用HWND,这样我就可以在这个窗口中使用其他元素,但我不知道如何在不窃取焦点的情况下为它提供前景 我使用Win32和C++。 要在不激活的情况下显示: ShowWindow(hwnd, SW_

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

我现在的做法是使用带有WS_POPUPWINDOW的HWND,最小化然后恢复窗口。但是,这会抢走当前应用程序的焦点。设置前景或隐藏并显示窗口不会使其显示在前景上。我希望能够继续使用HWND,这样我就可以在这个窗口中使用其他元素,但我不知道如何在不窃取焦点的情况下为它提供前景


我使用Win32和C++。 要在不激活的情况下显示:

ShowWindow(hwnd, SW_SHOWNOACTIVATE);
SetWindowPos(hwnd, HWND_TOP, 0, 0, 0, 0, SWP_NOMOVE|SWP_NOSIZE|SWP_NOACTIVATE);
要在不激活的情况下提升:

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()创建具有分层和传输属性的窗口)

PS:具有焦点的窗口不是新创建窗口的父窗口

已解决:当我删除setForeGroundIndow调用时,它起作用。此函数将激活作为参数传递的窗口