Процедура MsgRouter()
действует как прокси между системой обработки сообщений Windows для экземпляра Window
, связанного с HWND
. Он направляет сообщения Windows в объекты C ++.
Указатель на экземпляр Window
передается в процедуру MsgRouter()
через последний параметр функции CreateWindow()
. Когда вы впервые создаете HWND
через CreateWindow()
(или CreateWindowEx()
), некоторые сообщения отправляются - одним из них является WM_NCCREATE
. Когда процедура получает сообщение WM_NCCREATE
, параметр LPARAM
содержит указатель на CREATESTRUCT
, который содержит аргументы, переданные в функцию CreateWindow()
. Процедура извлекает указатель экземпляра Window
из CREATESTRUCT
и сохраняет его в HWND
, устанавливая его как атрибут HWND
(GWL_USERDATA
через SetWindowLong()
).
Теперь, когда указатель сохранен, оконная процедура теперь может получать указатель на исходный экземпляр Window
из HWND
через GetWindowLong()
, когда она получает сообщение. Наконец, оконная процедура вызывает WndProc()
для извлеченного указателя Window
, передавая точное сообщение и параметры, чтобы экземпляр Window
мог обработать сообщение.