Захватить последний WM_SIZE

Когда я изменяю размер окна, я хочу сообщить другой части моей программы, что мое окно изменило размер. Я читал MSDN, что:

Сообщение WM SIZE Сообщение WM SIZE отправляется в окно после изменения его размера.

Однако, я получаю WM_SIZE даже при перетаскивании. Я заметил, что есть также сообщение WM_SIZING, которое отправляется при изменении размера моего окна. На данный момент я не вижу разницы между WM_SIZE и WM_SIZING.

Есть ли способ захватить последнее сообщение WM_SIZE, чтобы не "спамить" мою программу с помощью сообщений об изменении размера?

Ответ 1

Когда вы начинаете перетаскивать окно, система вводит модальный цикл перемещения/изменения размера; он не возвращается в ваш собственный цикл сообщения, пока не завершится действие перетаскивания. Вы все еще получаете WM_SIZE, потому что он отправляется непосредственно в оконную процедуру, но не проходит через ваш собственный цикл сообщений.

В начале такого модального действия перетаскивания система отправляет WM_ENTERSIZEMOVE в вашу оконную процедуру. Когда вы отпустите кнопку мыши, ваше приложение получит WM_EXITSIZEMOVE. Вероятно, это сообщение, которое вы хотите включить.