c – 如何发送由ON_NOTIFY处理的通知?

我正在尝试将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 );
上一篇:JS-观察者模式


下一篇:自定义linux系统日志格式(messages,cron,ssh等日志格式)