我正在研究一个开源项目的一些代码,这是我第一次处理 Win32 应用程序(主要是控制台的东西)。我看到代码中的几个函数是 Windows 过程,因为它们返回 LRESULT CALBACK。
程序员是否需要做一些事情来确保 DispatchMessage 调用正确的 WndProc,或者 DispatchMessage 的编码方式使其可以自行确定正确的 WndProc?
<小时/>编辑:
我猜测 DispatchMessage(const MSG*) 在应用程序中的不同 WndProc 之间进行选择的方式是基于传递给它的 MSG 对象的窗口句柄成员 (HWND)。[希望前面的句子不会太令人困惑例如,如果消息是针对应用程序的编辑窗口(而不是针对其主窗口),则 DispatchMessage 将为编辑窗口所属的特定类选择 WndProc 成员函数。如果消息是针对主窗口的,那么它将选择主窗口所属的类的 WndProc 成员函数(对我来说,这个类将是 Notepad_plus_Window 类)。但这只是一个想法。我没有找到太多证据来支持它,所以如果有人能证实这一点,我会很高兴。
最佳答案
是的,你是对的,它使用 MSG.hwnd 将消息发送到正确的窗口。需要注意的一件事是,它将使用与窗口关联的 WndProc,而不是窗口类。窗口是窗口类的实例。
This微软的“Under The Hood”文章相当详细地说明了这一点pseudo-code DispatchMessage() 也可能值得一看)
关于window - DispatchMessage 如何决定使用哪个 WndProc?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6796983/