gpt4 book ai didi

无法使用互斥复选框实现 TreeView

转载 作者:行者123 更新时间:2023-12-05 03:14:03 33 4
gpt4 key购买 nike

我需要实现具有以下行为的 TreeView :

当用户选中一个项目时,之前选中的项目将被取消选中。我的母语不是英语,但我知道这种行为称为互斥复选框

我找到了 TVS_EX_EXCLUSIONCHECKBOXES extended style这似乎符合我的需要,但我无法成功使用它。

我正在使用 SetWindowLongPtr 正确设置 TVS_CHECKBOXES 样式,而不是像 MSDN 推荐的那样简单地将它传递给 CreateWindowEx。然后我使用 GetWindowLongPtrSetWindowLongPtr 添加我上面提到的扩展样式。代码编译但运行时就好像我从未添加过扩展样式一样。

  • 我已链接 commctrl 库并启用视觉样式;
  • 我已经初始化了公共(public)控件;

下面是 WM_CREATE 处理程序。

case WM_CREATE:
{
HWND hwndTV = CreateWindowEx(0, WC_TREEVIEW, L"tv",
WS_CHILD | WS_VISIBLE | WS_BORDER |
TVS_FULLROWSELECT | TVS_HASBUTTONS | TVS_HASLINES | TVS_LINESATROOT,
50, 50, 150, 250, hWnd, (HMENU)4000, hInst, 0);

// add checkbox

DWORD dwStyle = GetWindowLongPtr(hwndTV, GWL_STYLE),
dwExStyle = GetWindowLongPtr(hwndTV, GWL_EXSTYLE);

dwStyle |= TVS_CHECKBOXES;
dwExStyle |= TVS_EX_EXCLUSIONCHECKBOXES;

SetWindowLongPtr(hwndTV, GWL_STYLE, dwStyle);
SetWindowLongPtr(hwndTV, GWL_EXSTYLE, dwExStyle);

TVINSERTSTRUCT tvis = { 0 };

tvis.item.mask = TVIF_TEXT;
tvis.item.pszText = L"ROOT ITEM 1";
HTREEITEM root1 = TreeView_InsertItem(hwndTV, &tvis);

tvis.item.mask = TVIF_TEXT;
tvis.item.pszText = L"ROOT ITEM 2";
HTREEITEM root2 = TreeView_InsertItem(hwndTV, &tvis);

tvis.item.mask = TVIF_TEXT;
tvis.item.pszText = L"First child";
tvis.hParent = root1;
tvis.hInsertAfter = TVI_FIRST;
HTREEITEM child1 = TreeView_InsertItem(hwndTV, &tvis);
}

问题:

我是否误解了 TVS_EX_EXCLUSIONCHECKBOXES 的文档?

  • 如果不是,那么我的代码应该如何修改才能像我之前描述的那样运行?
  • 如果是,请告诉我。

最佳答案

TVS_EX_xxx 样式不是“扩展窗口样式”,而是“扩展 TreeView 样式”。它们只能使用 TVM_SETEXTENDEDSTYLE 设置消息。

TreeView_SetExtendedStyle(hwndTV,
TVS_EX_EXCLUSIONCHECKBOXES, TVS_EX_EXCLUSIONCHECKBOXES);

关于无法使用互斥复选框实现 TreeView ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27553008/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com