我正在尝试将LVN_ ITEMCHANGED发布到我的自定义gridlist的所有者.我知道如何使用PostMessage发送WM_用户消息(如此处所示)
::PostMessage( AfxGetMainWnd()->GetSafeHwnd(), WM_REFRESH, (WPARAM)pBuffer, (LPARAM)GetOutputIdx() );
当我使用相同的代码发送LVN_ITEMCHANGED消息时,
::PostMessage( AfxGetMainWnd()->GetSafeHwnd(), LVN_ITEMCHANGED, 0, 0);
它似乎没有被抓住
ON_NOTIFY(LVN_ITEMCHANGED, ..., ...)
我在业主班.
使用:: PostMessage发送Notify事件我错了吗?
Notify消息和WM_前缀消息之间是否有区别或者它们是如何处理的?
有人可以发布一个如何正确发送消息的样本吗?
提前致谢.
编辑
我找到了问题的另一种解决方案.请参阅下面的答案.
解决方法:
发送WM_NOTIFY,将控制ID作为wParam传递,将NMHDR *作为lParam传递.
您需要分配一个NMHDR变量并适当填充它 – 将代码设置为LVN_ITEMCHANGED,将idFrom设置为控件ID.您只能使用SendMessage()而不是PostMessage(),因为接收方将通过NMHDR *指针直接读取内存.
像这样的Smth:
NMHDR nmhdr;
nmhdr.code = LVN_ITEMCHANGED;
nmhdr.idFrom = controlId;
nmhdr.hwndFrom = controlWindowHandle;
SendMessage( targetWindowHandle, WM_NOTIFY, controlId, &nmhdr );