在Windows7上,当我的应用程序挂起在最大化状态时,则不考虑应用程序';s窗口位置重影窗口始终创建在左上角

在Windows7上,当我的应用程序挂起在最大化状态时,则不考虑应用程序';s窗口位置重影窗口始终创建在左上角,windows,aero-snap,Windows,Aero Snap,在某些情况下,我们的应用程序UI线程必须进行繁重的处理,这可能需要5秒以上的时间,如果发生这种情况,操作系统会认为我的应用程序被挂起,因此会创建一个重影窗口 当我的应用程序处于还原状态时,此重影窗口正确创建在我的应用程序顶部。但是,当我的应用程序处于最大化状态时,此重影窗口始终选择点(0,0)作为其左上角,因此它看起来像是应用程序自己跳到左上角。我们能避免这种跳跃吗 我不想为我的应用禁用鬼窗口创建。一种解决方法是在定期间隔后查看消息(不要删除)。然而,如果可能的话,我希望ghost窗口在操作系统

在某些情况下,我们的应用程序UI线程必须进行繁重的处理,这可能需要5秒以上的时间,如果发生这种情况,操作系统会认为我的应用程序被挂起,因此会创建一个重影窗口

当我的应用程序处于还原状态时,此重影窗口正确创建在我的应用程序顶部。但是,当我的应用程序处于最大化状态时,此重影窗口始终选择点(0,0)作为其左上角,因此它看起来像是应用程序自己跳到左上角。我们能避免这种跳跃吗

我不想为我的应用禁用鬼窗口创建。一种解决方法是在定期间隔后查看消息(不要删除)。然而,如果可能的话,我希望ghost窗口在操作系统需要的时候出现,但它应该正好在我的应用程序处于无响应状态之前的位置

请注意,我们通过覆盖WM_GETMINMAXINFO来定制应用程序的最大窗口大小

------------这是我们设置自定义窗口大小的方式--------------



它不会“认为”你的应用程序已挂起,你的应用程序实际上已挂起。而不是寻找一个创可贴的鬼窗问题,解决实际问题。在工作线程上执行长时间运行的操作。Q&D解决方案是。@Hans:我不想使用DisableProcessWindow重影。我已经开始将较重的代码移动到线程中,但为了安全起见,我还想修复幽灵窗口问题。我一定是做错了什么,因为根据“如果顶级窗口停止响应消息超过几秒钟,系统会认为该窗口没有响应。在这种情况下,系统会隐藏该窗口,并将其替换为具有相同Z顺序、位置、大小和视觉属性的重影窗口。”
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);
}