特定のケースでは、アプリケーションの UI スレッドが 5 秒以上かかる重い処理を行う必要があり、これが発生した場合、OS はアプリがハングしたと見なし、ゴースト ウィンドウを作成します。
このゴースト ウィンドウは、アプリが復元された状態のときにアプリの上に正しく作成されますが、アプリが最大化された状態のとき、このゴースト ウィンドウは常に左上隅として Point(0,0) を選択するため、アプリがジャンプしているように見えます単独で左上に移動します。このジャンプを避けることはできますか?
アプリのゴースト ウィンドウの作成を無効にしたくありません。回避策の 1 つは、定期的に PeekMessage (削除しないでください) を使用することです。ただし、可能であれば、OS が必要なときにいつでもゴースト ウィンドウを表示したいのですが、応答しない状態になる前にアプリがあった場所に正確に表示する必要があります。
WM_GETMINMAXINFO をオーバーライドして、アプリケーションの最大ウィンドウ サイズをカスタマイズすることに注意してください。
------------これがカスタム ウィンドウ サイズの設定方法です--------------
void CHangTestDlg::OnGetMinMaxInfo(MINMAXINFO* lpMMI)
{
lpMMI->ptMaxSize.x = 1011;
lpMMI->ptMaxSize.y = 727;
CRect rectWorkArea;
SystemParametersInfo(SPI_GETWORKAREA, 0, (PVOID)&rectWorkArea, 0 );
int ileft = (rectWorkArea.Width() - 1011)/2;
int itop = (rectWorkArea.Height() - 727)/2;
lpMMI->ptMaxPosition = CPoint(ileft, itop);
CDialog::OnGetMinMaxInfo(lpMMI);
}