我正在尝试以编程方式向我的窗口发送一条消息,以通知它我的单个选择树中的选择更改:
void SelectionChangingEvent()
{
CWnd* mainwindow = AfxGetMainWnd();
NMHDR hdr;
hdr.hwndFrom = mainwindow->GetSafeHwnd();
hdr.idFrom = IDC_TREEVIEW;
hdr.code = LVN_ITEMCHANGING;
mainwindow->SendMessage(WM_NOTIFY, (WPARAM)IDC_TREEVIEW, (LPARAM)&hdr);
}
消息映射是在视图中完成的:
BEGIN_MESSAGE_MAP(CMainView, CFormView)
/*...*/
ON_NOTIFY(TVN_SELCHANGING, IDC_TREEVIEW, OnSelChangingTree)
/*...*/
END_MESSAGE_MAP()
发送消息时,
OnSelChangingTree()
功能不会被触发。我在这里做错了什么?
我使用
hdr.code = LVN_ITEMCHANGED;
实现了类似的用于选择树项目的消息,它在 TVN_SELCHANGED
映射函数中正确运行。
错误可能是这样的:
hdr.hwndFrom = mainwindow->GetSafeHwnd();
hwndFrom
是消息来自的窗口的句柄,而不是应该接收消息的窗口的句柄。根据NMHDR
参考
所以应该是树形视图控件的类型:
hwndFrom
发送消息的控件的窗口句柄。
HWND
HWND
。
hdr.code = LVN_ITEMCHANGING;
与
ON_NOTIFY(TVN_SELCHANGING, IDC_TREEVIEW, OnSelChangingTree)
它是树视图控件(如TVN_SELCHANGING
所示)还是列表视图控件(如
LVN_ITEMCHANGING
所示)?事实上,这似乎比窗口句柄不匹配更有可能是罪魁祸首。