Сообщение WM_POWERBROADCAST не перехвачено в MFC Dlg
Я пытаюсь поймать сообщение WM_POWERBROADCAST, когда система переходит в спящий режим.
Я делаю как:
BOOL CPowManApp::PreTranslateMessage(MSG* pMsg)
{
if(pMsg->message == WM_POWERBROADCAST || pMsg->message == WM_POWER)
{
CString strMessage;
strMessage.Format(_T("%d WM_POWERB%s wParam %x lParam %x"),
pMsg->time,
pMsg->message == WM_POWER?_T(""):_T("BRAODCAST"),
pMsg->wParam,
pMsg->lParam);
OutputDebugString(strMessage);
}
return CWinApp::PreTranslateMessage(pMsg);
}
Это просто не работает. Между тем приложение win32 работает просто отлично. Я безуспешно пытался поместить обработчик сообщений в класс Dlg.
Я создаю приложение с VS6.0. Где я не прав?
2 ответа
Решение
В вашей карте сообщений
ON_MESSAGE( WM_POWERBROADCAST, OnPowerBroadcast )
Реализация
LRESULT CDialogDlg::OnPowerBroadcast(WPARAM wParam, LPARAM lParam)
{
switch (wParam)
{
case PBT_...
}
}
Обязательно проверьте MSDN для некоторых специфических для ОС случаев вокруг значений wParam.
В документации этого сообщения конкретно говорится:
Окно получает это сообщение через функцию WindowProc.
Вы пытались переписать этот метод в главном окне?