В 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);
}

0 ответов

Другие вопросы по тегам