DispatchMessage如何决定使用哪个WndProc?

时间:2011-07-22 22:58:58

标签: window wndproc procedures

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

程序员是否必须做些什么才能确保DispatchMessage调用正确的WndProc或者DispatchMessage的编码方式能够自行确定正确的WndProc?


编辑:

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

1 个答案:

答案 0 :(得分:2)

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

微软“Under The Hood”中的文章({3}}用相当详细的This DispatchMessage()来说明这一点,可能值得一看。

相关问题