Как DispatchMessage решает, какой WndProc использовать? - PullRequest
3 голосов
/ 23 июля 2011

Я рассматриваю некоторый код для проекта с открытым исходным кодом, и это мой первый раз, когда я имею дело с приложением Win32 (в основном я занимался консолью).Я вижу, что некоторые функции в коде являются Windows-процедурами, потому что они возвращают LRESULT CALLBACK.

Есть ли что-то, что программист должен сделать, чтобы убедиться, что DispatchMessage вызывает правильный WndProc или кодируется DispatchMessage таким образом, что он может определитьправильный WndProc сам по себе?


РЕДАКТИРОВАТЬ:

Я предполагаю, что способ DispatchMessage (const MSG *) выбирает между различными WndProc вПриложение основано на элементе дескриптора окна (HWND) объекта MSG, переданного ему. [Надеюсь, предыдущее предложение не было слишком запутанным.] Если сообщение было для окна редактирования, например, для приложения (а не для егоГлавное окно,), а затем DispatchMessage выберет функцию-член WndProc для конкретного класса, объектом которого является окно редактирования.Если бы сообщение было для главного окна, то оно выбрало бы функцию-член WndProc для класса, объектом которого является главное окно (для меня этот класс был бы классом Notepad_plus_Window).Впрочем, это всего лишь мысль.Я не нашел много, чтобы поддержать это, поэтому я был бы рад, если бы кто-нибудь мог подтвердить это.

1 Ответ

2 голосов
/ 12 сентября 2011

Да, вы правы, он использует MSG.hwnd для отправки сообщения в правильное окно. Следует отметить, что он будет использовать WndProc, связанный с окном, а не класс окна. Окно является экземпляром класса окна.

Эта статья Microsoft "Under The Hood" иллюстрирует это довольно подробным псевдокодом DispatchMessage (), который также стоит посмотреть)

...