Метод PreTranslateAppMessage класса CSplashWnd
Класс CSplashWnd имеет свою таблицу сообщений. Так как в классе CSplashWnd переопределен метод PreTranslateAppMessage, то он вызывается для каждого сообщения, поступающего в это окно перед его обработкой.
В самом начале метод PreTranslateAppMessage проверяет, существует ли окно заставки. Если нет, то дополнительная обработка сообщений не выполняется:
if (c_pSplashWnd == NULL)
return FALSE;
Когда окно заставки уже создано, метод PreTranslateAppMessage определяет тип сообщения. Если сообщение поступило от мыши или клавиатуры, то для окна заставки, представленного объектом c_pSplashWnd, вызывается метод HideSplashScreen, который его закрывает не дожидаясь первого сообщения от таймера. Метод PreTranslateAppMessage в этом случае возвращает значение TRUE и обработка сообщения завершается:
if (pMsg->message == WM_KEYDOWN
pMsg->message == WM_SYSKEYDOWN
pMsg->message == WM_LBUTTONDOWN
pMsg->message == WM_RBUTTONDOWN
pMsg->message == WM_MBUTTONDOWN
pMsg->message == WM_NCLBUTTONDOWN
pMsg->message == WM_NCRBUTTONDOWN
pMsg->message == WM_NCMBUTTONDOWN)
{
c_pSplashWnd->HideSplashScreen();
return TRUE; // message handled here
}
Если поступило какое-либо другое сообщение, метод PreTranslateAppMessage возвращает значение FALSE и оно передается далее для дальнейшей обработки:
return FALSE;