Winapi 是否可以在当前聚焦的窗口后面显示弹出窗口? 这是我用来显示小弹出窗口的代码,它正好在主应用程序的中间: TForm_Popup::Show { SetBounds(Form_Main->Left + ((Form_Main->Width - Width) >> 1), Form_Main->Top + ((Form_Main->Height - Height) >> 1), Width, Height); // set window position in the center of main window SetWindowLong(Handle, GWL_HWNDPARENT, (long)Form_Main->Handle); // popup window should be modal relative to main window of application SetWindowPos(Handle, 0, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE | SWP_NOZORDER); // without this the window will not be shown ShowWindow(Handle, SW_SHOWNOACTIVATE); Visible = true; }

Winapi 是否可以在当前聚焦的窗口后面显示弹出窗口? 这是我用来显示小弹出窗口的代码,它正好在主应用程序的中间: TForm_Popup::Show { SetBounds(Form_Main->Left + ((Form_Main->Width - Width) >> 1), Form_Main->Top + ((Form_Main->Height - Height) >> 1), Width, Height); // set window position in the center of main window SetWindowLong(Handle, GWL_HWNDPARENT, (long)Form_Main->Handle); // popup window should be modal relative to main window of application SetWindowPos(Handle, 0, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE | SWP_NOZORDER); // without this the window will not be shown ShowWindow(Handle, SW_SHOWNOACTIVATE); Visible = true; },winapi,c++builder-xe2,Winapi,C++builder Xe2,当另一个顶级窗口处于活动状态时(由于SW_SHOWNOACTIVATE标志),弹出窗口确实会显示,而不会窃取焦点。但是,如果用户在调用TForm_Popup::Show之前将另一个窗口最大化,则弹出窗口将显示在它的顶部,这是不需要的。是否可以进行更改,使弹出窗口仅在其父窗口(应用程序的主窗口)的相应区域不与另一个顶级窗口重叠时可见?因此,如果应用程序的主窗体完全位于其他窗口之后,那么查看此主窗口的子窗口是不符合逻辑的。尝试使用windows.SetParent()而不是windows.SetWi

当另一个顶级窗口处于活动状态时(由于SW_SHOWNOACTIVATE标志),弹出窗口确实会显示,而不会窃取焦点。但是,如果用户在调用TForm_Popup::Show之前将另一个窗口最大化,则弹出窗口将显示在它的顶部,这是不需要的。是否可以进行更改,使弹出窗口仅在其父窗口(应用程序的主窗口)的相应区域不与另一个顶级窗口重叠时可见?因此,如果应用程序的主窗体完全位于其他窗口之后,那么查看此主窗口的子窗口是不符合逻辑的。

尝试使用
windows.SetParent()
而不是
windows.SetWindowLong(GWL\u HWNDPARENT)
。或者将表单的
poupparent
属性设置为
form\u Main
。或者重写表单的
CreateParams()
方法,将
form_Main.Handle
设置为
Params.WndParent
。您的注释说“应该是模态的”,但是
Visible=true
是非模态的。模态窗口意味着窗口有自己的消息循环,当窗口可见时,它将取代线程的消息循环。