Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Assembler Підручник.doc
Скачиваний:
3
Добавлен:
16.07.2019
Размер:
531.46 Кб
Скачать

Item Selection

A tree view control notifies the parent window when the selection changes from one item to another by sending the TVN_SELCHANGING and TVN_SELCHANGED notification messages. Both notifications include a value that specifies whether the change is the result of a mouse click or a keystroke. The notifications also include information about the item that is gaining the selection and the item that is losing the selection. You can use this information to set item attributes that depend on the selection state of the item. Returning TRUE in response to TVN_SELCHANGING prevents the selection from changing, and returning FALSE allows the change.

An application can change the selection by sending the TVM_SELECTITEM message.

Item Information

Tree view controls support a number of messages that retrieve information about items in the control.

The TVM_GETITEM message can retrieve an item's handle and attributes. An item's attributes include its current state, the indexes in the control's image list of the item's selected and nonselected bitmapped images, a flag that indicates whether the item has child items, the address of the item's label string, and the item's application-defined 32-bit value.

The TVM_GETNEXTITEM message retrieves the tree view item that bears the specified relationship to the current item. The message can retrieve an item's parent, the next or previous visible item, the first child item, and so on.

The TVM_GETITEMRECT message retrieves the bounding rectangle for a tree view item. The TVM_GETCOUNT and TVM_GETVISIBLECOUNT messages retrieve a count of the items in a tree view control and a count of the items that can be fully visible in the tree view control's window, respectively. You can ensure that a particular item is visible by using the TVM_ENSUREVISIBLE message.

Tree View Image Lists

Each item in a tree view control can have four bitmapped images associated with it:

An image, such as an open folder, displayed when the item is selected.

An image, such as a closed folder, displayed when the item is not selected.

An overlay image that is drawn transparently over the selected or nonselected image.

A state image, which is an additional image displayed to the left of the selected or nonselected image. You can use state images, such as checked and cleared check boxes, to indicate application-defined item states.

By default, a tree view control does not display item images. To display item images, you must create image lists and associate them with the control. For more information about image lists, see Image Lists.

A tree view control can have two image lists: a normal image list and a state image list. A normal image list stores the selected, nonselected, and overlay images. A state image list stores state images. Use the ImageList_Create function to create an image list, and use other image list functions to add bitmaps to the image list. Then, to associate the image list with the tree view control, use the TVM_SETIMAGELIST message. The TVM_GETIMAGELIST message retrieves a handle to one of a tree view control's image lists. This message is useful if you need to add more images to the list.

In addition to the selected and nonselected images, a tree view control's normal image list can contain up to four overlay images. Overlay images are identified by a one-based index and are designed to be drawn transparently over the selected and nonselected images. To assign an overlay mask index to an image in the normal image list, call the ImageList_SetOverlayImage function.

By default, all items display the first image in the normal image list for both the selected and nonselected states. Also, by default, items do not display overlay images or state images. You can change these default behaviors for an item by sending the TVM_INSERTITEM or TVM_SETITEM message. These messages use the TVITEM structure to specify image list indexes for an item.

To specify an item's selected and nonselected images, set the TVIF_SELECTEDIMAGE and TVIF_IMAGE bits in the mask member of the TVITEM structure and specify indexes from the control's normal image list in the iSelectImage and iImage members. Alternatively, you can specify the I_IMAGECALLBACK value in iSelectImage and iImage instead of specifying indexes. This causes the control to query its parent window for an image list index each time the item is about to be redrawn. The control sends the TVN_GETDISPINFO notification message to get the index.

To associate an overlay image with an item, use the INDEXTOOVERLAYMASK macro to specify an overlay mask index in the state member of the item's TVITEM structure. You must also set the TVIS_OVERLAYMASK bits in the stateMask member. Overlay mask indexes are one-based; an index of zero indicates that no overlay image was specified.

State images are stored in a separate state image list and identified by their index. To specify the state image list, send a TVM_SETIMAGELIST message. Unlike the list view control, which uses a one-based index to identify state images, tree view control state images are identified by a zero-based index. However, an index of zero indicates that the item does not have a state image. Consequently, image zero cannot be used as a state image. For further discussion of item states and state images, see Tree View Item States Overview.

Drag-and-Drop Operations

A tree view control notifies the parent window when the user starts to drag an item. The parent window receives a TVN_BEGINDRAG notification message when the user begins dragging an item with the left mouse button and a TVN_BEGINRDRAG notification message when the user begins dragging with the right button. You can prevent a tree view control from sending these notifications by giving the tree view control the TVS_DISABLEDRAGDROP style.

You obtain an image to display during a drag operation by using the TVM_CREATEDRAGIMAGE message. The tree view control creates a dragging bitmap based on the label of the item being dragged. Then the tree view control creates an image list, adds the bitmap to it, and returns the handle to the image list.

You must provide the code that actually drags the item. This typically involves using the dragging capabilities of the image list functions and processing the WM_MOUSEMOVE and WM_LBUTTONUP (or WM_RBUTTONUP) messages sent to the parent window after the drag operation has begun. For more information, see Dragging a Tree View Item.

If items in a tree view control are to be the targets of drag-and-drop operations, you need to know when the mouse pointer is on a target item. You can find out by using the TVM_HITTEST message. You specify the address of a TVHITTESTINFO structure that contains the current coordinates of the mouse pointer. When the SendMessage function returns, the structure contains a flag indicating the location of the mouse pointer relative to the tree view control. If the pointer is over an item in the tree view control, the structure contains the handle to the item as well.

You can indicate that an item is the target of a drag-and-drop operation by using the TVM_SETITEM message to set the state to the TVIS_DROPHILITED value. An item that has this state is drawn in the style used to indicate a drag-and-drop target.

About Tree View Control Notification Messages

A tree view control sends the following notification messages to its parent window in the form of WM_NOTIFY messages.

Notification Description

TVN_BEGINDRAG Signals the start of a drag-and-drop operation.

TVN_BEGINLABELEDIT Signals the start of in-place label editing.

TVN_BEGINRDRAG Signals that the right mouse button has started a drag-and-drop operation.

TVN_DELETEITEM Signals the deletion of a specific item.

TVN_ENDLABELEDIT Signals the end of label editing.

TVN_GETDISPINFO Requests information that the tree view control requires to display an item.

TVN_ITEMEXPANDED Signals that a parent item's list of child items was expanded or collapsed.

TVN_ITEMEXPANDING Signals that a parent item's list of child items is about to be expanded or collapsed.

TVN_KEYDOWN Signals a keyboard event.

TVN_SELCHANGED Signals that the selection has changed from one item to another.

TVN_SELCHANGING Signals that the selection is about to be changed from one item to another.

TVN_SETDISPINFO Notifies a parent window that it must update the information it maintains for an item.

Повідомлення вікон SysTreeView32

Кожне повідомлення повертає в регістрі EAX результат виконання. Як правило, 0 означає, що виконання не відбулося. Кожне повідомлення має свій код, символічну назву та два чотирьохбайтні параметри – wParam та lParam. Наведемо символічні назви повідомлень, які використовуються вікнами перегляду дерева.

Контрол SysTreeVieew32 ми будемо інколи називати дочірнім вікном для перегляду дерева. Як і будь-яке інше дочірнє вікно, воно взаємодіє зі своїм батьківським вікном за допомогою повідомлень. Батьківське вікно може посилати повідомлення до SysTreeVieew32, а той в свою чергу може “відповідати” своєму батьківському вікну. У цьому відношенні SysTreeVieew32 нічим не відрізняється від інших дочірніх вікон.

Повідомлення, які поступають від SysTreeVieew32 називаються нотифікаційними і їх символічні назви починаються з префікса TVN_, а символічні назви повідомлень, що надсилаються до SysTreeVieew32, починаються з TVM_.

TVM_CREATEDRAGIMAGE – створює bitmap-зображення для операції drag and drop, створює ImageList та додає зображення до нього. Програма може відображати зображення за допомогою функцій ImageList.

wParam = 0; lParam = хендл вузла, який отримує нове drag-зображення.

Повідомлення повертає хендл об’єкту ImageList до якого додано drag-зображення.

Якщо ви створюєте контрол без об’єкту ImageList, то ви не зможете використовувати TVM_CREATEDRAGIMAGE для створення зображення для відображення drag-операції.

TVM_DELETEITEM – видаляє вузол дерева SysTreeView32-контрола.

wParam = 0; lParam = хендл вузла, який необхідно видалити. Якщо це значення дорівнює TVI_ROOT, то видаляються всі вузли дерева.

Якщо видалення успішне, то повертає 1 (TRUE).

Коли вузол видалено, батьківське вікно отримує нотифікаційне повідомлення TVN_DELETEITEM.

TVM_EDITLABEL – переводить контрол у режим редагування назви вузла, замінює текст вузла у однолінійний EDIT-контрол для редагування назви.

wParam = 0; lParam = хендл вузла, який необхідно редагувати.

Повертає хендл EDIT-контрола, який використовується для редагування.

Повідомлення повертає хендл вікна для редагування назви вузла.

Коли це повідомлення починає оброблятися, батьківське вікно отримує нотифікаційне повідомлення TVN_BEGINLABELEDIT. Коли користувач закінчує припиняє редагування, то вікно редагування знищується. Перед надсиланням повідомлення необхідно передати йому фокус вводу, наприклад, за допомогою функції SetFocus. При необхідності ви можете субкласувати це вікно.

TVM_ENDEDITLABELNOW – надсилається для завершення редагування назви вузла. wParam = прапорець закінчення; lParam = 0; Якщо прапорець закінчення =1, то редагування припиняється без збереження.

Коли це повідомлення починає оброблятися, батьківське вікно отримує нотифікаційне повідомлення TVN_ENDLABELEDIT.

TVM_ENSUREVISIBLE – надсилається для підтвердження, що вузол є видимим. Якщо вузол не видимий, то воно розширює або пересуває вікно або розкриває батьківський вузол.

wParam = 0; lParam = хендл вузла;

Якщо система зробила вузол видимим, то повідомлення повертає 1, а 0 – якщо цього зробити не можна.

Якщо система розкриває батьківський вузол під час виконання цього повідомлення, то батьківське вікно отримує нотифікаційні повідомлення TVN_ITEMEXPANDING та TVN_ITEMEXPANDED.

TVM_EXPAND – розкриває або закриває список дочірніх вузлів, що пов’язані з батьківським вузлом.

wParam = одна з наступних дій: TVE_COLLAPSE (закриття списку), TVE_COLLAPSERESET (закриває і знищує вузли – використовується разом з TVE_COLLAPSE), TVE_EXPAND (розкриває список), TVE_TOGGLE (розкриває або закриває список в залежності від його попереднього стану); lParam = хендл батьківського вузла;

Повідомлення повертає 1 в регістрі EAX при успішному виконанні і 0 в разі невдачі.

Під час виконання до батьківського вікна не надсилаються нотифікаційні повідомлення TVN_ITEMEXPANDED.

TVM_GETCOUNT – надсилається для отримання кількості вузлів дерева.

wParam = 0; lParam = 0;

Кількість вузлів повертається в регістрі EAX.

TVM_GETEDITCONTROL – отримує в регістрі EAX хендл вікна редагування, яке пов’язане з назвою вузла.

wParam = 0; lParam = 0;

Якщо EAX містить 0, то повідомлення не виконано.

TVM_GETIMAGELIST – отримує хендл об’єкту ImageList, який асоційований з даним контролом.

wParam = тип зображення, який може бути одним з наступних значень: TVSIL_NORMAL (ImageList, що описує не вибраний та вибраний вузли), TVSIL_STATE (ImageList, що описує стани, що задаються користувачем); lParam = 0;

В регістрі EAX вертається хендл об’єкту ImageList.

TVM_GETINDENT – отримує кількість пікселів, які пов’язані з представленням дочірніх вузлів.

wParam = 0; lParam = 0;

TVM_GETISEARCHSTRING – отримує рядок пошуку для дерева. Контрол SysTreeView32 використовує рядок пошуку для вибору вузлів, що вибрані користувачем. wParam = 0; lParam = вказівник на буфер, який буде заповнений значенням рядку пошуку;

Повідомлення вертає кількість символів у рядку пошуку, або 0 якщо SysTreeView32 не є в режимі пошуку.

TVM_GETITEM – отримує один або декілька атрибутів SysTreeView32.

wParam = 0; lParam = вказівник на структуру даних TV_ITEM, яка визначає вузол (hItem) та маску атрибутів (mask), що необхідно отримати. Якщо маска дорівнює TVIF_TEXT, то член pszText цієї структури повинен вказувати на буфер, який після виклику повідомлення буде заповнений текстом. Член cchTextMax повинен містити розмір буферу. Якщо маска дорівнює TVIF_STATE, то член stateMask має визначати стани вузлів, які необхідно повернути;

Повідомлення вертає 1 при успішному виконанні і 0 при неуспішному.

TVM_GETITEMRECT – отримує структуру даних RECT, що описує прямокутник, який займає один з вузлів дерева.

wParam = прапорець, який вказує яку область треба отримати. Якщо це значення = 1, то буде отримана лише область, яку займає текст вузла. Інакше буде отримано область вузла за картинкою;

lParam = вказівник на структуру RECT;

Якщо вузол є видимим та повідомлення заповнило структуру RECT, то EAX = 1. Інакше EAX = 0.

TVM_GETNEXTITEM – отримує вузол дерева, що пов’язаний з заданим вузлом. wParam = прапорець для отримання інформації, який може приймати одне з наступних значень:

TVGN_CARET (знаходить вибраний вузол та отримує його хендл), TVGN_CHILD (знаходить перший дочірній вузол для заданого вузла), TVGN_DROPHILITE (отримує вузол, який є результатом операції drag-and-drop), TVGN_FIRSTVISIBLE (отримує перший вузол, який є видимим), TVGN_NEXT (отримує наступний суміжний вузол даного рівня), TVGN_NEXTVISIBLE (отримує наступний видимий вузол після заданого), TVGN_PARENT (отримує батьківський вузол для заданого вузла), TVGN_PREVIOUS (отримує попередній суміжний вузол заданого рівня), TVGN_PREVIOUSVISIBLE (отримує попередній видимий вузол для даного вузла), TVGN_ROOT (отримує кореневий вузол);

lParam = хендл вузла;

Повідомлення в разі успішного виконання повертає хендл потрібного вузла або 0 в разі не успішного виконання.

TVM_GETVISIBLECOUNT – призначене для отримання кількості вузлів, які є видимими в клієнтській області.

wParam = 0; lParam = 0;

TVM_HITTEST – визначає координати певної компоненти певного вузла в представленні дерева.

wParam = 0; lParam = адреса структури LPTV_HITTESTINFO, яка містить наступні значення:

, де X,Y – координати компоненти вузла (будуть заповнені після виклику повідомлення); hItem – хендл вузла, компоненту якого треба отримати; Flag – тип компоненти, який може приймати одне з наступних значень:

TVHT_ABOVE – верхній лівий кут клієнтської області;

TVHT_BELOW – правий нижній кут клієнтської області;

TVHT_NOWHERE – в клієнтській частині, нижче останнього вузла;

TVHT_ONITEM – на малюнку, асоційованому з вузлом;

TVHT_ONITEMBUTTON – на кнопці, асоційованій з вузлом;

TVHT_ONITEMICON – на іконці, асоційованій з вузлом;

TVHT_ONITEMINDENT – на лінії, асоційованій з даним вузлом;

TVHT_ONITEMLABEL – на символьному рядку, асоційованим з даним вузлом;

TVHT_ONITEMRIGHT – справа від вузла;

TVHT_ONITEMSTATEICON – на іконці, яка відображає стан, що заданий користувачем;

TVHT_TOLEFT – справа в клієнтській частині;

TVHT_TORIGHT – зліва в клієнтській частині;

lpht – вказівник на структуру TV_HITTESTINFO. Коли надсилається це повідомлення, член pt визначає координати точки для тестування. Повідомлення вертає хендл вузла в члені hItem, або 0 в разі, якщо pt не визначає точку на дереві. Крім того, член структури flags визначає розміщення вказаної точки (див. опис структури TV_HITTESTINFO).

В регістрі EAX знаходиться хендл знайденого вузла або 0.

TVM_INSERTITEM – вставляє новий вузол в дерево.

wParam = 0; lParam = вказівник на структуру TV_INSERTSTRUCT, яка визначає параметри вузла, який треба вставити.

Функція вертає в регістрі EAX хендл нового вузла.

TVM_SELECTITEM – вибирає певний вузол на дереві. Якщо необхідно, то посуває зображення дерева до вибраного вузла та перемальовує вузли у формі, що визначена для операцій drag-and-drop.

wParam = прапорець дії, який може приймати одне з наступних значень:

TVGN_CARET – встановлює знайдений вузол вибраним;

TVGN_DROPHILITE – перемальовує даний вузол в стилі, що прийнятий для операцій drag-and-drop;

TVGN_FIRSTVISIBLE – вертикально зсуває дерево таким чином, щоб вибраний пункт був першим;

lParam = хендл вузла; Якщо це значення 0, то виділення зникає.

Функція вертає в регістрі EAX значення 1 при успішному виконанні і 0 при неуспішному.

Якщо задається значення TVGN_CARET, то батьківське вікно отримує нотиіфкаційні повідомлення TVN_SELCHANGING та TVN_SELCHANGED. Крім того, якщо заданий вузол є дочірнім вузлом згорнутого батьківського вузла, то батьківський список дочірніх вузлів розгортається для показу визначеного вузла. В цьому випадку батьківське вікно отримує нотиіфікаційні повідомлення TVN_ITEMEXPANDING та TVN_ITEMEXPANDED.

TVM_SETIMAGELIST – встановлює ImageList для дерева перегляду та перемальовує його. wParam = iImage, тип ImageList, який встановлюється; Ці типи перелічені в розділі TVM_GETIMAGELIST. lParam = himl, хендл ImageList; якщо це значення =0, всі значення зображень видаляються з дерева перегляду.

Повідомлення вертає хендл попереднього ImageList.

TVM_SETINDENT – встановлює межі для ширини вікна перегляду дерева та перемальовує його. wParam = ширина в пікселах; lParam = 0;

TVM_SETITEM – втановлює певні параметри вікна перегляду дерева. wParam = 0; lParam = вказівник на структуру TV_ITEM, яка містить параметри; В цій структурі кожний параметр, який змінюється, повинен задаватись маскою в змінній “mask”. Наприклад, прапорець TVIF_TEXT визначає, що член pszText цієї ж структури вказує на рядок, що закінчується на 0 і є назвою вузла, а член cchTextMax, що визначає максимальну довжину назви - буде ігнорований.

Якщо в mask вказано значення TVIF_STATE, то член stateMask визначає який пункт буде змінений, а член member містить само значення.

TVM_SORTCHILDREN – сортує дочірні вузли заданого батьківського вузла. wParam = 0; lParam = хендл батьківського вузла, чиї дочірні вузли повинні бути відсортовані.

TVM_SORTCHILDRENCB – сортує вузли не за алфавітним порядком, а за допомогою callback-функції, яку визначає користувач.

wParam = 0; lParam = вказівник на структуру TV_SORTCB.

Член lpfnCompare цієї структури є вказівником на callback-процедуру, яка викликається кожного разу, коли під час сортування порівнюються дві назви вузла.

Структура TV_SORTCB містить наступну інформацію.

HParent – хендл батьківського вузла;

LpfnCompare – вказівник на callback-процедуру, яка має такі (lParam1, lParam2, lParamSort); Ця функція повертає такі значення <0,>0, =0, у відповідності з результатом порівняння.

LParam – значення що надсилаються у callback-процедуру;

TVN_BEGINDRAG – нотифікаційне повідомлення повідомляє батьківське вікно, якому належить вікно для перегляду дерева про початок операції drag-and-drop, яка ініційована лівою кнопкою миші.

lParam = вказівник на структуру NM_TREEVIEW. Член itemNew структури TV_ITEM, яка містить справжню інформацію про вузол, який приймає участь в операції drag-and-drop, а також члени hItem, state та lParam. Член ptDrag визначає поточні координати миші.

Якщо вікно перегляду дерева має стиль TVS_DISABLEDRAGDROP, то воно не надсилає цього повідомлення.

TVN_BEGINLABELEDIT – надсилається у батьківське вікно (відносно вікна перегляду дерева) про те, що користувач почав редагувати надпис під вузлом. Це нотифікаційне повідомлення надсилається у формі повідомлення WM_NOTIFY.

lParam = вказівник на структуру TV_DISPINFO. Член item в ній є структурою TV_ITEM, яка містить вірну інформацію про вузол, якій зазнає редагування. В даному випадку інформацію про вузол можуть містити такі елементи структури: hItem, state, lParam, та pszText.

TVN_BEGINRDRAG – повідомляє батьківське вікно, якому належить вікно перегляду дерева про початок операції drag-and-drop, яка ініційована правою кнопкою миші. Це повідомлення надсилається у формі повідомлення WM_NOTIFY.

lParam = вказівник на структуру NM_TREEVIEW. Член itemNew є структурою TV_ITEM, яка містить вірну інформацію про drag-вузол в членах hItem, state, та lParam.

TVN_DELETEITEM – нотифікаційне повідомлення, яке надсилається у батьківське вікно про знищення вузла у вікні перегляду дерева. Це повідомлення надсилається у формі повідомлення WM_NOTIFY.

lParam = вказівник на структуру NM_TREEVIEW. Член itemOld є структурою, TV_ITEM, яка містить вірну інформацію у членах hItem та lParam про вузол, який знищується.

TVN_ENDLABELEDIT – повідомляє батьківське вікно про закінчення редагування вузла. Це повідомлення надсилається у формі повідомлення WM_NOTIFY.

lParam = вказівник на структуру TV_DISPINFO. Член item цієї структури є структурою TV_ITEM, яка містить вірну інформацію у членах hItem, lParam, та pszText про закінчення редагування назви вузла.

Якщо pszText не рівний 0, то вернути 1 при встановленні нової назви вузла, і 0 - якщо редагування припинено. Якщо pszText = 0, то значення, яке буде вернуто, ігнорується.

TVN_GETDISPINFO – нотифікаційне повідомлення вимагає у батьківського вікна забезпечити інформацію, що необхідна для відображення вузлів або їх сортування. Це повідомлення надсилається у формі повідомлення WM_NOTIFY.

lParam = вказівник на структуру TV_DISPINFO. Член item цієї структури є структурою TV_ITEM, в якій члени mask, hItem, state, та lParam визначають необхідну інформацію. Ви повинні заповнити члени цієї структури необхідною інформацією.

TVN_ITEMEXPANDED – повідомляє батьківське вікно про розкриття або закриття вузла. Це повідомлення надсилається у формі повідомлення WM_NOTIFY.

lParam = вказівник на структуру NM_TREEVIEW. Член itemNew цієї структури є структурою TV_ITEM, в якій члени hItem, state, та lParam містять вірну інформацію про батьківський вузол. Член action є індикатором того в якому стані знаходиться вузол. Допустимі значення, що пов’язані з цим повідомленням, описані в повідомленні TVM_EXPAND.

TVN_ITEMEXPANDING – вказує на те, що вузол повинен розкритися а закритися. Надсилається у формі WM_NOTIFY.

lParam = вказівник на структуру NM_TREEVIEW. Член itemNew цієї структури є структурою TV_ITEM, в якій члени hItem, state, та lParam містять вірну інформацію про батьківський вузол. Член action ідентифікує чи відкритий вузол.

Повернути в EAX = 1, якщо розгортання або згортання не потрібно.

TVN_KEYDOWN – повідомлення надходить до власника вікна перегляду дерева коли користувач натиснув клавіатуру коли вікно перегляду дерева має фокус вводу. Це повідомлення надсилається у формі повідомлення WM_NOTIFY.

lParam = вказівник на структуру TV_KEYDOWN. Член wVKey цієї структури містить код віртуальної клавіші.

TVN_SELCHANGED - повідомлення надходить до власника вікна перегляду дерева коли користувач вибрав інший вузол. Це повідомлення надсилається у формі повідомлення WM_NOTIFY.

lParam = вказівник на структуру NM_TREEVIEW. Члени itemOld та itemNew цієї структури є підструктурами TV_ITEM, які містять інформацію про попередній та наступний вибраний вузол. В цих структурах вірними є змінні mask, hItem, state, та lParam.

Член action структури NM_TREEVIEW відображає тип дії, яка привела до вибору вузла. Ця змінна може приймати одне з наступних значень:

TVC_BYKEYBOARD – натисненням на клавіатуру;

TVC_BYMOUSE – натисненням на кнопку миші;

TVC_UNKNOWN – в результаті інших причин.

TVN_SELCHANGING - повідомлення надходить до власника вікна перегляду дерева коли вибір вузла буде змінюватися. Це повідомлення надсилається у формі повідомлення WM_NOTIFY.

lParam = вказівник на структуру NM_TREEVIEW. Члени itemOld та itemNew цієї структури є підструктурами TV_ITEM, які містять інформацію про попередній та наступний вибраний вузол. В цих структурах вірними є змінні mask, hItem, state, та lParam.

Член action структури NM_TREEVIEW відображає тип дії, яка привела до вибору вузла.

Повідомлення повертає 1 для заборони вибору.

TVN_SETDISPINFO - повідомлення надходить до батьківського вікна перегляду дерева для того, щоб воно обновило інформацію про вузли. Це повідомлення надсилається у формі повідомлення WM_NOTIFY.

lParam = вказівник на структуру TV_DISPINFO. Член item цієї структури є підструктурою TV_ITEM, яка містить вірні значення в змінних hItem та lParam.

Система надсилає це нотифікаційне повідомлення коли користувач щойно закінчив редагувати назву вузла, текст якого замовлявся у LPSTR_TEXTCALLBACK. Це повідомлення дає можливість запам’ятати новий текст.

СТИЛІ вікон SysTreeView32

Є кілька стилів властивих тільки SysTreeVieew32. От найбільше часто використовувані:

* TVS_HASBUTTONS - відображає кнопки плюс (+) і мінус (-) перед батьківським пунктом. Користувач тисне по кнопках, щоб відкрити чи закрити список дочірніх вузлів. Щоб уставити кнопки з пунктами в корінь SysTreeVieew32, також повинний бути зазначений стиль TVS_LINESATROOT.

* TVS_HASLINES – стиль використовуються для показу лінії ієрархії пунктів.

* TVS_LINESATROOT – стиль використовуються, щоб зв'язати лінії до пунктів в корені контрола. Цей стиль ігнорується, якщо не зазначений стиль TVS_HASLINES.

Коли з контролом відбувається що-небудь цікаве, він посилає повідомлення WM_NOTIFY батьківському вікну разом із додатковою інформацією.

* wраrам - ID контрола, але те, що воно буде унікальним не гарантується.

* lраrам - вказівник на структуру NMHDR.

Змінна hwndFrom - це хендл вікна контрола, що послав це повідомлення.

code - це код повідомлення, яке контрол надсилає батьківському вікну.

Додавання пунктів у SysTreeVieew32

Після того, як ви створюєте контрол SysTreeVieew32, ви можете додати в нього пункти. Ви можете зробити це, пославши контролу повідомлення TVM_INSERTITEM.

Встановимо термінологію, що стосується взаємин між вузлами в SysTreeVieew32.

Вузол може бути батьківським, дочірнім чи тим і іншим одночасно. Батьківський вузол - це такий вузол, з яким асоційовані дочірні вузли. В той же час, батьківський вузол може бути дочірнім стосовно іншого. Вузол, у якого немає батька, називається коренем (root). У SysTreeVieew32 може бути багато кореневих вузлів.

Тепер проаналізуємо структуру TV_INSERTSTRUCT, яка використовується у повідомленні TVM_INSERTITEM:

Структура TV_INSERTSTRUCT:

hParent – хендл батьківського вузла. Якщо ця змінна = 0, то вузол буде вставлений в корінь дерева.

HInsertAfter – метод вставки вузла, може приймати одне з наступних значень: TVI_FIRST (вставка елемента в початок списку), TVI_LAST (вставка елемента в кінець списку) або TVI_SORT (вставка елемента в список відповідно до алфавітного порядку).

Підструктура TV_ITEM:

Imask - маска, яка вказує, які з наступних елементів структури містить вірне значення. Ця маска складається з диз’юнкції прапорців: TVIF_SELECTEDIMAGE, TVIF_CHILDREN, TVIF_HANDLE, TVIF_IMAGE, TVIF_PARAM, VIF_SELECTEDIMAGE, TVIF_STATE, TVIF_TEXT.

HItem – Визначає вузол, до якого відноситься ця структура.

state – Визначає поточний стан вузла.

stateMask – Визначає маску справжніх значень в цій підструктурі.

PszText – вказівник на рядок, що містить назву вузла.

TextMax - Розмір буферу, адреса якого вказана у pszText. Використовується тільки тоді, коли ви хочете отримати назву елемента. Для правильного заповнення області PszText необхідно знати її розмір.

iImage - індекс малюнка в блоці малюнків ImageList, який відповідає не вибраному стану.

iSelectedImage - індекс малюнка в блоці малюнків ImageList, який відповідає вибраному стану.

cChildren - Прапорець, який показує, чи вузол має дочірні вузли. Нуль означає, що вузол не має дочірніх вузлів, а 1 – даний вузол має дочірні вузли, 0ffffffffh – вузол надсилає у батьківське вікно повідомлення TVN_GETDISPINFO для визначення того, чи має даний вузол дочірні вузли.

LParam – ідентифікатор вузла

Підструктура TV_ITEM використовується для відсилання й одержання інформації про елемент SysTreeVieew32 в залежності від повідомлень. Кожен вузол має унікальний хендл (HItem). За допомогою повідомлення TVM_GETITEM, можна заповнити вміст цієї структури для довільного вузла SysTreeVieew32, знаючи лише його хендл.

Щоб вставити елемент у SysTreeVieew32, ви повинні заповнити, принаймні, hparent, hInsertAfter, а також вам належить заповнити imask і pszText.

Додавання зображень у SysTreeVieew32

Даний тип вікон використовує поняття ImageList. Іншими словами, ImageList – це набір зображень типу BITMAP, кожне з яких має свій індекс. Всі зображення в ImageList склеєні в один BITMAP горизонтально, одне до одного.

Якщо ви хочете помістити зображення ліворуч від назви елемента, вам належить створити image list і асоціювати його з контролом SysTreeVieew32:

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]