如何处理对话框中的工具栏消息

Posted

技术标签:

【中文标题】如何处理对话框中的工具栏消息【英文标题】:How do I handle toolbar messages in a dialog box 【发布时间】:2018-05-04 17:43:50 【问题描述】:

我正在使用 Visual Studio 2017 从向导开始编写 MFC MDI 应用程序。在此应用程序中,我有带有工具栏的对话框。但是当显示对话框时,工具栏按钮不会启用,即使对话框类包含按钮 ID 的处理程序。

例如,我为一个名为 CDlg 的对话框创建了 1 个测试类,其中工具栏带有一个 ID 为 ID_DIALOG_1 的按钮。我在 CDlg 中有相应的消息映射条目和相应的处理函数:

BEGIN_MESSAGE_MAP(CDlg, CDialogEx)
    ON_COMMAND(ID_DIALOG_1, &CDlg::OnDialog1)
END_MESSAGE_MAP()

void CDlg::ODialog1()

    // TODO: Add your command handler code here

但是工具栏按钮被禁用了。

我尝试将处理程序放在文档类和 CDlg 中,在这种情况下,启用按钮并调用 CDlg::OnDialog1 处理程序。我还尝试在 ID_DIALOG_1 的 CDlg 类上放置一个菜单,在这种情况下,当单击菜单项但工具栏按钮仍处于禁用状态时,会调用 CDlg::OnDialog1。

那么,是否可以在工具栏的 CDlg 类中包含按钮 ID ID_DIALOG_1 的命令处理程序?

【问题讨论】:

How to create a Minimal, Complete, and Verifiable example 我已经知道我的问题的答案是肯定的!我的代码中有一个错误。我在创建工具栏后调用了 CDialogEx::OnInitDialog(),但是根据link 应该首先调用 CDialogEx::OnInitDialog() 【参考方案1】:

我的代码中有一个错误。我在创建和加载工具栏后调用CDialogEx::OnInitDialog(),但实际上应该根据link调用CDialogEx::OnInitDialog()

【讨论】:

以上是关于如何处理对话框中的工具栏消息的主要内容,如果未能解决你的问题,请参考以下文章

发现PDF Transformer+转换的图像字体小了如何处理

如何处理 Selenium 中的打印对话框?

jQuery工具提示自定义不起作用,如何处理?

如何处理 iOS 远程消息中的附加数据 GCM

对 Haskell 的布局工具如何处理此代码感到困惑

电商场景下,如何处理消费过程中的重复消息?