2015-02-22 2 views
-2

У меня есть прогмль с приложением MFC и DialogBox. Я уверен, что я сделал все хорошо с этим учебником: https://msdn.microsoft.com/en-us/library/6wb9s9ah.aspx , но все же он не работает ... 1. Я создал новый проект с помощью простых команд меню. 2. Я создал новый пункт меню (+ ID) и новый ресурс DialogBox (+ ID). 3. Затем я добавил новый класс с именем CParameters с помощью мастера классов. Для BaseClass я набрал CDialog. 4. Я создал новый обработчик на пункт меню и добавлен кодПункт меню MFC не открывается Диалоговое окно

CParameters dlg; 
dlg.DoModal(); 

Я думаю, что это он, и это должно работать ... но это не ... Чего не хватает ?? Вот мой проект, вы можете получить доступ к нему свободно: https://www.dropbox.com/sh/e6ajoxqk76hkuvn/AACRMY8bgcuyXguFwP240QB9a?dl=0

Кроме того, я хочу, чтобы вставить TextEditors и изменить параметры в моей программе в диалоговом окне.

+1

Пожалуйста, включите все соответствующие коды непосредственно в вопрос, но убедитесь, что это [MCVE] (http://stackoverflow.com/help/mcve). Большинство читателей не любят получать доступ к коду вне сайта. Кроме того, пожалуйста, не запрашивайте здесь учебники, поскольку это [вне темы] (http://stackoverflow.com/help/dont-ask) для переполнения стека. Также прочитайте [Как спросить] (http://stackoverflow.com/questions/how-to-ask). [Помощь по форматированию] (http://stackoverflow.com/help/formatting) также хорошо читается. – honk

+0

Извините, но это слишком много кода в приложении MFC. Трудно представить его. О вопросе: возможно ли, что источником обработчика может быть позиция обработчика (объявленная в классе)? – Vito

+0

Установите точку останова на вызов DoModal и запустите в отладчике. Достигает ли достижение этого момента? Это скажет вам, есть ли проблема с меню или диалогом. –

ответ

0

Если вы делаете это, добавив новый пункт меню из простого приложения SDI, а затем пытается добавив, что часть кода в методе

CMainFrame::OnEdit 

OnEdit используется здесь получается из обработчика событий для нового меню item и тип сообщения COMMAND.

1

Сканирование исходного кода показывает, что вы пытаетесь обработать событие элемента меню внутри класса, который будет отображать диалоговое окно.

void CParameters::OnParam() 
{ 
    // TODO: Add your command handler code here 
    CParameters dlg; 
    dlg.DoModal(); 
} 

Я больше не вижу, что вы фактически создаете экземпляр класса диалога (возможно, я пропустил его). То, что вы пытаетесь, неверно. Вы не можете обработать событие элемента меню в том же классе, который отображает диалоговое окно, потому что этот класс (CParameters) не был создан, поэтому он не может ответить на событие меню. Как правило, событие меню будет обрабатываться в классе мэйнфреймов.