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()宏。