Отправляет email-рассылки с помощью сервиса Sendsay

Статьи по Visual C++

  Все выпуски  

Элемент управления CTreeCtrl


Visual C++
Лучшие статьи с сайта www.p-lib.pp.ru
  Главная | Новости | Статьи | Каталог | Софт | Регистрация | Поиск

Новые статьи на сайте

1. Класс CRecordView
Объекты этого класса предоставляют для изображения записей базы данных в элементах управления форму, которая непосредственно соединена с объектом CRecordset.

2. Поиск и сортировка записей
В статье описаны функции поиска и сортировки в элементе управления ListCtrl.

3. Меню и акселераторы
В этой статье я вас ознакомлю с классом CMenu. С помощью этого класса можно создавать меню в MFC приложениях. Так же будет рассмотрен вопрос об использовании акселераторов.

4. Разделяемая память в динамической библиотеке
В этой статье рассмотрен вопрос о разделяемой памяти в динамической библиотеке. Также приведенные примеры демонстрируют примеры использования общей памяти.

5. Битовые образы
В операционной системе Windows рассматриваются два типа растровых изображений: аппаратно-зависимые и аппаратно-независимые. В этой статье рассматриваются аппаратно-зависимые изображения и их поддержку в библиотеке MFC.

6. Как в Edit-Control поместить каретку после текста
Чтобы поместить выделенный кусок текста в edit control, можно использовать сообщение EM_SETSEL. Если начальная и конечная позиции выделенного текста совпадают, то каретка просто помещается в эту позицию.

7. Как разрешить меню для Edit Control
В CDialog или другом окне, которое не имеет меню edit для вырезания (cutting), копирования (copying), и вставки (pasting), контролы CEdit обрабатывают эти функции через обычные Windows акселераторы. Однако в стандартном приложении MDI или SDI эти опции запрещены. Как же исправить эту ситуацию?

8. Как программно добавить текст в Edit Control
В основном, приложения Windows используютс элемент управления редактирования для отображения текста. Иногда, приложению требуется добавить текст в конец окна редактирования вместо того, чтобы заменить весь текст. Существует два способа сделать это в Windows.

9. Иконка на кнопке
Забавная штука, получается, очень симпатично выглядит кнопка с рисунком, но стоит добавить манифест к файлу, как сразу эти кнопки отображаются обычными. В этой статье приводится функция, которая и загоняет в кнопку иконку.

10. Как закрасить диалог цветом
В статье приводится пример закрашивания диалога цветом. Этот пример хорошь тем, что можно использовать любой, даже не стандартный способ вызова диалога.

Свежие компьютерные новости

02.03.2006 Концепт-вирус заражает и ПК, и смартфоны

02.03.2006 Ноутбук Fujitsu Siemens Lifebook Q2010 весит один килограмм

02.03.2006 VMware объявляет конкурс на лучшее виртуальное приложение

02.03.2006 Новое ПО Symantec поможет предотвратить утерю данных

02.03.2006 IBM выпустила математический сопроцессор

02.03.2006 Квантовые компьютеры будут работать на "точках"

01.03.2006 Memory Stick PRO Duo 4 Гб от SanDisk

01.03.2006 Три флешки от PQI

Элемент управления CTreeCtrl

Кроме возможности выводить записи последовательных списков при помощи таких элементов, как список или просмотр списка, Windows предоставляет возможность отображения (и управления) списков, организованных по принципу дерева. Для этого поддерживается элемент управления "просмотр дерева" (TREE VIEW). Первое, для чего этот элемент использует система Windows — это организация просмотра дерева каталогов, а также различных индексов в справочных файлах и т. п.

Древовидные структуры предполагают наличие некоторой иерархии узлов и поэтому естественно, что данный элемент управления может применяться только для информации, имеющей иерархическую структуру. Для создания этого элемента в библиотеке MFC предназначен класс CTreeCtrl. Каждая запись в просмотре дерева состоит из текстовой строки (надписи) и заданного битового изображения и может иметь одну или более подзаписей, связанных с ней. Щелкнув мышью по записи, пользователь может развернуть или свернуть список связанных с записью подзаписей. На экране подзаписи могут соединяться с записью линиями для того, чтобы наглядно представлялась их взаимосвязь.

Любая запись просмотра дерева может иметь связанные с ней подзаписи, которые называются дочерними записями, а сама запись называется родительской записью. При выводе на экран дочерние записи изображаются ниже родительской и со сдвигом в сторону для наглядного представления их зависимости от родительской записи. Запись, которая не имеет родительской и, следовательно, лежит на самом верхнем уровне иерархии, называется корневой записью.

Кроме класса CTreeCtrl, библиотека MFC содержит еще и класс CTree View. Класс CTreeCtrl предназначен для реализации просмотра дерева в блоке диалога, особенно при наличии в блоке диалога других элементов управления. Напротив, если просмотр дерева должен быть реализован в архитектуре "документ/представление" и будет занимать собой все окно, автоматически изменяя свои размеры при изменении размеров родительского окна, обрабатывать сообщения от меню и т. п., то необходимо использовать класс CTreeView.

Сортировка и поиск

Функции этой группы предназначены для поиска записей по различным критериям, но в отличие от последовательных списков для просмотра дерева поиск осуществляется по тому, как искомая запись соотносится с другими.

HTREEITEM CTreeCtrl::GetNextItem
( 
 HTREEITEM hItem, 
 UINT nCode
)

Возвращает дескриптор следующей записи, подходящей по заданным параметрам, или NULL, если таковая не найдена. Параметр hltem определяет дескриптор записи, относительно которой производится поиск. Параметр nCode задает критерии поиска и может содержать один из следующих параметров:

  • TVGN_CARET - Вернуть текущую выбранную запись.
  • TVGN_CHILD - Вернуть первую дочернюю запись; в этом случае параметр hltem должен быть равен NULL.
  • TVGN_DROPHILITE - Вернуть запись, которая является конечной целью при операции перетаскивания записи просмотра дерева.
  • TVGN_FIRSTVISIBLE - Вернуть первую видимую запись.
  • TVGN_NEXT - Вернуть следующую запись, которая лежит на том же уровне, что и запись, относительно которой производится поиск.
  • TVGN_NEXTVISIBLE - Вернуть видимую запись, следующую за данной.
  • TVGN_PARENT - Вернуть родительскую запись.
  • TVGN_PREVIOUS - Вернуть предыдущую запись, которая лежит на том же уровне, что и запись, относительно которой производится поиск.
  • TVGN_PREVIOUSVISIBLE - Вернуть видимую запись, предшествующую данной записи.
  • TVGN_ROOT - Вернуть первую дочернюю запись корневой записи, поддереву которой принадлежит указанная в параметре hltem запись.

    Если нужно получить записи, лежащие на том же уровне иерархии, что и данная запись, то можно воспользоваться следующими функциями:

    HTREEITEM CTreeCtrl::GetNextSiblingltem
    (
     HTREEITEM hItem
    )

    Возвращает дескриптор следующей записи.

    HTREEITEM CTreeCtrl::GetPrevSiblingltem
    (
     HTREEITEM hItem
    )

    Возвращает дескриптор предыдущей записи.

    Следующая функция возвращает дескриптор родительской записи для записи, заданной параметром hltem:

    HTREEITEM CTreeCtrl::GetParentItem
    (
     HTREEITEM hItem
    )

    Класс CTreeCtrl позволяет определить запись по координатам и, если необходимо, узнать, на какой записи находится курсор мыши. Для этого следует воспользоваться функцией HitTest, например, в обработчике нажатия кнопки мыши:

    HTREEITEM CTreeCtrl::HitTest
    ( 
     CPoint pt, 
     UINT* pFlags
    )

    или

    HTREEITEM CTreeCtrl::HitTest
    (
     TV_HITTESTINFO* pHitTestlnfo
    )

    Возвращает дескриптор записи, которой принадлежит указанная точка, или NULL, если точка не принадлежит ни одной записи. Параметр pFlags первой версии функции является указателем на переменную целого типа, принимающую результаты проверки. Может иметь одно или больше значений, указанных в описании параметра flags структуры TV_HITTESTINFO. Параметр pHitTestlnfo является указателем на структуру типа TV_HITTESTINFO, содержащую координаты точки для проверки и принимающую результаты проверки.

    Приведем описание структуры TV_HITTESTINFO:

    typedef struct _TV_HITTESTINFO
    ( 
     POINT pt; 
     UINT flags; 
     HTREEITEM hItem; 
    } TV_HITTESTINFQ;

    Поле flags используется для хранения результатов проверки и может содержать комбинацию следующих значений:

  • TVHT_ABOVE - Проверяемая точка расположена выше клиентской области элемента управления.
  • TVHT_BELOW - Проверяемая точка расположена ниже клиентской области элемента управления.
  • TVHT_NOWHERE - Проверяемая точка расположена в клиентской области просмотра дерева, но лежит вне области собственно дерева.
  • TVHT_ONITEM - Проверяемая точка расположена в границах записи.
  • TVHT_ONITEMBUTTON - Проверяемая точка расположена в границах кнопки записи.
  • TVHT_ONITEMICON - Проверяемая точка расположена в границах пиктограммы записи.
  • TVHT_ONITEMINDENT - Проверяемая точка расположена в границах отступа записи.
  • TVHT_ONITEMLABEL - Проверяемая точка расположена на метке, ассоциированной с записью.
  • TVHT_ONITEMRIGHT - Проверяемая точка расположена правее надписи записи.
  • TVHT_ONITEMSTATEICON - Проверяемая точка расположена в границах пиктограммы состояния записи.
  • TVHT_TOLEFT - Проверяемая точка расположена левее клиентской области элемента управления.
  • TVHT_TORIGHT - Проверяемая точка расположена правее клиентской области элемента управления.
  • К этой же группе я отнес функции, осуществляющие сортировку записей в просмотре дерева. Их две. Первая предназначена для сортировки по алфавиту дочерних записей родительской записи. Это функция SortChildren. Она определяет уровни дочерних записей, которые должны быть отсортированы:

    BOOL CTreeCtrl::SortChildren
    (
     HTREEITEM hItem
    )

    Сортирует дочерние записи родительской записи, указанной в hltem. Если значение параметра hltem равно NULL, то будет отсортирован весь просмотр дерева.

    Если же необходимо задать собственный критерий для сортировки записей, то это позволяет сделать функция SortChildrenCB:

    BOOL CTreeCtrl::SortChildrenCB
    (
     LPTV_SORTCB pSort
    )

    Сортирует дочерние записи, используя определяемую приложением функцию сортировки. Параметр pSort является указателем на структуру TV_SORTCB:

    typedef struct _TV_SORTCB
    { 
     HTREEITEM hParent; 
     PFNTVCOMPARE IpfnCompare; 
     LPARAM IParam; 
    } TV_SORTCB;

    Поле IpfnCompare является указателем на определяемую приложением функцию сортировки записей. Она вызывается всякий раз, когда необходимо сравнить две записи и имеет описание:

    int CALLBACK CompareFunc
    ( 
     LPARAM iParam1, 
     LPARAM iParam2, 
     LPARAM iParamSort
    )

    Возвращает отрицательное значение, если первая запись должна предшествовать второй, положительное, если первая запись должна следовать за второй, и нуль, если записи равны. Параметры функции сортировки аналогичны параметрам функции сортировки для просмотра списка, которая была описана в соответствующем разделе.

    Функции для работы с просмотром дерева в целом

    Когда ветка дочерних записей развернута, то они изображаются с некоторым сдвигом относительно родительской записи. Для определения и изменения сдвига дочерней записи относительно родительской предназначены функции:

    UINT CTreeCtrl::GetIndent()

    Возвращает сдвиг (в пикселах) дочерней записи относительно родительской.

    void CTreeCtrl::SetIndent(UINT nIndent)

    Задает сдвиг (в пикселах) дочерней записи относительно родительской. Если задается значение меньшее, чем определяемое системой, то функция игнорируется.

    Книги с Озона

    Visual C++.NET. Библия пользователя Visual C++.NET. Библия пользователя

    Эта книга посвящена библиотеке MFC, a не только платформе .NET. Весь материал разбит на разделы, освещающие отдельные направления разработки, объединенные в логически упорядоченные категории, что позволит новичкам получить систематизированные знания, читая книгу шаг за шагом, а квалифицированный программист легко найдет интересующие разделы. Каждая глава начинается вводным разделом, содержащим краткую информацию по обсуждаемой теме, а затем следует пример довольно простого демонстрационного приложения. Книга предназначена для программистов средней и высокой квалификации.

    Заказать на Озоне

    Visual C++.NET. Класссика програмирования (+ CD-ROM) Visual C++.NET. Класссика програмирования (+ CD-ROM)

    "Visual C++.Net. Классика программирования" - книга, необходимая как начинающему программисту, так и профессионалу, желающему познакомиться с новыми возможностями последней версии наиболее популярной системы программирования. Изучение этой книги не требует глубоких знаний языка C++, однако предполагается знание основ языка С. Поэтапное изучение предмета позволит человеку с любым уровнем начальных знаний о языке программирования C++ легко изучить самую современную его версию. Данная книга - не просто учебник по языку программирования, это первый шаг в создании удобных, профессиональных приложений, ориентированных на Internet.

    Заказать на Озоне

    Использование Microsoft Visual C++ .NET. Специальное издание Использование Microsoft Visual C++ .NET. Специальное издание

    Эта книга фокусирует внимание читателя на использовании языка программирования Visual C++ при создании 32-разрядных Windows-приложений, включая приложения баз данных, Internet-приложения и СОМ-приложения. Помимо этого, здесь содержится описание технологии .NЕТ и способа применения языка Visual C++ при создании .NЕТ-приложений, использующих базы данных, взаимодействующих с Internet и т.д. Особое внимание автор книги уделяет совместному использованию технологий .NЕТ и СОМ. Эта книга будет полезна как начинающим, так и опытным программистам.

    Заказать на Озоне

    Последнии статьи по Delphi

       -  Новый компонент TTrayIcon в BDS 2006
       -  Оператор перехода (GoTo)
       -  Бегущая строка (Метод III)
       -  Методика модификации программ для скрытия их от антивирусов
       -  Нестандартные заголовки
       -  Создание бегущей строки в Delphi
       -  Введение в реккурсию
       -  Перевод в Delphi-приложениях
       -  Сравнительный анализ технологий CORBA и COM - Часть 3
       -  Сравнительный анализ технологий CORBA и COM - Часть 2

    Советую посетить

    Портал для Delphi программиста - Быстро развивающийся портал о программирование на языке Pascal/Delphi. Статьи, исходники, компоненты, справочники, мануалы, FaQ, программы.

    Дружественные рассылки

    Статьи по Visual Basic.NET
    Статьи по ASP.NET
    Delphi Coding

    Замечания и предложения отправляйте на E-Mail указанный ниже. С уважением Ковязин Дмитрий (admin@p-lib.pp.ru).



    В избранное