Какое сообщение обрабатывается в процессе свертывания или сворачивания окна? - PullRequest
3 голосов
/ 24 декабря 2008

Я хочу нарисовать строку заголовка окна с помощью MFC. Поэтому я переопределяю метод OnNcPaint () CMainFrame. Кажется, все в порядке, пока я не нажму на элемент в меню управления, чтобы уменьшить или увеличить его. В процессе минимизации или максимизации я вижу, как появилась оригинальная строка заголовка. Я не знаю, почему это произошло. Может быть, есть некоторые сообщения, которые я не обработал в процессе? Нужна ваша помощь. Большое спасибо!

Ответы [ 4 ]

2 голосов
/ 24 декабря 2008

Во время процесса минимизации / максимизации? Звучит как анимация мин / макс. Вы можете убедиться в этом, отключив анимацию через «Мой компьютер»> «Свойства»> «Дополнительно»> «Настройки».

Что касается заглавного вопроса, вы получите WM_SIZE. Посмотрите документы для CWnd :: OnSize .

CMyDialog::OnSize(UINT nType, int cx, int cy)
{
    switch (nType)
    {
        case SIZE_MAXIMIZED:
            // window was maximized
            break;

        case SIZE_MINIMIZED:
            // window was minimized
            break;

        case SIZE_RESTORED:
            // misleading - this occurs when restored from minimized/maximized AND
            // for normal size operations when already restored
            break;

        default:
            // you could also deal with SIZE_MAXHIDE and SIZE_MAXSHOW
            // but rarely need to
            break;
    }
}
0 голосов
/ 04 января 2009

Вы говорите об оконной анимации, верно? Где окно показано «растущим» или «сжимающимся» от его текущего размера и положения до максимального размера или к панели задач.

Эта анимация выполняется независимо от внешнего вида вашего окна. Вы можете вызвать DrawAnimatedRects API-функцию , чтобы запустить анимацию самостоятельно. Он просто рисует обычную строку заголовка в соответствии с текущими настройками дисплея.

Обратите внимание, что другие окна с настраиваемыми строками заголовка ведут себя так же. Посмотрите на различные версии Office, например. При минимизации или максимизации отображается строка заголовка Windows, а не строка заголовка клиента. Вы также можете увидеть аномалии при изменении размеров окон, которые не будут занимать весь экран. Например, при максимизации игры «Сердца» анимация показывает, что окно расширяется до полной ширины экрана, но когда анимация заканчивается, окно становится уже (но все еще развернуто).

Итак, чтобы ответить на ваш вопрос, сообщение не отправлено . Анимация изменения размера выполняется оконным менеджером без какой-либо помощи или участия со стороны изменяемого размера окна. Что касается вашей программы, окно переходит непосредственно от своего первоначального размера к новому размеру.

0 голосов
/ 28 декабря 2008

OnShow вызывается раньше. OnSize вызывается после ..
Я думаю, что значения SW_MAXIMIZE и SW_MINIMIZE ..

Есть также способ сделать так, чтобы ваше приложение не заботилось о настройках анимации в окнах.
При сворачивании приложения вы можете добавить свое приложение в системный трей, что удивительным образом покрывает рисунок. Прошло много лет с тех пор, как я использовал его, но если ты сможешь найти это, ты будешь золотой.

0 голосов
/ 24 декабря 2008

Вы можете использовать Spy ++, чтобы увидеть, какие сообщения получило окно. У меня смутные воспоминания о появлении OnSize раньше, чем я ожидал.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...