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);
节点字符串显示全文"text|2"。
一种解决方案是将所需文本复制到新指针,然后使用它。但是这个解决方案并不令我满意,因为我也需要用节点存储字符串的最后一部分。
这里来自 TVITEM 的 MSDN 文档:
cchTextMax
Size of the buffer pointed to by the pszText member, in
characters. If this structure is being used to set item attributes,
this member is ignored.
因此该成员仅在您检索 项目属性时有效,而在您设置 时忽略它(如添加树视图控件的新项目)。将所需文本复制到新指针然后使用的另一种解决方案是一种选择。
C 中的字符串是空终止的字符数组,也就是说,Windows 将显示直到它遇到的第一个 '\0' 之前的任何字符,无法指定长度。
为了做你想做的事,你必须创建一个新的字符串:
const char *s = "text|2";
const char str_to_display[5] = {'[=10=]'};
strncpy(str_to_display, s, 4);
我会扩展 flutter 的答案,并在分隔符的位置插入 '[=10=]'
。这个的典型用途是多字符串,其中有一组以 0 结尾的字符串,以双 '[=10=]'
.
结尾
作为附带好处,您可以使用 strtok()
来解析您的字符串;它的(有时是不希望的)效果是插入零来代替分隔符。
是否可以定义在 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);
节点字符串显示全文"text|2"。
一种解决方案是将所需文本复制到新指针,然后使用它。但是这个解决方案并不令我满意,因为我也需要用节点存储字符串的最后一部分。
这里来自 TVITEM 的 MSDN 文档:
cchTextMax
Size of the buffer pointed to by the pszText member, in characters. If this structure is being used to set item attributes, this member is ignored.
因此该成员仅在您检索 项目属性时有效,而在您设置 时忽略它(如添加树视图控件的新项目)。将所需文本复制到新指针然后使用的另一种解决方案是一种选择。
C 中的字符串是空终止的字符数组,也就是说,Windows 将显示直到它遇到的第一个 '\0' 之前的任何字符,无法指定长度。 为了做你想做的事,你必须创建一个新的字符串:
const char *s = "text|2";
const char str_to_display[5] = {'[=10=]'};
strncpy(str_to_display, s, 4);
我会扩展 flutter 的答案,并在分隔符的位置插入 '[=10=]'
。这个的典型用途是多字符串,其中有一组以 0 结尾的字符串,以双 '[=10=]'
.
作为附带好处,您可以使用 strtok()
来解析您的字符串;它的(有时是不希望的)效果是插入零来代替分隔符。