На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное 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
  
> Проблема с размещением страниц на 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.\

    В чём причина этого? Как исправить ошибку?

    Код:

    ExpandedWrap disabled
      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;
      }
      Я перенёс код вставки подстраниц pPage3 и pPage4 на страницу pOrbitDefinition внутри функции COrbitDefinition::OnInitDialog :

      ExpandedWrap disabled
        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;
        }


      И на строке
      ExpandedWrap disabled
        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


      Что это означает? Как исправить эту ошибку?
        Проблема решена.

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


        Рейтинг@Mail.ru
        [ Script execution time: 0,0280 ]   [ 17 queries used ]   [ Generated: 28.03.24, 17:33 GMT ]