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 руб./мес


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




 52 - PeekMessage() / Win 32 API / Win32 API

Шаг 52 - PeekMessage()

Помните, что функция GetMessage() является блокирующей. То есть она ожидает пока не будет получено сообщение из очереди. До этого момента программа стоит. Что делать, если надо просто проверить есть ли сообщение в очереди. Зачем ??? Например, чтобы занять программу в этот момент другими действиями, например, упаковкой базы данных. Для этого и есть функция PeekMessage(). Она проверяет есть ли в очереди сообщение и программа выполняется дальше.

BOOL PeekMessage
(  
	LPMSG lpMsg,		// Указатель на структуру MSG
	HWND hWnd,		// Указатель на окно (кому сообщение)
	UINT wMsgFilterMin,	// для маски минимум
	UINT wMsgFilterMax,	// для маски максимум
	INT wRemoveMsg		// Что делать с сообщением
);

Единственный последний параметр нам не знаком. Вот какой он может быть:

PM_NOREMOVE		Не удалять сообщение из очереди
PM_REMOVE			Удалять сообщения из очереди

Эта функция вернет ненулевое значение, если в очереди есть сообщения. Если фильтра нет, то будут получены все сообщения, при наличии фильтра только по фильтру. Обратите внимание, что GetMessage() вернет WM_QUIT даже при фильтре. Пример использования ее может быть такой.

while (true)
{
	while (!::PeekMessage(&m_msgCur, NULL, NULL, NULL, PM_NOREMOVE)) 
	{
		// функция для работы пока нет сообщений
	}
	if (!::GetMessage(&m_msgCur, NULL, NULL, NULL)) break;
	::TranslateMessage(&m_msgCur); 
	::DispatchMessage(&m_msgCur);
}

| |
Автор Каев Артем.
[AD]