1

我有一个 Win32 TreeCtrl,用户可以在其中重命名树标签。我处理 TVN_ENDLABELEDIT 消息来执行此操作。

在某些情况下,我需要更改用户输入的文本。基本上用户可以在编辑过程中输入一个短名称,我想用更长的文本替换它。

为此,我更改了在 TVN_ENDLABELEDIT 期间收到的 TVITEM 结构的 pszText 成员。我在这里做了一个指针替换,因为原始内存可能太小而无法进行简单的类似 strcpy 的操作。

但是我不知道如何释放原始 pszText 成员。基本上是因为不知道它是用 malloc() 还是 new 创建的……所以我不能调用适当的释放器。显然 Win32 不会为旧的 pszText 调用释放器,因为指针已被替换。所以如果我不解除分配,就会有内存泄漏。

知道 Win32 如何分配这些结构以及处理上述情况的正确方法是什么?

4

2 回答 2

2

除非您使用LPSTR_TEXTCALLBACK,否则树视图控件负责分配内存,而不是您的代码,因此您不应更改pszText指针的值。

要在处理程序中更改项目的文本TVN_ENDLABELEDIT,您可以使用TreeView_SetItem,然后从处理程序返回 0。

于 2008-09-19T10:57:40.163 回答
0

您不想直接编辑 TVITEM 结构中的文本,结果未定义。而是使用 TVM_SETITEM 消息,或者等效地使用 windowsx.h 中定义的 TreeView_SetItem() 宏。

于 2008-09-19T20:27:31.237 回答