Опубликован: 17.08.2010 | Доступ: свободный | Студентов: 999 / 59 | Оценка: 4.11 / 3.89 | Длительность: 29:38:00
Самостоятельная работа 19:

Модальные окна страниц свойств MFC

Динамическое изменение заголовка вкладки

В зависимости от результатов поиска по команде из первой вкладке нужно изменить заголовок и доступность второй вкладки. Количество найденных книг для простоты свяжем с индексом элемента в раскрывающемся списке интерфейса первой вкладки. Выбранный индекс списка nHint при нажатии кнопки Find будет передаваться в функцию CFindSheet::SetResult(nHits), которая установит заголовок и доступность второй вкладки Result. Функция будет в большей части повторять код предыдущей функции CFindSheet::SetEnabledText(int iPage) .

  • В начало файла FindSheet.cpp добавьте два макроопределения
    Макроопределения в начале файла FindSheet.cpp
    // FindSheet.cpp : implementation file
    //
    
    #include "stdafx.h"
    #include "ModalDemo.h"
    #include "FindSheet.h"
    #include ".\findsheet.h"
      
    #define RESULT_TAB_INDEX 1
    #define RESULT_TAB_CAPTION "Result: %ld books found"
      
    ......................................................
  • Для класса CFindSheet вызовите мастер добавления функций, который заполните так

  • Нажмите кнопку Add, затем кнопку Finish

    Мастер добавит заготовку в конец файла FindSheet.cpp, а в описание класса добавит прототип функции.

  • Наполните созданную функцию следующим кодом
    Функция SetResult()
    // Изменение содержимого и доступности заголовка вкладки
    void CFindSheet::SetResult(int nHits)
    {
      // Изменение текста заголовка вкладки
      CTabCtrl *pTab = GetTabControl();
      ASSERT(pTab);
      TC_ITEM ti;
      char szText[100];
      ti.mask = TCIF_TEXT;
      ti.pszText = szText;
      ti.cchTextMax = 100;
      VERIFY(pTab->GetItem(RESULT_TAB_INDEX, &ti));
      sprintf(szText, RESULT_TAB_CAPTION, nHits);
      VERIFY(pTab->SetItem(RESULT_TAB_INDEX, &ti));
      
      // Управление доступностью вкладки
      if(nHits <= 0)
        DisablePage(RESULT_TAB_INDEX, -1);
      else
        EnablePage(RESULT_TAB_INDEX);
    }
  • Перейдите в файл FindPage.cpp и найдите обработчик кнопки Find, который измените так
    Изменение обработчика кнопки Find
    void CFindPage::OnBnClickedButtonFind()
    {
      // TODO: Add your control notification handler code here
      CFindSheet *pParentSheet = (CFindSheet*)GetParent();
      
      ASSERT(pParentSheet->IsKindOf(RUNTIME_CLASS(CFindSheet)));
       
    //  pParentSheet->EnablePage(1);// Вторая вкладка
      
      // Демонстрация управления вкладкой Result по индексу списка
      int iIndex = m_cboLanguages.GetCurSel();
      pParentSheet->SetResult(iIndex);
    }
  • Постройте приложение и убедитесь, что:
    • количество "найденных" книг равно индексу элемента, выбранного в раскрывающемся списке
    • динамически меняется заголовок вкладки
    • доступность вкладки зависит от успеха "поиска"

Все работает, как мы задумали. Внешний вид приложения должен быть примерно таким



Александр Даниленко
Александр Даниленко
Стоит Windows 8 Pro, Visual Studio 2010 Express Edition .