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

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

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

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

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

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

Я работаю в среде MS Visual Studio 2012.

Я на свой диалог повесил табконтрол IDC_TAB1 (тип CTabCtrl, переменная m_IDC_TAB1).
На этот табконтрол я поместил две закладки--"Исходные НУ" и "Расчёт". Каждой из этих закладок соответствует по одной странице (диалогу). Обе эти страницы пока пустые (без компонентов), так как я хотел бы, чтобы первоначально просто нормально бы работал этот табконтрол.

Первоначально табконтрол находится на странице "Исходные НУ". При нажатии на страницу "Расчёт" в отладчике появляется два раза сообщение--в функции OnTcnSelchangingTab1 и в функции OnTcnSelchangeTab1:

Цитата:
Debug Assertion Failed!
Program: C:\WINDOWS\SYSTEM32\mfc110d.dll

File: f:\dd\vctools\vc7libs\ship\atlmfc\s rc\mfc\winocc.cpp

Line: 329

После этого тем не менее происходит переход и отображение диалога "Расчёт".

Если же на диалоге "Расчёт" нажать на страницу "Исходные НУ", то также в отладчике будет два раза появляться точно такое же сообщение об ошибке--в функции OnTcnSelchangingTab1 и в функции OnTcnSelchangeTab1, после чего происходит переход и отображение диалога "Исходные НУ".

В чём причина этого? Как сделать так, чтобы этого сообщения не появлялось?

Код:

Код:
BOOL CSO_LifeTimeDlg::OnInitDialog()
{
    CNUDialog *pNUPage;
    CCalcDialog *pCalcPage;

    CDialogEx::OnInitDialog();
    // Добавление пункта "О программе..." в системное меню.

    // IDM_ABOUTBOX должен быть в пределах системной команды.
    ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
    ASSERT(IDM_ABOUTBOX < 0xF000);

    CMenu* pSysMenu = GetSystemMenu(FALSE);
    if (pSysMenu != NULL)
    {
        BOOL bNameValid;
        CString strAboutMenu;
        bNameValid = strAboutMenu.LoadString(IDS_ABOUTBOX);
        ASSERT(bNameValid);
        if (!strAboutMenu.IsEmpty())
        {
            pSysMenu->AppendMenu(MF_SEPARATOR);
            pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
        }
    }

    // Задает значок для этого диалогового окна. Среда делает это автоматически,
    //  если главное окно приложения не является диалоговым
    SetIcon(m_hIcon, TRUE);            // Крупный значок
    SetIcon(m_hIcon, FALSE);        // Мелкий значок

    // TODO: добавьте дополнительную инициализацию
    TCITEM  TabItem;
    TabItem.mask = TCIF_TEXT;
    TabItem.pszText = "Исходные НУ";
    m_IDC_TAB1.InsertItem(0,&TabItem);
    TabItem.pszText = "Расчёт";
    m_IDC_TAB1.InsertItem(1,&TabItem);
    pNUPage = new CNUDialog(this);
    pCalcPage = new CCalcDialog(this);
    TabItem.mask = TCIF_PARAM;
    TabItem.lParam = (LPARAM)pNUPage;
    m_IDC_TAB1.SetItem(0,&TabItem);
    TabItem.mask = TCIF_PARAM;
    TabItem.lParam = (LPARAM)pCalcPage;
    m_IDC_TAB1.SetItem(1,&TabItem); 
    return TRUE;  // возврат значения TRUE, если фокус не передан элементу управления
}


void CSO_LifeTimeDlg::OnTcnSelchangeTab1(NMHDR *pNMHDR, LRESULT *pResult)
{
    // TODO: добавьте свой код обработчика уведомлений
    int  nTab = m_IDC_TAB1.GetCurSel();
    TC_ITEM  tci;
    tci.mask = TCIF_PARAM;
    m_IDC_TAB1.GetItem(nTab,&tci);
    ASSERT(tci.lParam);
    CWnd *pWnd = (CWnd*)tci.lParam;
    //
    pWnd->ShowWindow(SW_SHOW); // здесь выскакивает сообщение об ошибке
    *pResult = 0;
}


void CSO_LifeTimeDlg::OnTcnSelchangingTab1(NMHDR *pNMHDR, LRESULT *pResult)
{
    // TODO: добавьте свой код обработчика уведомлений
    int  nTab = m_IDC_TAB1.GetCurSel();
    TC_ITEM  tci;
    tci.mask = TCIF_PARAM;
    m_IDC_TAB1.GetItem(nTab,&tci);
    ASSERT(tci.lParam);
    CWnd *pWnd = (CWnd*)tci.lParam;
    //
    pWnd->ShowWindow(SW_HIDE); // здесь выскакивает сообщение об ошибке
    *pResult = 0;
}
erslgoeirjh вне форума Ответить с цитированием
Старый 11.03.2019, 15:23   #2
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,493
По умолчанию

Цитата:
Сообщение от erslgoeirjh Посмотреть сообщение
pCalcPage = new CCalcDialog(this);
Думаете этого хватит для создания диалога?
waleri вне форума Ответить с цитированием
Старый 11.03.2019, 17:10   #3
erslgoeirjh
Форумчанин
 
Регистрация: 19.05.2009
Сообщений: 153
По умолчанию

А что ещё нужно сделать?
erslgoeirjh вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проблема с размещением страниц на CTabCtrl внутри другого CTabCtrl erslgoeirjh Visual C++ 2 20.06.2018 10:09
Трудности с mvc. [Grizzly] PHP 0 26.04.2017 19:45
Трудности с XML Ky3Heu, Общие вопросы Delphi 4 08.06.2011 12:41
BDE. Paradox. Трудности. Genco БД в Delphi 3 24.11.2010 23:03