Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Visual C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 15.06.2018, 15:38   #1
erslgoeirjh
Форумчанин
 
Регистрация: 19.05.2009
Сообщений: 153
По умолчанию Проблема с размещением страниц на CTabCtrl внутри другого CTabCtrl

На диалоговом окне есть компонент 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;
    TabItem.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;
}
erslgoeirjh вне форума Ответить с цитированием
Старый 18.06.2018, 11:28   #2
erslgoeirjh
Форумчанин
 
Регистрация: 19.05.2009
Сообщений: 153
По умолчанию

Я перенёс код вставки подстраниц 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\s rc\mfc\dlgdata.cpp
Line: 40
Что это означает? Как исправить эту ошибку?
erslgoeirjh вне форума Ответить с цитированием
Старый 20.06.2018, 10:09   #3
erslgoeirjh
Форумчанин
 
Регистрация: 19.05.2009
Сообщений: 153
По умолчанию

Проблема решена.

В классе CPage3 в функции DoDataExchange я убрал вызовы функций DDX_Control для тех компонент этого класса, которые я удалил ранее. И всё у меня нормально заработало.
erslgoeirjh вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проблема с программным размещением компонента на странице erslgoeirjh Visual C++ 1 12.10.2016 10:21
Проблема с размещением victor5133 HTML и CSS 1 01.11.2012 18:44
Visual Basic проблема с размещением программы на пк Rudimo Помощь студентам 0 26.03.2012 04:24
вставка страниц из другого файла PDF Kavaler2i Общие вопросы Delphi 0 20.01.2010 18:58