window - DispatchMessage 如何决定使用哪个 WndProc?

标签 window wndproc procedures

我正在研究一个开源项目的一些代码,这是我第一次处理 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/

相关文章:

c++ - 使用 map 时 WinAPI WndProc 静默失败

c++ - WndProc 的类方法

NetLogo:在设置中选择一个程序?

MySql 过程不返回值

javascript - 在窗口调整大小时调整图像映射

window - 处理,保持窗口在顶部/覆盖

python - 使用 selenium 在 python 中处理多个选项卡时出现 IndexError

html - 各版本IE在新窗口打开链接

c# - 在模式进度对话框启动时调用 "Application.DoEvents"是否可以?

mysql - sql 从过程开始运行查询