нет сообщения WM_SIZE при сворачивании или восстановлении - PullRequest
1 голос
/ 22 сентября 2010

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

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

Я проверил несколько других примеров приложений WTL, я могу получить сообщение WM_SIZE при сворачивании или восстановлении.

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

спасибо!

Уильям Л.

1 Ответ

0 голосов
/ 20 ноября 2010

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

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

Чтобы проверить это с помощью WTL AppWizard, создайте минимальное модальное приложение Dialog 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 (), к которой она будет достигнута.

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

...