Win32 TreeCtrl TVN_ENDLABELEDIT内存分配

时间:2008-09-19 10:47:33

标签: winapi treecontrol

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

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

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

但是我不知道如何解除分配原始的pszText成员。基本上是因为不知道是用malloc()还是new创建的...因此我无法调用适当的解除分配器。显然,Win32不会为旧的pszText调用deallocator,因为指针已被替换。因此,如果我不解除分配,就会出现内存泄漏。

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

2 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:0)

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