Как мне обрабатывать сообщения панели инструментов в диалоговом окне - PullRequest
0 голосов
/ 04 мая 2018

Я пишу приложение MFC MDI, которое я запустил с помощью мастера, в Visual Studio 2017. В этом приложении у меня есть диалоговые окна с панелями инструментов. Но когда отображаются диалоговые окна, кнопки панели инструментов не активируются, хотя классы диалогов содержат обработчики для идентификаторов кнопок.

Например, я создал 1 тестовый класс для диалога с именем CDlg с панелью инструментов с кнопкой с идентификатором 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_DIALOG_1, и в этом случае CDlg :: OnDialog1 вызывается при нажатии на элемент меню, но кнопка панели инструментов остается отключенной.

Итак, возможно ли иметь обработчик команды для идентификатора кнопки ID_DIALOG_1 внутри класса CDlg для панели инструментов?

1 Ответ

0 голосов
/ 06 мая 2018

В моем коде была ошибка. Я звонил CDialogEx::OnInitDialog() после создания и загрузки панели инструментов, но на самом деле CDialogEx::OnInitDialog() должен вызываться первым согласно link .

...