LVCOLUMN.cchTextMax 和 LVITEM.cchTextMax 的目的是什么?

What is the purpose of LVCOLUMN.cchTextMax and LVITEM.cchTextMax?

我尝试将LVCOLUMN.cchTextMaxLVITEM.cchTextMax的值设置为一个随机值(小于相应的字符串长度)并且成功了,是错误的还是这些字段不是有必要设置吗?

我也看到过不使用这些字段的例子,例如:http://www.codeproject.com/Articles/9148/C-functions-to-insert-columns-items-and-subitems-i

LVITEM structure 的文档对 cchTextMax 成员有以下说明:

This member is only used when the structure receives item attributes. It is ignored when the structure specifies item attributes. For example, cchTextMax is ignored during LVM_SETITEM and LVM_INSERTITEM. It is read-only during LVN_GETDISPINFO and other LVN_ notifications.

除非您使用此结构检索项目信息,否则此成员将被忽略。接收数据时,您必须将指向缓冲区的指针传递给 pszText,并通过 cchTextMax 成员传达其大小。

这是整个 Windows API 中的通用模式,其中使用相同的结构来设置和查询值。各个成员的语义取决于方向。例如,以类似方式使用的其他常见结构包括 TVITEM or MENUITEMINFO