2010-09-22 2 views
1

Согласно MSDN, WM_SIZE следует отправлять в окно, когда окно минимизируется или восстанавливается. Но мое окно приложения, которое является WTL CDialogImpl, никогда не получает WM_SIZE при минимизации или восстановлении.нет сообщения WM_SIZE при минимизации или восстановлении

Я использую spy ++, чтобы проверить его, я могу получить WM_SYSCOMMAND, WM_WINDOWPOSCHANING, WM_ACTIVE, WM_ACTIVEAPP и т. Д., Но не WM_SIZE.

Я проверил какое-то другое приложение примера WTL, я могу получить WM_SIZE msg при минимизации или восстановлении.

Вопрос: почему мой WTL CDialogImpl не получает WM_SIZE? Помимо этого есть ли какое-либо другое сообщение, указывающее на восстановление или сведение к минимуму? Я имею в виду, что в системе большую часть времени есть анимация, чтобы показать процесс минимизации/восстановления. Мне нужно сообщение или событие, чтобы приложение узнало, что анимация выполняется при восстановлении.

спасибо!

William L.

+1

WM_MOVE, а не WM_SIZE. Документируйте флаги стиля окна. –

ответ

0

Как указано в docОкно получает это сообщение через WindowProc функции так что вы не получите его через Spy ++.

В любом случае сообщение WM_SIZE получено в АТЛ :: CDialogImpl полученные диалоги при создании, минимизации и восстановления.

Чтобы проверить это с помощью WTL AppWizard создать минимальное приложение WTL модального диалогового окна и добавить запись в карте сообщений для WM_SIZE и соответствие OnSize() члена:

BEGIN_MSG_MAP(CMainDlg) 
     MESSAGE_HANDLER(WM_INITDIALOG, OnInitDialog) 
     MESSAGE_HANDLER(WM_SIZE, OnSize) 
     //... 
    END_MSG_MAP() 
    LRESULT OnSize(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& /*bHandled*/) 
    { 
     return 0; 
    } 

Установить точку останова в OnSize() он будет поражен.

Ваша проблема (если есть) в другом месте.

Смежные вопросы