TreeView_SetExtendedStyle不适用某些样式,我做错了什么?

时间:2015-07-18 05:53:38

标签: c++ c winapi treeview

我想"玩耍"使用new extended styles,尤其是那些使用复选框操作的内容。

问题在于它们似乎都不起作用。

我无法确定TVS_EX_DOUBLEBUFFER是否有效,因为我的树视图很小。我还没有测试TVS_EX_RICHTOOLTIP。除此之外,无论我设定的其他风格如何,我都看不到任何效果。

以下是相关摘录:

HWND hwndTV = CreateWindowEx(...);
// first, add checkboxes
DWORD dwStyle = GetWindowLong(hwndTV, GWL_STYLE);
dwStyle |= TVS_CHECKBOXES;
SetWindowLongPtr(hwndTV, GWL_STYLE, dwStyle);
// now add extended window styles
HRESULT h = TreeView_SetExtendedStyle(hwndTV, 
    TVS_EX_PARTIALCHECKBOXES, TVS_EX_PARTIALCHECKBOXES);
// insert items...

我已经检查了TreeView_SetExtendedStyle macro的返回值并且没有失败,这进一步增加了我的挫败感。

问题:

您能告诉我如何正确应用扩展样式吗?例如,如何正确设置TVS_EX_PARTIALCHECKBOXES或其他?

谢谢。

1 个答案:

答案 0 :(得分:4)

您设置样式的方式没有任何问题 -

/ p>

您需要在设置TVS_EX_PARTIALCHECKBOXES之前设置TVS_CHECKBOXES扩展样式 。这是因为设置TVS_CHECKBOXES会触发为树视图创建状态图像列表,并且此图像列表仅包含"部分"如果在创建部分样式时设置了部分样式,则显示图像。如果稍后设置TVS_EX_PARTIALCHECKBOXES,则不会自动重新创建图像列表。

此外,如果您要使用部分复选框样式,则无法在TVS_CHECKBOXES的调用中指定CreateWindowEx,因为无法设置TVS_EX_PARTIALCHECKBOXES直到控件被创建。