使用C中的通用控件创建简单的树状视图

问题描述 投票:0回答:1

因此,我试图使用Win32 API和CommnoControls创建一个简单的树形视图。我创建了一个简单的窗口,并在其WM_CREATE事件中执行了以下操作:

HWND treeView = CreateWindowA(WC_TREEVIEWA, NULL, WS_VISIBLE | WS_CHILD, 10, 10,
        200, 500, window->info, (HMENU)1, GetModuleHandleA(NULL), NULL);

TVITEMA item = {0};
item.pszText = "My Item";

TVINSERTSTRUCTA insertStruct = {0};
insertStruct.hParent = NULL;
insertStruct.hInsertAfter = TVI_LAST;
insertStruct.item = item;
SendMessageA(treeView, TVM_INSERTITEMA, 0, &insertStruct);

树视图确实出现在窗口上,但是项目(我的项目)没有出现在窗口中。

我还需要做其他事情才能使其显示吗?也许初始化其他东西?我试图查看CommonControl的文档,但没有找到其他可以使用的东西...我在这里错了吗?

c winapi treeview common-controls
1个回答
0
投票

Windows不知道您为项目提供了文本,因为您没有在项目掩码成员中包含TVIF_TEXT

HWND treeView = CreateWindowA(WC_TREEVIEWA, NULL, WS_VISIBLE | WS_CHILD | TVS_HASBUTTONS | TVS_HASLINES | TVS_LINESATROOT, 10, 10,
        200, 500, window->info, (HMENU)1, GetModuleHandleA(NULL), NULL);


HTREEITEM hItem;
TVINSERTSTRUCTA insertStruct = {0};
TVITEMA*pItem = &insertStruct.item;
insertStruct.hParent = NULL;
insertStruct.hInsertAfter = TVI_ROOT;

pItem->mask = TVIF_TEXT;
pItem->pszText = "My Item";
hItem = (HTREEITEM) SendMessageA(treeView, TVM_INSERTITEMA, 0, (LPARAM) &insertStruct);

if (hItem)
{
    insertStruct.hParent = hItem;
    pItem->pszText = "A Child";
    hItem = (HTREEITEM) SendMessageA(treeView, TVM_INSERTITEMA, 0, (LPARAM) &insertStruct);
    if (hItem) SendMessage(treeView, TVM_ENSUREVISIBLE, 0, (LPARAM) hItem);
}

使用线条和按钮TVS_ *样式控制项目的显示方式。

© www.soinside.com 2019 - 2024. All rights reserved.