В Windows7, когда мое приложение зависло в развернутом состоянии, независимо от положения окна приложения, окно-призрак всегда создается в верхнем левом углу
В некоторых случаях наш поток пользовательского интерфейса приложения должен выполнять тяжелую обработку, которая может занять более 5 секунд, и если это происходит, ОС считает, что мое приложение зависло, и, следовательно, создает окно-призрак.
Это окно-призрак правильно создается в верхней части моего приложения, когда мое приложение находится в восстановленном состоянии, однако, когда мое приложение находится в развернутом состоянии, это окно-призрак всегда выбирает точку (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);
}