Обработчик WM_POWERBROADCAST для CMainDlg в приложении ATL не вызывается - PullRequest
0 голосов
/ 08 марта 2010

У меня есть приложение ATL, в котором я хочу обработать WM_POWERBROADCAST . У меня есть CMainDlg (CAxDialogImpl), в котором MSG_MAP я определил обработчик.

BEGIN_MSG_MAP(CMainDlg)
    ...
    MESSAGE_HANDLER(WM_POWERBROADCAST, OnPowerChange)
    ...
END_MSG_MAP()

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

Есть идеи о том, что может происходить и как это исправить? По какой-то причине CMainDlg не получает уведомления о событиях питания?

Ответы [ 3 ]

0 голосов
/ 09 марта 2010

Я подозреваю, что ваш диалог не является окном верхнего уровня (в стиле WS_POPUP).

Только что протестировано с немодальным диалоговым приложением WTL AppWizard, что WM_POWERBROADCAST получен (без какой-либо регистрации) на подключенном / отключенном AC.

0 голосов
/ 27 сентября 2011

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

0 голосов
/ 09 марта 2010

Вы зарегистрировались для получения событий питания?

...