gpt4 book ai didi

c++ - MFC:混淆 ON_COMMAND 函数?

转载 作者:可可西里 更新时间:2023-11-01 11:38:19 26 4
gpt4 key购买 nike

好的,这就是这个函数

 ..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 应该包含 Message 的 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 无法编译。 nIDID_COLOR_RED 之间有一个下划线 (_)。这对编译器没有任何意义。您的意思是改为键入减号 (-) 吗?


但更一般地说,ON_COMMAND macro用于处理WM_COMMAND 消息。该宏有两个参数:

  • id,即命令ID
  • memberFxn,这是命令映射到的消息处理函数的名称

看起来您已经完成了所有设置。所有三个命令 ID(红色、绿色和蓝色)都由相同的 OnColor 函数处理。


那么让我们看看 WM_COMMAND message 的文档.它表示 wParamlParam 参数的含义取决于消息的来源。它们具有不同的含义,具体取决于用户是从菜单中选择了一项、键入了加速键还是控件正在向其父窗口发送通知消息。

我真的无法从你的问题中分辨出 ID_COLOR_RED(及其兄弟)中的哪一个对应。
但这并不重要。无论哪种方式,看起来代码都试图设置一个成员变量 (m_nCurrentColor),该变量根据 ID 跟踪用户当前选择的颜色发送最后一个通知的项目。如果我们假设这是一个减号,事情就会开始变得清晰起来:

代码所做的是获取发送消息的项目的 ID (nID),然后从中减去集合中的 first 值 (ID_COLOR_RED)。这意味着如果 nID = ID_COLOR_REDm_nCurrentColor 将为 0。

如果 ID_COLOR_REDID_COLOR_GREENID_COLOR_BLUE 的值连续(这是一个很大的 < strong>if,这是您不应该编写这样的代码的一个很好的理由),那么如果 nID = ID_COLOR_GREEN, m_nCurrentColor将为 1。同样,如果 nID = ID_COLOR_BLUE,则 m_nCurrentColor 将为 2。

关于c++ - MFC:混淆 ON_COMMAND 函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5832711/

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