这是我用来在应用程序的主窗体中间显示小弹出窗口的代码:
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;
}
当另一个顶级窗口处于活动状态时(由于 SW_SHOWNOACTIVATE 标志),弹出窗口确实显示而不会窃取焦点。但是如果另一个窗口在调用 TForm_Popup::Show 之前被用户最大化,弹出窗口会显示在它的顶部,这是不可取的。是否可以将其更改为仅在其父窗口(应用程序的主窗口)的相应区域不与另一个顶级窗口重叠时才可见弹出窗口?因此,如果应用程序的主窗体完全位于某个其他窗口之后,那么查看该主窗口的子窗口是不合逻辑的。