在某些情况下,我们的应用程序 UI 线程必须进行繁重的处理,这可能需要 5 秒以上,如果发生这种情况,操作系统会认为我的应用程序被挂起,因此会创建一个幽灵窗口。
当我的应用程序处于恢复状态时,此幽灵窗口在我的应用程序顶部正确创建,但是当我的应用程序处于最大化状态时,此幽灵窗口始终选择 Point(0,0) 作为其左上角,因此看起来应用程序正在跳跃到左上角。我们能避免这种跳跃吗?
我不想为我的应用禁用幽灵窗口创建。一种解决方法可能是定期间隔后 PeekMessage(不要删除)。但是,如果可能的话,我希望在操作系统需要时出现幽灵窗口,但它应该正是我的应用程序在进入无响应状态之前所在的位置。
请注意,我们通过覆盖 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);
}