2011-10-28 25 views
0

所以这里是我的问题,我有一个CtrlList,我想通过PostMessage(asyncron)插入项目,因此消息LVM_INSERT_MESSAGE,将在他轮到时处理,但是问题是我需要为LVITEM分配内存,以便在插入项目之前不会松动它。但是在我退出函数之后,我松开指向分配项目的指针后。由于插入项目创建另一个项目,我发现很难取消分配我为LVITEM分配的内存。CtrlList通过postmessage处理通知

我的解决办法,因为LVM_INSERT_MESSAGE发送LVN_INSERT_MESSAGE通知,在该通知调用一个函数,但要获得LVITEM的唯一途径是抛出一个LPARAM,但有ON_NOTIFY(NMHDR *pNMHDR, LRESULT *pResult)参数。你可以给我一个解除分配内存的解决方案,我必须插入postmessage,不要告诉我使用发送消息或函数insertitem。谢谢。

回答

0

将自定义消息发布到其他窗口,并在其处理程序中添加该项目然后释放内存。

如果列表控件已经被子类化,则不需要其他窗口,并且可以将消息直接发送到控件。

+0

谢谢,这是另一个想法,但我把分配的内存指针放入LVITEM结构的lParam变量中,并且在处理完LVN_INSERTITEM消息之后,它会发送一个通知,我通过将最后一个插入项目的lParam变量并释放存储在那里的内存指针。 –