- •ЗАКЛАДКИ
- •Свойства закладки
- •Функции класса CTabCtrl
- •Создание закладки
- •Тестирование обработчика изменения активного корешка
- •Создание страниц закладки
- •Открытие немодальных дочерних диалогов
- •Вычисление положения и размеров страниц
- •Отображение страниц закладки
- •ЛИСТЫ СВОЙСТВ
- •Обмен данными с листами свойств
Лекция 13 |
Закладки |
1 |
|
Л Е К Ц И Я |
1 3 |
ЗАКЛАДКИ______________________________________________________________________________ 1
Свойства закладки______________________________________________________________________ 1 Функции класса CTabCtrl _________________________________________________________________ 2 Создание закладки______________________________________________________________________ 2 Добавление корешка ____________________________________________________________________ 3
Тестирование обработчика изменения активного корешка _____________________________________ 4
Создание страниц закладки ______________________________________________________________ 4 Открытие немодальных дочерних диалогов _________________________________________________ 5 Вычисление положения и размеров страниц ________________________________________________ 6 Отображение страниц закладки ___________________________________________________________ 6
ЛИСТЫ СВОЙСТВ_______________________________________________________________________ 6
Обмен данными с листами свойств ________________________________________________________ 8
ЗАКЛАДКИ
Часто в окне диалога нужно поместить гораздо больше элементов управления, чем оно может вместить. Чтобы решить эту проблему, используются закладки. Они напоминают обычные закладки в книжке. Кроме того, закладки группируют эти элементы, разделяя их, например, по темам.
Для реализации набора закладок используется класс CTabCtrl. Иерархия классов относительно CTabCtrl показана на рисунке
CObject
CCmdTaget
CWnd
CTabCtrl
Элемент управления закладка (TAB) позволяет выводить страницы на экран, если пользователь щелкнул на ее корешке. Можно создать закладку, корешки которой имеют вид кнопок. Чаще всего закладки используются вместе с листами свойств и создаются автоматически. Каждый корешок закладки может иметь надпись, значок и 32-битное значение, определяемое приложением.
Свойства закладки
Если закладка создается с помощью редактора диалоговых окон, то на странице свойств Styles доступны следующие стили:
Multiline |
корешки закладки будут отображаться в несколько рядов; |
Alignment |
определяет ширину корешков на закладке; |
Right Justify |
(по умолчанию), ширина корешков увеличена чтобы полностью заполнить ряд; |
Fixed Width |
все корешки будут иметь одинаковую ширину; |
Ragged Right |
ширина корешков не увеличивается для полного заполнения ряда; |
Buttons |
корешки будут иметь вид кнопок; |
Выжол Ю.А. |
Программирование на Visual C++ |
Лекция 13 |
Закладки |
2 |
Focus |
определяет, будет ли корешок иметь фокус; |
|
Default |
корешки не будут иметь фокус; |
|
On Button Down |
корешок получает фокус, как правило используется для корешков в виде кнопок; |
|
Never |
корешки не будут иметь фокус; |
|
ToolTips |
закладка связана с элемент управления “всплывающая подсказка”; |
|
Border |
набор закладок будет иметь границу; |
|
Bottom |
корешки будут отображаться внизу набора закладок |
|
Vertical |
корешки будут отображаться вертикально справа или слева в зависимости от |
|
|
флага Bottom; |
|
Функции класса CTabCtrl
В классе CTabCtrl определены следующие функции:
Create ( ) |
создаёт закладку во время выполнения программы; |
InsertItem ( ) |
создаёт новый корешок в закладке; |
DeleteItem ( ) |
удаляет корешок из закладки; |
DeleteAllItems ( ) |
удаляет все корешки из закладки; |
AdjustRect ( ) |
преобразовывает область закладки в клиентскую область и обратно; |
RemoveImage ( ) |
удаляет заданное изображение из списка изображений закладки; |
GetImageList ( ) |
возвращает дескриптор списка изображений; |
SetImageList ( ) |
устанавливает новый дескриптор списка изображений; |
GetItemCount ( ) |
возвращает число корешков; |
GetItem ( ) |
получает информацию о корешке; |
SetItem ( ) |
изменяет информации о корешке; |
GetItemRect ( ) |
возвращает размеры и положение корешка; |
SetItemSize ( ) |
изменяет размер корешка; |
GetExtendedStyle ( ) |
получает дополнительные стили закладки; |
GetCurSel ( ) |
возвращает индекс текущего выбранного корешка; |
SetCurSel ( ) |
устанавливает корешок выбранным; |
SetMinTabWidth ( ) |
устанавливает минимальное значение ширины корешков; |
SetPadding ( ) |
устанавливает размеры поля вокруг значка и надписи корешка; |
GetRowCount ( ) |
возвращает количество строк в закладке ; |
GetTooltips ( ) |
возвращает дескриптор элемента управления “всплывающая подсказка”; |
SetTooltips ( ) |
задает элемент всплывающей подсказки; |
GetCurFocus ( ) |
возвращает индекс корешка, имеющего фокус ввода; |
SetCurFocus ( ) |
устанавливает фокус на заданную корешок; |
HighlightIterm ( ) |
подсвечивает корешок. |
Если закладка создается с помощью редактора диалоговых окон, то для выполнения операций с закладками удобно создать с помощью ClassWizard переменную типа CTabCtrl, ассоциированную с элементом управления “закладка”.
Создание закладки
Закладку можно создать во время выполнения программы. Закладка создаётся в два шага. Сначала объявляется экземпляр класса с помощью конструктора без параметров CTabCtrl ( ). Удобнее всего это сделать в интерфейсе класса текущего диалогового окна.
Для создания собственно элемента управления используется функция, которая создает элемент управления “закладка“ и присоединяет его к объекту класса CTabCtrl. Эту функцию удобно вызывать при инициализации текущего диалогового окна.
BOOL Create ( DWORD dwStyle , const RECT & rect , CWnd* pParentWnd , UINT nID ) ;
dwStyle |
стиль закладки; |
rect |
задает расположение и размеры закладки; |
pParentWnd |
задает родительское окно; |
nID |
идентификатор закладки. |
Стиль закладки dwStyle может быть суммой нескольких флагов: |
|
Выжол Ю.А. |
Программирование на Visual C++ |
Лекция 13 |
Закладки |
3 |
TCS_BUTTONS |
корешки будут иметь вид кнопок;. |
|
TCS_FIXEDWIDTH |
все корешки будут иметь одинаковую ширину; |
|
TCS_FOCUSNEVER |
корешок не получает фокус. |
|
TCS_FOCUSONBUTTONDOWN корешок получает фокус, как правило используется для корешков в виде кнопок;
закладка может получить фокус при нажатии клавиши табуляции; корешки закладки будут отображаться в несколько рядов отображает только один ряд корешков (по умолчанию); пиктограмма и надпись выравниваются по левому краю корешка;
смещает пиктограмму влево и выравнивает название корешка по центру; выравнивает корешок по правому краю; закладка связана с элемент управления “всплывающая подсказка”; создает видимую закладку; создает закладку, не имеющую доступа;
ширина корешков не увеличивается для полного заполнения ряда;
Функции возвращают ноль, если создан новый корешок закладки и –1 в противном случае. Параметры функций имеют следующее назначение:
индекс нового корешка; указатель на строку названия корешка;
индекс пиктограммы, который хранится в связанном элементе управления типа
CImageList.
определенные приложением данные, связанные с закладкой.
указатель на структуру TCITEM, которая определяет атрибуты корешка;
определяет, какие атрибуты структуры TCITEM используются. Может быть нулем или комбинацией следующих значений:
TCIF_TEXT |
используется член структуры pszText; |
TCIF_IMAGE |
используется член структуры iImage; |
TCIF_PARAM |
используется член структуры lParam; |
TCIF_STATE |
используется член структуры dwState; |
TCIF_RTLREADING |
текст pszText читается справа налево. |
Созданные корешки будут пронумерованы последовательно, начиная с нуля. Нумерация выполняется с учётом относительных значений параметра nItem. Корешок, созданный первым, будет активным.
Рассмотрим пример добавления корешков. создаём проект под именем Demo;
добавляем в диалоговое окно IDD_DEMO_DIALOG элемент управления типа Tab Control с име-
нем IDC_TAB;
Выжол Ю.А. |
Программирование на Visual C++ |
Лекция 13 |
Закладки |
4 |
с помощью ClassWizard создаём переменную m_tab типа CTabCtrl, ассоциированную с элементом управления IDC_TAB;
добавляем в функцию инициализации диалогового окна класса CDemoDlg вызовы функции вставки корешков InsertItem ( )
BOOL CDemoDlg :: OnInitDialog ( )
{
CDialog :: OnInitDialog ( ) ;
• • •
m_tab.InsertItem(2,"Вторая") ; |
// создаёт второй корешок с индексом 1 (активный) |
m_tab.InsertItem(0,"Первая") ; |
// создаёт первый корешок с индексом 0 |
m_tab.InsertItem(4,"Третья") ; |
// создаёт первый корешок с индексом 2 |
• • • |
|
return TRUE ; |
|
} |
|
Запускаем программу на выполнение. Диалоговое окно должно иметь следующий вид:
Тестирование обработчика изменения активного корешка
Проверим индексацию корешков. Пусть при каждом изменении активного корешка программа выводит его номер в окне сообщений. Для этого:
открываем макет формы и дважды щелкаем на вкладке;
ClassWizard предложит нам создать обработчик OnSelchangeTab ( ) сообщения TCN_SELCHANGE, которое вкладка посылает родительскому окну при изменении активного корешка;
добавляем в тело функции OnSelchangeTab ( ), команды, которые определяют номер активного корешка;
void CDemoDlg :: OnSelchangeTab ( NMHDR* pNMHDR , LRESULT* pResult )
{
CString S ;
S.Format ("%i", m_tab.GetCurSel ( ) ) ; MessageBox ("Номер активного корешка "+ S ) ; *pResult = 0 ;
}
Создание страниц закладки
При изменении активного корешка в диалоговом окне отображается новый набор элементов управления. Эту задачу можно решить путём изменения свойств элементов управления, но это решение крайне трудоёмко. На практике элементы управления размещают на нескольких диалогах.
Эти диалоги должны отображаться, когда пользователь щелкает на корешках. Листы свойств представляют собой особый вид диалогового окна. Они чаще применяются для указания свойств приложения или каких-либо объектов. Для создания листов свойств надо выполнить следующие действия:
Выжол Ю.А. |
Программирование на Visual C++ |