На главную
ПРАВИЛА FAQ Помощь Участники Календарь Избранное DigiMania RSS
msm.ru
! Правила раздела Visual C++ / MFC / WTL (далее Раздела)
1) На Раздел распространяются все Правила Форума.
2) Перед тем, как создать новый топик, убедитесь, что Вы читали Правила создания тем в Разделе.
3) Вопросы, не связанные с программированием (настройки MS Visual Studio, книги, библиотеки и т.д.),
обсуждаются в разделе C/C++: Прочее
4) Вопросы разработки .NET (Windows Form, C++/CLI и т.п.) приложений на Visual C++/C# обсуждаются в разделе .NET.
5) Нарушение Правил может повлечь наказание со стороны модераторов.

Полезные ссылки:
user posted image FAQ Раздела user posted image Обновления для FAQ Раздела user posted image Поиск по Разделу user posted image MSDN Library Online
Модераторы: ElcnU
  
> Не открываются диалоги в новой программе
У меня в старой программе (класс COldProgramDlg) были диалоги IDD_DIALOG1, IDD_DIALOG2,...,IDD_DIALOGN, которым соответствовали классы CDialog1, CDialog2,...,CDialogN.

Я создал новую программу, которой соответствует класс CNewProgramDlg. В неё я перетащил эти диалоги IDD_DIALOG1, IDD_DIALOG2,...,IDD_DIALOGN и соответствующие им классы CDialog1, CDialog2,...,CDialogN.
И эти диалоги у меня при вызове их функций DoModal из класса CNewProgramDlg не открываются--программа бьётся при их открытии. При этом в отладчике либо не выскакивает никаких сообщений вообще, либо выскакивает сообщение:

Цитата
Debug Assertion Failed!
Program: C:\Windows\system32\mfc100d.dll
File: f:\dd\vctools\vc7libs\ship\atlmfc\src\mfc\dlgdata.cpp



В чём причина этого? Как сделать так, чтобы эти диалоги открывались в новой программе?

Добавлено
P.S. Среда разработки--Visual Studio 2012.
Ты забыл файл ресурсов(*.rc) перенести в новый проект. Поищи в старой программе по исходникам - IDD_DIALOG1, IDD_DIALOG2,...,IDD_DIALOGN, по идее они должны хранится в ресурсах.
Такой вот вопрос.
Есть диалоговое приложение Visual C++ (среда разработки Visual Studio 2012), в котором существует главный класс диалога CMainDialog. В этом диалоге находится кнопка IDC_BUTTON1, которой соответствует переменная CButton1 в классе CMainDialog. При нажатии на эту кнопку вызывается диалог IDD_DIALOG1, которому соответствует класс CDialog1 , то есть:

ExpandedWrap disabled
    void  CMainDialog::OnBn1ButtonClicked
    {
        CDialog1  dialog1(this);
        dialog1.DoModal();
    }


Диалог IDD_DIALOG1 нормально, без всяких проблем появляется на экране.
Но вот я решил создать ещё один диалог--IDD_DIALOG2, которому соответствует класс CDialog2, который должен вызываться по нажатию кнопки IDC_BUTTON2, которой соответствует переменная в классе CDialog1:

ExpandedWrap disabled
    void  CDialog1::OnBn2ButtonClicked
    {
        CDialog2  dialog2(this);
        dialog2.DOModal();
    }


И в отладчике вместо появления диалога IDD_DIALOG2 попадаем сперва в файл dbgrptt.c на функцию _CrtDebugBreak:

ExpandedWrap disabled
    _CRTIMP void __cdecl _CrtDbgBreak(
                                      void
                                      )
    {
        __debugbreak;
    }



а после, при нажатии на кнопку "Продолжить" в выскочившем окне отладчика--на файл dlgcore.cpp, на функцию CDialog::PreModal :

ExpandedWrap disabled
    HWND  CDIalog:;PreModal()
    {
        ASSERT(m_hWnd==NULL);
        CWinApp  pApp = AfxApp();
        if (pApp!=NULL)
            pApp->EnableModeless(FALSE);
        HWND  nWnd = CWnd:;GetSafeOwner_(m_pParent->GetSafeHwnd(),&m_hWndTop);
        AfxHookWindowCreate(this);
        return hWnd;
    }


После этого, при нажатии на кнопку "Продолжить", попадаем ещё на какой-то файл и так далее.

В чём причина этого? Как сделать так, чтобы из диалога CDialog1 вызывался диалог CDialog2--то есть чтобы нормально появлялось диалоговое окно класса CDialog2 ?
Цитата erslgoeirjh @
В чём причина этого? Как сделать так, чтобы из диалога CDialog1 вызывался диалог CDialog2--то есть чтобы нормально появлялось диалоговое окно класса CDialog2 ?

СЛишком мало данных для однозначного ответа на этот вопрос. Причин может быть несколько, начиная от того, что ты не тот IDD задал, такого не существует, и заканчивая тем, что у тебя флаги неверно настроены.
Выложи тестовый пример. Или хоть напиши сообщение какое вылетает?
ExpandedWrap disabled
    dialog2.DOModal();

dialog2.DoModal(); надо писать.
Попробуй так вызвать:
ExpandedWrap disabled
    void  CDialog1::OnBn2ButtonClicked
    {
        CDialog2  dialog2;
        dialog2.DOModal();
    }
1 пользователей читают эту тему (1 гостей и 0 скрытых пользователей)
0 пользователей:


Рейтинг@Mail.ru
[ Script Execution time: 0,1122 ]   [ 20 queries used ]   [ Generated: 17.07.18, 00:25 GMT ]