在 C 中使用公共控件创建一个简单的树视图
Creating a simple tree view using Common Controls in C
所以我尝试使用 Win32 API 和 CommnoControls 创建一个简单的树视图。
我创建了一个简单的 window,并且在其 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);
树视图确实出现在 window 上,但是项目(我的项目)没有出现在其中。
我还需要做什么才能让它出现吗?也许初始化别的东西?
我试图查看 CommonControl 的文档,但我没有找到任何其他有用的东西......
我在这里做错了什么?
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_* 样式来控制项目的显示方式。
所以我尝试使用 Win32 API 和 CommnoControls 创建一个简单的树视图。 我创建了一个简单的 window,并且在其 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);
树视图确实出现在 window 上,但是项目(我的项目)没有出现在其中。
我还需要做什么才能让它出现吗?也许初始化别的东西? 我试图查看 CommonControl 的文档,但我没有找到任何其他有用的东西...... 我在这里做错了什么?
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_* 样式来控制项目的显示方式。