Шаг 54 - DispatchMessage()

Эта функция пересылает сообщение оконной процедуре.

LRESULT DispatchMessage
(  
	CONST MSG *lpmsg	// указатель на структуру с сообщением
);

Возвращаемое значение является тем, которое вернет оконная процедура. Но обычно это значение игнорируется. Откуда берется оконная процедура ??? Она есть в параметрах, то есть не сама процедура, а указатель на окно (HWND). Если указатель HWND_TOPMOST, то сообщение будет переслано всем окнам верхнего уровня. А если NULL, то вообще ничего не будет делаться. Эта функция нужна только один раз, даже если у вас в приложении много окон, она будет рассылать сообщения по окнам в соответствии со структурой MSG. Теперь мы можем нарисовать общую схему прохождения сообщений:

54.gif (6816 b)

Итак, мы получаем сообщение. Проверяем не конец ли это работы, т.е. WM_QUIT. Если нет, то отдаем сообщение в TranslateMessage(), чтобы получить сообщения от клавиатуры более высокого уровня. После этого перенаправляем сообщение в оконную процедуру на основе HWND указанного в самом сообщении DispatchMessage. Цикл должен быть один для одного потока.


Предыдущий Шаг | Следующий Шаг | Оглавление
Автор Каев Артем - 25.01.2001