4

我正在浏览一个开源项目的一些代码,这是我第一次处理 Win32 应用程序(主要是做控制台的东西)。我看到代码中的几个函数是 Windows 过程,因为它们返回 LRESULT CALLBACK。

程序员是否需要做一些事情来确保 DispatchMessage 调用正确的 WndProc 或者 DispatchMessage 的编码方式使其可以自行确定正确的 WndProc?


编辑:

我猜测 DispatchMessage(const MSG*) 在应用程序中的不同 WndProc 之间进行选择的方式是基于传递给它的 MSG 对象的窗口句柄成员 (HWND)。[希望前面的句子不会太混乱。] 如果例如,消息是针对应用程序的编辑窗口的(而不是针对其主窗口的),那么 DispatchMessage 将为编辑窗口作为其对象的特定类选择 WndProc 成员函数。如果消息是针对主窗口的,那么它将为主窗口作为对象的类选择 WndProc 成员函数(对我来说,这个类将是 Notepad_plus_Window 类)。不过,这只是一个想法。我没有找到太多的支持,所以如果有人能证实这一点,我会很高兴。

4

1 回答 1

2

是的,你是对的,它使用 MSG.hwnd 将消息发送到正确的窗口。需要注意的一点是,它将使用与窗口关联的 WndProc,而不是窗口类。窗口是窗口类的一个实例。

Microsoft 的“Under The Hood”的这篇文章用相当详细的 DispatchMessage()伪代码说明了这一点,可能也值得一看)

于 2011-09-12T10:23:15.133 回答