На главную
ПРАВИЛА 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,0941 ]   [ 15 queries used ]   [ Generated: 20.10.18, 15:52 GMT ]