【问题标题】:How to pass value to MFC message map function on_command如何将值传递给 MFC 消息映射函数 on_command
【发布时间】:2012-08-26 11:07:27
【问题描述】:

我有一个函数可以根据接收到的 std::string 值执行特定操作。

例如:

void performTaskOnStringValue(std::string);

现在我有一组功能区按钮 (CMFCRibbonButton),它们需要通过在按钮单击时将它们各自的文本作为值传递来调用此函数。

我已将这些按钮的 ID 映射到带有按钮 ID 的消息映射宏 on_command。所有按钮共享一个共同的 id - 例如 -

ID_RIBBON_BUTTON_ID

消息映射如下

ON_COMMAND(ID_RIBBON_BUTTON_ID, &MyClass::performTaskOnStringValue);

如何将按钮文本作为参数传递给 ButtonClick 上的此函数?

【问题讨论】:

    标签: c++ mfc ribbon message-map


    【解决方案1】:

    当按钮都具有相同的 ID 时,您不能让按钮执行不同的操作。命令处理程序没有得到按下哪个按钮的指示。

    如果您可以为按钮分配连续的 ID,则可以改用 ON_COMMAND_RANGE。这会将按钮的 ID 传递给您,您可以将其传递给 GetDlgItemText 以从按钮中获取文本。

    【讨论】:

    • 由于添加按钮是即时进行的,因此我事先不知道需要创建多少个按钮。我需要知道的原因是将 id 与 ON_COMMAND_RANGE 关联并将它们插入到资源文件中,以便它们被识别为有效的 ID。
    • @EternalLearner,如果您正在动态创建按钮,则不需要将它们放在资源文件中。只需定义允许使用的最小值和最大值并跟踪当前的最小值和最大值,每次创建新按钮时递增。
    • 除 GetDlgItemText 外,一切正常,因为我添加的元素是 CMFCRibbonButton 类型。我使用了 FindByID(uint ID) 方法。谢谢。
    【解决方案2】:

    首先,在连续范围内为每个按钮分配不同的 id。

    其次,使用ON_COMMAND_RANGE 将所有按钮映射到一个接收 id 作为参数的处理程序。

    第三,在该处理程序中使用 id 来获取按钮文本。然后您可以调用您的 performTaskOnStringValue 方法。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-06-19
      • 1970-01-01
      • 2018-07-05
      • 1970-01-01
      • 2018-04-30
      • 2021-12-03
      • 1970-01-01
      • 2020-01-05
      相关资源
      最近更新 更多