Win32 TreeCtrl TVN_ENDLABELEDIT内存分配

时间:2020-03-06 14:25:28  来源:igfitidea点击:

我有一个Win32 TreeCtrl,用户可以在其中重命名树标签。我要处理TVN_ENDLABELEDIT消息。

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

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

但是我不知道如何释放原始的pszText成员。基本上是因为它是用malloc()还是new创建的,所以不知道。显然,Win32不会为旧的pszText调用取消分配器,因为指针已被替换。因此,如果我不取消分配,将发生内存泄漏。

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

解决方案

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

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

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