これは、アプリケーションのメイン フォームのちょうど真ん中に小さなポップアップ ウィンドウを表示するために使用しているコードです。
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 を呼び出す直前に別のウィンドウを最大化すると、ポップアップ ウィンドウがその上に表示されてしまい、望ましくありません。親ウィンドウ(アプリケーションのメインウィンドウ)の対応する領域が別のトップレベルウィンドウと重なっていない場合にのみ、ポップアップウィンドウが表示されるように変更できますか? したがって、アプリケーションのメイン フォームが他のウィンドウの背後に完全にある場合、このメイン ウィンドウの子ウィンドウを表示することは論理的ではありません。