Наш класс должен обрабатывать сообщения. Мы с вами реализуем эту обработку. Конечно это обработка будет точно такая как и при программировании на С. Мы же помните делаем оболочку чем MFC и является. Работаем с нашим классом CWinApp. Создадим функцию PumpMessage. Эта функция будет нам говорить есть сообщения или нет.
class CWinApp { .......... virtual ~CWinApp(); private: MSG m_msgCur; // структура сообщения Win32 BOOL PumpMessage(); // насос для сообщений :-) };
Реализация.
BOOL CWinApp::PumpMessage() { if (!::GetMessage(&m_msgCur, NULL, NULL, NULL)) // Есть ли сообшение в очереди ? { return FALSE; // нет вернуть FALSE } ::TranslateMessage(&m_msgCur); // сообщение есть обработать ::DispatchMessage(&m_msgCur); return TRUE; // да сообщение есть вернуть TRUE }
Ну и теперь можно реализовать Run.
int CWinApp::Run() { while (1) // запуск цикла обработки сообщений { while (!::PeekMessage(&m_msgCur, NULL, NULL, NULL, PM_NOREMOVE)) // Есть ли сообщение в очереди ? { // нет сообщения спросить еще } if (!PumpMessage()) break; // Сообщение есть, выбрать его из очереди } return 0; }
Обратите внимание, что мы используем PeekMessage для того что бы проверить есть ли сообщение или нет. Дело в том, что эта функция не блокирует поток, и мы можем выполнять какие то задачи еще, пока нет сообщений. А вот если оно там появилось, то мы его заберем PumpMessage.
Перейдите в проект TestMyLib и выполните перекомпиляцию Rebuild All потом запустите приложение. Оно будет в памяти. По CTRL-ALT-DEL вы сможете его увидеть. Оно выполняется и ждет команды на завершение. Только взять ее неоткуда.