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