使用WindowsAPI,创建SysTreeView32控件:
#include <windows.h>
#include <commctrl.h>
#pragma comment(lib, "comctl32.lib")
#define ID_TREEVIEW 101
HWND hwndTreeView;
HTREEITEM InsertTreeViewItem(HWND hwndTV, LPCWSTR text, HTREEITEM hParent = TVI_ROOT, HTREEITEM hInsertAfter = TVI_LAST)
{
TVINSERTSTRUCT tvis = {};
tvis.hParent = hParent;
tvis.hInsertAfter = hInsertAfter;
tvis.item.mask = TVIF_TEXT | TVIF_IMAGE | TVIF_SELECTEDIMAGE;
tvis.item.pszText = (LPWSTR)text;
// 添加节点到树视图
return (HTREEITEM)SendMessage(hwndTV, TVM_INSERTITEM, 0, reinterpret_cast<LPARAM>(&tvis));
}
LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
switch (uMsg)
{
case WM_CREATE:
{
// 创建树视图控件
hwndTreeView = CreateWindowEx(0, WC_TREEVIEW, NULL,
WS_VISIBLE | WS_CHILD | WS_BORDER | TVS_HASLINES | TVS_LINESATROOT | TVS_HASBUTTONS,
10, 10, 300, 400, hwnd, (HMENU)ID_TREEVIEW, NULL, NULL);
// 插入树节点,添加根节点
HTREEITEM hRoot = InsertTreeViewItem(hwndTreeView, L"Root Node");
HTREEITEM hChild1 = InsertTreeViewItem(hwndTreeView, L"Child Node 1", hRoot);
HTREEITEM hChild2 = InsertTreeViewItem(hwndTreeView, L"Child Node 2", hRoot);
break;
}
case WM_NOTIFY:
{
LPNMHDR lpnmh = (LPNMHDR)lParam;
if (lpnmh->hwndFrom == hwndTreeView && lpnmh->code == TVN_SELCHANGED)
{
LPNMTREEVIEW pnmtv = (LPNMTREEVIEW)lParam;
wchar_t buf[256];
TVITEM tvi;
tvi.mask = TVIF_TEXT;
tvi.hItem = pnmtv->itemNew.hItem;
tvi.pszText = buf;
tvi.cchTextMax = 256;
if (TreeView_GetItem(hwndTreeView, &tvi))
{
//MessageBox(hwnd, tvi.pszText, L"Selected Node", MB_OK);
}
}
return 0;
}
case WM_DESTROY:
PostQuitMessage(0);
break;
default:
return DefWindowProc(hwnd, uMsg, wParam, lParam);
}
return 0;
}
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
// 初始化Common Controls
INITCOMMONCONTROLSEX icex;
icex.dwSize = sizeof(icex);
icex.dwICC = ICC_TREEVIEW_CLASSES;
InitCommonControlsEx(&icex);
// 创建窗口类
WNDCLASS wc = {};
wc.lpfnWndProc = WindowProc;
wc.hInstance = hInstance;
wc.lpszClassName = L"TreeViewExample";
RegisterClass(&wc);
// 创建窗口
HWND hwnd = CreateWindowEx(0, L"TreeViewExample", L"TreeView Example",
WS_OVERLAPPEDWINDOW | WS_VISIBLE,
CW_USEDEFAULT, CW_USEDEFAULT, 400, 450,
NULL, NULL, hInstance, NULL);
// 消息循环
MSG msg;
while (GetMessage(&msg, NULL, 0, 0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return 0;
}
效果图:

没有回复内容