MFC: ON_COMMAND函数中的混淆
MFC: Confusion in an ON_COMMAND function?
好了,这就是这个函数
<>之前..ON_COMMAND (ID_COLOR_RED, OnColor)ON_COMMAND (ID_COLOR_GREEN, OnColor)ON_COMMAND (ID_COLOR_BLUE, OnColor)...void CMainWindow::OnColor (){UINT nID = (UINT) LOWORD (GetCurrentMessage ()->wParam);m_nCurrentColor = nID _ ID_COLOR_RED;}之前在这里,CurrentMessage的wParam的LOWORD应该包含消息的ID,这是可以的,但是m_nCurrentColor = nid_ ID_COLOR_RED;意味着什么?m_nCurrentColor可以分别为0、1或2表示红色、绿色或蓝色。
所以首先我们在第一个语句中将消息的ID转换为UINT,但是我们在第二个语句中用m_nCurrentColor = nid_ ID_COLOR_RED尝试做什么?
有人能解释一下吗?
我不知道那代码是做什么的。主要是因为m_nCurrentColor = nID _ ID_COLOR_RED
无法编译。在nID
和ID_COLOR_RED
之间有一个下划线(_
)。这对编译器来说没有任何意义。你的意思是输入一个减号(-
),而不是?
但更普遍的是,ON_COMMAND
宏用于处理WM_COMMAND
消息。宏接受两个参数:
-
id
,即命令ID -
memberFxn
,这是命令映射到的消息处理函数的名称
看起来你已经准备好了。所有三个命令id(红色、绿色和蓝色)都由同一个OnColor
函数处理。
因此,让我们看一下WM_COMMAND
消息的文档。它说wParam
和lParam
参数的含义取决于消息的来源。它们具有不同的含义,取决于用户是从菜单中选择项、键入加速键还是控件正在向其父窗口发送通知消息。
我真的不能从你的问题中分辨出那些ID_COLOR_RED
(和它的兄弟)对应于哪个。
但这并不重要。无论哪种方式,它看起来就像代码试图设置一个成员变量(m_nCurrentColor
),该成员变量根据发送最后一次通知的项目的ID跟踪用户当前选择的颜色。如果我们假设这是一个减去符号,事情就开始变得清晰了:
代码正在做的是获取发送消息的项目的ID (nID
),并从中减去集合中的第一个值(ID_COLOR_RED
)。这意味着如果nID
= ID_COLOR_RED
,那么m_nCurrentColor
将为0。
如果ID_COLOR_RED
, ID_COLOR_GREEN
和ID_COLOR_BLUE
的值是顺序(这是一个很大的 If ,这是你不应该这样写代码的一个很好的理由),那么如果nID
= ID_COLOR_GREEN
, m_nCurrentColor
将是1。同理,如果nID
= ID_COLOR_BLUE
,则m_nCurrentColor
= 2。
这个回答是我对这个问题的评论的延续。
对于您的示例,我将在链接函数内使用ON_COMMAND_EX
宏和switch(nID)
。如果某个选项的ID最终改变了,您就不必担心了。
- "error: no matching function for call to"构造函数错误
- 什么时候调用组成单元对象的析构函数
- 继承函数的重载解析
- 为什么随机数生成器不在void函数中随机化数字,而在main函数中随机化
- C++模板来检查友元函数的存在
- 递归函数计算序列中的平方和(并输出过程)
- netcat command in c++
- 对RValue对象调用的LValue ref限定成员函数
- C++17复制构造函数,在std::unordereded_map上进行深度复制
- 将数组作为参数传递给函数安全吗?作为第三方职能部门,可以探索他们想要的之外的其他元素
- 在C++STL中是否有Polyval(Matlab函数)等价物?
- 为什么使用 "this" 指针调用派生成员函数?
- 将对象数组的引用传递给函数
- 函数调用中参数的顺序重要吗
- 函数向量_指针有不同的原型,我可以构建一个吗
- 使用不带参数的函数访问结构元素
- 代码在main()中运行,但在函数中出现错误
- 内置函数可查看CPP中的成员变量
- 如何获取std::result_of函数的返回类型
- 如何在c++中为模板函数实例创建快捷方式