C++ C++ C# C# ASP.NET Security ASP.NET Security ASM ASM Скачать Скачать Поиск Поиск Хостинг Хостинг  
  Программа для работы с LPT портом...
Язык: .NET — ©Alexey...
  "ASP.NET Atlas" – AJAX в исполнении Micro...
Язык: .NET — ©legigor@mail.ru...
  "Невытесняющая" Многопоточность...
Язык: C/C++ — ©...
  01.05.2010 — Update World C++: Сборник GPL QT исходников
  15.12.2007 — Весь сайт целиком можно загрузить по ссылкам из раздела Скачать
Хостинг:
Windows 2003, ASP.NET 2.0
бесплатный и от 80 руб./мес


   Отправить письмо
Кулабухов Артем, Беларусь




 Как делали MFC - Обрабатываем сообщения / Как делали MFC / Visual C++

Как делали MFC - Обрабатываем сообщения

Наш класс должен обрабатывать сообщения. Мы с вами реализуем эту обработку. Конечно это обработка будет точно такая как и при программировании на С. Мы же помните делаем оболочку чем 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 вы сможете его увидеть. Оно выполняется и ждет команды на завершение. Только взять ее неоткуда.

gif/4_1.gif (5596 b)


Загрузить проект | | |
Автор Каев Артем.
[AD]