gpt4 book ai didi

c++ - 在 MFC 中捕获消息 - 有什么区别?

转载 作者:可可西里 更新时间:2023-11-01 13:28:06 25 4
gpt4 key购买 nike

我只是想知道 MFC 中针对函数 OnSize(..) 的以下两个消息陷阱之间有什么区别(如果有的话)。

1 - 通过消息映射:

BEGIN_MESSAGE_MAP(CClassWnd, CBaseClassWnd)
...
ON_WM_SIZE()
..
END_MESSAGE_MAP()

2 - 通过 afx_message:

afx_msg type OnSize(...);

它们似乎可以互换使用,应该使用哪个还是取决于其他因素?

最佳答案

这两部分都是将消息处理程序添加到类中所必需的。消息映射应该在您的类中声明,连同任何消息处理函数的声明(例如,OnSize)。

class CClassWnd : public CBaseClassWnd {
...
afx_msg void OnSize(UINT nType, int cx, int cy);
DECLARE_MESSAGE_MAP
};

afx_msg 只是一个空的占位符宏 - 它实际上不做任何事情,但总是按照约定包含在内。

然后在类的 .cpp 文件中定义消息映射:

BEGIN_MESSAGE_MAP(CClassWnd, CBaseClassWnd)
ON_WM_SIZE()
END_MESSAGE_MAP()

这些宏为类生成一个查找表,允许将窗口接收到的消息分派(dispatch)到相应的处理函数。 ON_WM_SIZE 宏允许将 WM_SIZE 消息中的 wParamlParam 消息参数解码为更有意义的值消息处理函数(在本例中为 nTypecxcy)。 MFC 为大多数窗口消息(WM_LBUTTONDOWNWM_DESTROY 等)提供了宏。

您可以找到有关消息映射如何在 MFC 中工作的更多信息 here在 MSDN 上。

关于c++ - 在 MFC 中捕获消息 - 有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/200550/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com