На главную
ПРАВИЛА FAQ Помощь Участники Календарь Избранное DigiMania 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
    Я работаю в среде 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\src\mfc\winocc.cpp

    Line: 329



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

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

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

    Код:

    ExpandedWrap disabled
      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;
      }
    1 пользователей читают эту тему (1 гостей и 0 скрытых пользователей)
    0 пользователей:


    Рейтинг@Mail.ru
    [ Script Execution time: 0,0600 ]   [ 15 queries used ]   [ Generated: 21.07.19, 17:26 GMT ]