TCEXITEM - структура применяемая для обмена данными о ячейке

typedef struct TCEXITEM
{
    char mask;
    void* hItem;
    size_t SubItem;
    short state;
    char stateMask;
    char *pText;
    int cchTextMax;
    size_t ImgCl;
    size_t ImgOpn;
    size_t nChildrens;
    long lParam;
} *PTCEXITEM;
typedef struct TCEXITEMW
{
    char mask;
    void* hItem;
    size_t SubItem;
    short state;
    char stateMask;
    wchar_t *pText;
    int cchTextMax;
    size_t ImgCl;
    size_t ImgOpn;
    size_t nChildrens;
    long lParam;
} *PTCEXITEMW;

Структура TCEXITEMW применяется для удобного обмена данными с контролом, работающем в режиме UNICODE. Бинарно совместима с TCEXITEM.

mask
маска, указывающая данные каких полей структуры действительны. Может принимать одно или комбинацию следующих значений:
TVIF_TEXT обработка текста. поле pText должно содержать указатель на буфер-приёмник или строку текста, cchTextMax - размер этого буфера в байтах
TVIF_IMAGE
обработка номера отображаемого значка для свёрнутого элемента (ClImg)
TVIF_PARAM
обработка значения поля lParam
TVIF_STATE обработка состояния поля state, stateMask указывает маску для выбора нужных бит
TVIF_HANDLE
НЕ ИСПОЛЬЗУЕТСЯ (всегда обрабатывается) обработка значений полей hItem и SubItem
TVIF_SELECTEDIMAGE обработка номера отображаемого значка для развёрнутого элемента (OpnImg)
TVIF_CHILDREN извлечение поля nChildrens - наличие дочерних элементов (получает число дочерних первой близости)
hItem Указатель элемента, которому соответствует структура или для которого заполняется структура
SubItem № субэлемента текущего элемента (№ столбца). В некоторых случаях может принимать значение -1 для извлечения/установки данных не относящихся к конкретному столбцу

Три описанных выше поля всегда должны инициализироваться и заполняться вызывающей программой!
state Состояние элемента (строки). Всего или конкретной ячейки в зависимости от значения SubItem
stateMask Маска, отображает какие биты поля state действительны или требуют заполнения, имея в соответствующих позициях единичные значения.
Поля state и stateMask могут принимать одно или комбинацию следующих значений:
TVIS_SELECTED
Элемент выделен. Стоит заметить что элемент под курсором НЕ меняет значения своего state! т. е. не становится выделенным
TVIS_EXPANDED
Указывает что элемент развёрнут, сопоставленные ему дочерние элементы видны
TVIS_CHECK Указывает что чекбокс элемента помечен
pText Указатель на буфер со строкой текста или приёмник для получения строки. Данная строка отображается как текст в ячейке.
cchTextMax Указывает размер (байт) буфера pText или передаваемой строки. Стоит заметить что хотя контролу и нет разницы завершается нулём строка или нет но последний символ(исходя из размера) строки не выводится на экран, в соответствии с этим видимая часть строки должна завершаться одним для ANSI или двумя для UNICODE дополнительными байтами.
ImgCl
Номер значка в имэйджлисте для "закрытого" элемента
ImgOpn Номер значка в имэйджлисте для "открытого" элемента
Стоит отметить что как и поля ImgOpn и ImgCl могут принимать значение -1 как указатель на принудительное выключение отображения значка. Если имэйджлист пользовательских значков не установлен значения этих полей не играют роли.
nChildrens Число дочерних элементов первой близости этого элемента
lParam 32битное поле для пользовательских данных

Согласно организации устройства контрола значения pText (и cchTextMax), lParam и бит TVIS_SELECTED поля state уникальны для каждой ячейки (значения SubItem).

Структура используется: TXM_GETITEM   TXM_SETITEM   TXM_GETSELPOS   TVN_DELETEITEM   TVN_ITEMEXPANDED

Заголовок: TCEXclass.h