mfc,基于对话框的,我有两个对话框类,CWinpcapDlg(mfc生成的),CSettingDlg(我另外创建的),CWinpcapDlg对话框上有一个CListCtrl控件,我想把单击控件上某一行的消息发送到CSettingDlg上,调用CSettingDlg里的消息响应函数处理。
我是这么做的:
void CWinpcapDlg::OnClickList1(NMHDR* pNMHDR, LRESULT* pResult)
{
::PostMessage(m_temphwnd, NM_CLICK, 0, 0);
*pResult = 0;
}
CSettingDlg中自己定义消息响应函数:
头文件中:afx_msg void OnListClickMsg();
源文件中:ON_MESSAGE(NM_CLICK, OnListClickMsg)(位置正确)void CSettingDlg::OnListClickMsg()
{
MessageBox("收到消息了");}可是没有对话框出现,也就是没有调用这样一个消息响应函数,请问是什么原因,非常感谢!!!!
我是这么做的:
void CWinpcapDlg::OnClickList1(NMHDR* pNMHDR, LRESULT* pResult)
{
::PostMessage(m_temphwnd, NM_CLICK, 0, 0);
*pResult = 0;
}
CSettingDlg中自己定义消息响应函数:
头文件中:afx_msg void OnListClickMsg();
源文件中:ON_MESSAGE(NM_CLICK, OnListClickMsg)(位置正确)void CSettingDlg::OnListClickMsg()
{
MessageBox("收到消息了");}可是没有对话框出现,也就是没有调用这样一个消息响应函数,请问是什么原因,非常感谢!!!!
PostMessage(m_temphwnd, NM_CLICK, 0, 0);
检查m_temphwnd的有效性,是否为CSettingDlg的有效句柄
NM_CLICK消息根本不是这么发的,这个看看MSDN就知道他根本不是一个消息,而必须用WM_NOTIFY发送,是WM_NOTIFY的一个子消息。另外不是所有东西都可以用PostMessage的,WM_NOTIFY就应该用SendMessage,绝大多数系统消息都如此
合理的发送方法是:::SendMessage(m_temphwnd, WM_NOTIFY, (WPARAM)IDC_LISTVIEW, (LPARAM)&nhm );
其中IDC_LISTVIEW是你对应对话框内的控件的对应的ID,nhm是一个 NMHDR 结构NMHDR nhm;
nhm.code=NM_CLICK;
nhm.idFrom=IDC_LISTVIEW;
nhm.hwndFrom=listview.m_hWnd;这个消息基本上是控件通知父窗口的,不应该把这种消息送给另外一个窗口。如果你要通知另外一个窗口,应该自定义一个消息来做,而不是用WM_NOTIFY
其中IDC_LISTVIEW是你对应对话框内的控件的对应的ID,nhm是一个 NMHDR 结构 NMHDR nhm;
nhm.code=NM_CLICK;
nhm.idFrom=IDC_LISTVIEW;
nhm.hwndFrom=listview.m_hWnd;
正确的写法