Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.144.160.219] |
|
Сообщ.
#1
,
|
|
|
На диалоговом окне есть компонент TAB_CTRL1 типа CTabCtrl, на котором расположены несколько страниц--pPage1, pPage2, pOrbitDefinition, pPage5, pPage6 (потомки класса CDialog). И на одной из этих страниц (pOrbitDefinition) расположен другой компонент TAB_CTRL типа CTabCtrl, на которой помещены две страницы pPage3, pPage4 (также потомки класса CDialog).
И возникла проблема с размещением этих двух страниц pPage3 и pPage4 на компоненте TAB_CTRL, расположенном на странице pOrbitDefinition--отладчик бьётся на строке, в которой вызывается функция Create для pPage3.\ В чём причина этого? Как исправить ошибку? Код: BOOL CFlightToMoonDlg::OnInitDialog() { CPage1 *pPage1; CPage2 *pPage2; CPage3* pPage3; CPage4* pPage4; CPage5 *pPage5; CPage6 *pPage6; COrbitDefinition *pOrbitDefinition; CDialog::OnInitDialog(); // TCITEM TabItem; TabItem.mask = TCIF_TEXT; TabItem.pszText = L"Исходные НУ"; m_IDC_TAB1.InsertItem(0,&TabItem); TabItem.pszText = L"Модель движения"; m_IDC_TAB1.InsertItem(1,&TabItem); TabItem.pszText = L"Определение орбиты"; m_IDC_TAB1.InsertItem(2,&TabItem); TabItem.pszText = L"Расчёт эфемерид"; m_IDC_TAB1.InsertItem(3,&TabItem); TabItem.pszText = L"Прогноз подлёта"; m_IDC_TAB1.InsertItem(4,&TabItem); CSize csize; csize.SetSize(100,28); m_IDC_TAB1.SetItemSize(csize); LOGFONT lf; CFont *pfont; memset(&lf,0,sizeof(lf)); lf.lfHeight = 16; lf.lfWidth = 8; lf.lfWeight = FW_NORMAL; //lf.lfWeight = FW_BOLD; lf.lfCharSet = ANSI_CHARSET; lf.lfOutPrecision = OUT_DEFAULT_PRECIS; lf.lfClipPrecision = CLIP_DEFAULT_PRECIS; lf.lfQuality = PROOF_QUALITY; lf.lfPitchAndFamily = VARIABLE_PITCH | FF_ROMAN; wcscpy(lf.lfFaceName,L"MS Sans Serif"); pfont = new CFont(); pfont->CreateFontIndirectW(&lf); m_IDC_TAB1.SetFont(pfont); // pPage1 = new CPage1(this); pPage2 = new CPage2(this); pPage5 = new CPage5(this); pPage6 = new CPage6(this); pOrbitDefinition = new COrbitDefinition(this); // TabItem.mask = TCIF_PARAM; TabItem.lParam = (LPARAM)pPage2; m_IDC_TAB1.SetItem(0,&TabItem); VERIFY(pPage2->Create(CPage2::IDD,&m_IDC_TAB1)); pPage2->SetWindowPos(NULL,10,30,0,0,SWP_NOSIZE|SWP_NOZORDER); pPage2->ShowWindow(SW_SHOW); // TabItem.mask = TCIF_PARAM; TabItem.lParam = (LPARAM)pPage1; m_IDC_TAB1.SetItem(1,&TabItem); VERIFY(pPage1->Create(CPage1::IDD,&m_IDC_TAB1)); pPage1->SetWindowPos(NULL,10,30,0,0,SWP_NOSIZE|SWP_NOZORDER); pPage1->ShowWindow(SW_HIDE); // TabItem.mask = TCIF_PARAM; TabItem.lParam = (LPARAM)pOrbitDefinition; m_IDC_TAB1.SetItem(2,&TabItem); VERIFY(pOrbitDefinition->Create(COrbitDefinition::IDD,&m_IDC_TAB1)); pOrbitDefinition->SetWindowPos(NULL,10,30,0,0,SWP_NOSIZE|SWP_NOZORDER); pPage3 = new CPage3(this); pPage4 = new CPage4(this); pOrbitDefinition->pPage3 = pPage3; pOrbitDefinition->pPage4 = pPage4; TCITEM TabItem2; TabItem2.mask = TCIF_TEXT; TabItem2.pszText = L"Измерения"; pOrbitDefinition->m_IDC_TAB1.InsertItem(0,&TabItem2); TabItem2.pszText = L"Краевая задача"; pOrbitDefinition->m_IDC_TAB1.InsertItem(1,&TabItem2); CSize csize2; csize2.SetSize(100,28); pOrbitDefinition->m_IDC_TAB1.SetItemSize(csize2); LOGFONT lf2; CFont *pfont2; memset(&lf2,0,sizeof(lf2)); lf2.lfHeight = 16; lf2.lfWidth = 8; lf2.lfWeight = FW_NORMAL; lf2.lfCharSet = ANSI_CHARSET; lf2.lfOutPrecision = OUT_DEFAULT_PRECIS; lf2.lfClipPrecision = CLIP_DEFAULT_PRECIS; lf2.lfQuality = PROOF_QUALITY; lf2.lfPitchAndFamily = VARIABLE_PITCH | FF_ROMAN; wcscpy(lf2.lfFaceName,L"MS Sans Serif"); pfont2 = new CFont(); pfont2->CreateFontIndirectW(&lf2); pOrbitDefinition->m_IDC_TAB1.SetFont(pfont2); // pOrbitDefinition->ShowWindow(SW_HIDE); // TabItem.mask = TCIF_PARAM; TabItem.lParam = (LPARAM)pPage5; m_IDC_TAB1.SetItem(3,&TabItem); VERIFY(pPage5->Create(CPage5::IDD,&m_IDC_TAB1)); pPage5->SetWindowPos(NULL,10,30,0,0,SWP_NOSIZE|SWP_NOZORDER); pPage5->ShowWindow(SW_HIDE); // TabItem.mask = TCIF_PARAM; TabItem.lParam = (LPARAM)pPage6; m_IDC_TAB1.SetItem(4,&TabItem); VERIFY(pPage6->Create(CPage6::IDD,&m_IDC_TAB1)); pPage6->SetWindowPos(NULL,10,30,0,0,SWP_NOSIZE|SWP_NOZORDER); pPage6->ShowWindow(SW_HIDE); // TabItem2.mask = TCIF_PARAM; TabItem2.lParam = (LPARAM)pPage3; m_IDC_TAB1.SetItem(0,&TabItem2); VERIFY(pOrbitDefinition->pPage3->Create(CPage3::IDD,&(pOrbitDefinition->m_IDC_TAB1))); // здесь бьётся программа pOrbitDefinition->pPage3->SetWindowPos(NULL,10,30,0,0,SWP_NOSIZE|SWP_NOZORDER); pOrbitDefinition->pPage3->ShowWindow(SW_SHOW); // TabItem2.mask = TCIF_PARAM; TabItem2.lParam = (LPARAM)pPage4; m_IDC_TAB1.SetItem(1,&TabItem2); VERIFY(pOrbitDefinition->pPage4->Create(CPage4::IDD,&(pOrbitDefinition->m_IDC_TAB1))); pOrbitDefinition->pPage4->SetWindowPos(NULL,10,30,0,0,SWP_NOSIZE|SWP_NOZORDER); pOrbitDefinition->pPage4->ShowWindow(SW_HIDE); return TRUE; } |
Сообщ.
#2
,
|
|
|
Я перенёс код вставки подстраниц pPage3 и pPage4 на страницу pOrbitDefinition внутри функции COrbitDefinition::OnInitDialog :
BOOL COrbitDefinition::OnInitDialog() { CDialog::OnInitDialog(); TCITEM TabItem2; TabItem2.mask = TCIF_TEXT; TabItem2.pszText = L"Измерения"; m_IDC_TAB1.InsertItem(0,&TabItem2); TabItem2.pszText = L"Краевая задача"; m_IDC_TAB1.InsertItem(1,&TabItem2); pPage3 = new CPage3(&m_IDC_TAB1); pPage4 = new CPage4(&m_IDC_TAB1); CSize csize2; csize2.SetSize(100,28); m_IDC_TAB1.SetItemSize(csize2); LOGFONT lf2; CFont *pfont2; memset(&lf2,0,sizeof(lf2)); lf2.lfHeight = 16; lf2.lfWidth = 8; lf2.lfWeight = FW_NORMAL; lf2.lfCharSet = ANSI_CHARSET; lf2.lfOutPrecision = OUT_DEFAULT_PRECIS; lf2.lfClipPrecision = CLIP_DEFAULT_PRECIS; lf2.lfQuality = PROOF_QUALITY; lf2.lfPitchAndFamily = VARIABLE_PITCH | FF_ROMAN; wcscpy(lf2.lfFaceName,L"MS Sans Serif"); pfont2 = new CFont(); pfont2->CreateFontIndirectW(&lf2); m_IDC_TAB1.SetFont(pfont2); // TabItem2.mask = TCIF_PARAM; TabItem2.lParam = (LPARAM)pPage3; m_IDC_TAB1.SetItem(0,&TabItem2); ASSERT(pPage3->Create(CPage3::IDD,&m_IDC_TAB1)); // здесь бьётся программа pPage3->SetWindowPos(NULL,10,30,0,0,SWP_NOSIZE|SWP_NOZORDER); pPage3->ShowWindow(SW_SHOW); // TabItem2.mask = TCIF_PARAM; TabItem2.lParam = (LPARAM)pPage4; m_IDC_TAB1.SetItem(1,&TabItem2); ASSERT(pPage4->Create(CPage4::IDD,&m_IDC_TAB1)); pPage4->SetWindowPos(NULL,10,30,0,0,SWP_NOSIZE|SWP_NOZORDER); pPage4->ShowWindow(SW_HIDE); m_IDC_TAB1.SetCurSel(0); return TRUE; } И на строке ASSERT(pPage3->Create(CPage3::IDD,&m_IDC_TAB1)); программа бьётся--выскакивает сообщение Цитата Debug Assertion Failed! Program: C:\Windows\system32\mfc110ud.dll File: f:\dd\vctools\vc7libs\ship\atlmfc\src\mfc\dlgdata.cpp Line: 40 Что это означает? Как исправить эту ошибку? |
Сообщ.
#3
,
|
|
|
Проблема решена.
В классе CPage3 в функции DoDataExchange я убрал вызовы функций DDX_Control для тех компонент этого класса, которые я удалил ранее. И всё у меня нормально заработало. |