繁体   English   中英

Win32:使用cchTextMax在树视图中设置文本长度

[英]Win32: Set text length in Tree View with cchTextMax

是否可以定义将在Win32应用程序的“树形视图”控件的节点中显示的文本长度?

例如,我们有字符串“ text | 2”。 然后,我想将指向此字符串的指针存储在节点中,但仅显示“ text”而不显示“ | 2”。

我以为cchTextMax字段对此负责,但是下一个代码将不起作用:

TV_INSERTSTRUCT tvinsert;
tvinsert.item.mask = TVIF_TEXT;
tvinsert.item.pszText = "text|2";
tvinsert.item.cchTextMax= 4;
SendDlgItemMessage(hDlg,IDD_TREE,TVM_INSERTITEM,0,(LPARAM)&tvinsert);

节点strill显示全文“ text | 2”。

一种解决方案是将所需的文本复制到新的指针,然后使用它。 但是这个解决方案令我不满意,因为我也需要将字符串的最后一部分与节点一起存储。

这是来自TVITEM的 MSDN文档:

cchTextMax
pszText成员指向的缓冲区大小,以字符为单位。 如果此结构用于设置项目属性,则将忽略此成员。

因此,该成员仅在检索 items属性时有效,而在设置时被忽略 (如在向树视图控件中添加新项目时)。 将必需的文本复制到新的指针,然后使用的另一种解决方案是一个选项。

C中的字符串是以null终止的char数组,也就是说,Windows将显示直到遇到的第一个'\\ 0'的所有char,无法指定长度。 为了做您想要的,您必须创建一个新的字符串:

const char *s = "text|2";
const char str_to_display[5] = {'\0'};
strncpy(str_to_display, s, 4);

我会扩展fluter的答案,并在分隔符'\\0'右边插入'\\0' 此方法的典型用法是多字符串,其中您具有一组以0终止的字符串,并以双'\\0'终止。

作为附带的好处,您可以使用strtok()来解析您的字符串。 它的效果(有时是不希望的)是插入零代替分隔符。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM