Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.141.100.120] |
|
Сообщ.
#1
,
|
|
|
У меня в старой программе (класс 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. |
Сообщ.
#2
,
|
|
|
Ты забыл файл ресурсов(*.rc) перенести в новый проект. Поищи в старой программе по исходникам - IDD_DIALOG1, IDD_DIALOG2,...,IDD_DIALOGN, по идее они должны хранится в ресурсах.
|
Сообщ.
#3
,
|
|
|
Такой вот вопрос.
Есть диалоговое приложение Visual C++ (среда разработки Visual Studio 2012), в котором существует главный класс диалога CMainDialog. В этом диалоге находится кнопка IDC_BUTTON1, которой соответствует переменная CButton1 в классе CMainDialog. При нажатии на эту кнопку вызывается диалог IDD_DIALOG1, которому соответствует класс CDialog1 , то есть: void CMainDialog::OnBn1ButtonClicked { CDialog1 dialog1(this); dialog1.DoModal(); } Диалог IDD_DIALOG1 нормально, без всяких проблем появляется на экране. Но вот я решил создать ещё один диалог--IDD_DIALOG2, которому соответствует класс CDialog2, который должен вызываться по нажатию кнопки IDC_BUTTON2, которой соответствует переменная в классе CDialog1: void CDialog1::OnBn2ButtonClicked { CDialog2 dialog2(this); dialog2.DOModal(); } И в отладчике вместо появления диалога IDD_DIALOG2 попадаем сперва в файл dbgrptt.c на функцию _CrtDebugBreak: _CRTIMP void __cdecl _CrtDbgBreak( void ) { __debugbreak; } а после, при нажатии на кнопку "Продолжить" в выскочившем окне отладчика--на файл dlgcore.cpp, на функцию CDialog::PreModal : 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 ? |
Сообщ.
#4
,
|
|
|
Цитата erslgoeirjh @ В чём причина этого? Как сделать так, чтобы из диалога CDialog1 вызывался диалог CDialog2--то есть чтобы нормально появлялось диалоговое окно класса CDialog2 ? СЛишком мало данных для однозначного ответа на этот вопрос. Причин может быть несколько, начиная от того, что ты не тот IDD задал, такого не существует, и заканчивая тем, что у тебя флаги неверно настроены. Выложи тестовый пример. Или хоть напиши сообщение какое вылетает? dialog2.DOModal(); dialog2.DoModal(); надо писать. Попробуй так вызвать: void CDialog1::OnBn2ButtonClicked { CDialog2 dialog2; dialog2.DOModal(); } |