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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在对话框中处理工具栏消息相关的知识,希望对你有一定的参考价值。

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

例如,我为一个名为CDlg的对话框创建了一个测试类,其中包含一个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处理程序。我还尝试在CDlg类上放置ID ID_DIALOG_1的菜单,在这种情况下,单击菜单项但是工具栏按钮保持禁用状态时,将调用CDlg :: OnDialog1。

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

答案

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

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

我该如何做模态对话框片段(代码在我关闭之前不会执行)

工具栏视图引用从对话框片段返回后变为空

MFC SDI中 如何为动态创建的按钮添加消息处理函数

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

从底部工作表对话框片段中获取价值

如何定义对话框片段的重力?