Стоит Windows 8 Pro, Visual Studio 2010 Express Edition . |
Опубликован: 17.08.2010 | Доступ: свободный | Студентов: 1000 / 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); }
-
Постройте приложение и убедитесь, что:
- количество "найденных" книг равно индексу элемента, выбранного в раскрывающемся списке
- динамически меняется заголовок вкладки
- доступность вкладки зависит от успеха "поиска"
Все работает, как мы задумали. Внешний вид приложения должен быть примерно таким