如何处理对话框中的工具栏消息
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()
。
【讨论】:
以上是关于如何处理对话框中的工具栏消息的主要内容,如果未能解决你的问题,请参考以下文章