Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
VC Лекции PDF / VC 13 Лек Закладки.pdf
Скачиваний:
36
Добавлен:
15.02.2015
Размер:
420.76 Кб
Скачать

Лекция 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++

nItem lpszItem nImage
lParam pTabCtrlItem nMask
Добавление корешка
Добавить корешки в закладку можно только во время выполнения программы. Для этой цели служат четыре перегруженные функции, определённые в классе CTabCtrl:
BOOL InsertItem ( int nItem , LPCTSTR lpszItem ) ;
BOOL InsertItem ( int nItem , LPCTSTR lpszItem , int nImage ) ; BOOL InsertItem ( int nItem , TCITEM* pTabCtrlItem ) ;
BOOL InsertItem ( UINT nMask , int nItem , LPCTSTR lpszItem , int nImage , LPARAM lParam ) ;
WS_TABSTOP TCS_MULTILINE
TCS_SINGLELINE TCS_FORCELABELLEFT TCS_FORCEICONLEFT
TCS_RIGHTJUSTIFY TCS_TOOLTIPS WS_VISIBLE WS_DISABLED TCS_RAGGEDRIGHT

Лекция 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++