为什么我的程序没有响应WM_NOTIFY消息
我的主窗口是一个Dialog,有一个ComboBox,我希望在ComboBox被选择以后改变edit中的内容,因此我override OnNotify()函数,不知道这样做是否正确。
先不论我的方法是否正确,但是我论我如何操作,函数里面的对话框都没有弹出来,这是怎么回事呢?
BOOL CProportionDlg::OnNotify(WPARAM wParam, LPARAM lParam, LRESULT* pResult)
{
// TODO: Add your specialized code here and/or call the base class
MessageBox("ssss");
if (lParam == CBEN_ENDEDIT || lParam == CBEN_BEGINEDIT)
{
return CDialog::OnNotify(wParam, lParam, pResult);
}
return CDialog::OnNotify(wParam, lParam, pResult);
}
问题点数:100、回复次数:13Top
1 楼Hopping(♂风中尘埃♂)回复于 2001-11-10 20:58:32 得分 0
选中了属性页中的NOTIFY了吗?Top
2 楼coolxiao(coolxiao)回复于 2001-11-10 21:02:50 得分 0
啊,竟然这么阴险啊,我看看Top
3 楼coolxiao(coolxiao)回复于 2001-11-10 21:07:09 得分 0
ComboBox里面好象没有这个属性啊Top
4 楼kingzai(stevenzhu)回复于 2001-11-10 21:18:10 得分 0
子类化不知道行不行,SubClassDlgItem(IDC_ComboBox,this,NULL);Top
5 楼fz_zhou(vcfan)回复于 2001-11-10 21:21:04 得分 0
OnNotify()是一个反射用的消息,就是说在你的程序中有CFrameWnd的时候,在其中没有处理你对应控件的消息,在对话框的程序中应该没有用:)而改变的则是OnChange();Top
6 楼smallfool(smallfool)回复于 2001-11-10 21:23:50 得分 50
您为什么不直接响应这两个消息?
BEGIN_MESSAGE_MAP(CProportionDlg, CDialog)
//{{AFX_MSG_MAP(CProportionDlg)
ON_NOTIFY(CBEN_BEGINEDIT, IDC_COMBOBOXEX1, OnBegineditComboboxex1)
ON_NOTIFY(CBEN_ENDEDIT, IDC_COMBOBOXEX1, OnEndeditComboboxex1)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
void CProportionDlg::OnBegineditComboboxex1(NMHDR* pNMHDR, LRESULT* pResult)
{
// TODO: Add your control notification handler code here
*pResult = 0;
}
void CProportionDlg::OnEndeditComboboxex1(NMHDR* pNMHDR, LRESULT* pResult)
{
// TODO: Add your control notification handler code here
*pResult = 0;
}
afx_msg void OnBegineditComboboxex1(NMHDR* pNMHDR, LRESULT* pResult);
afx_msg void OnEndeditComboboxex1(NMHDR* pNMHDR, LRESULT* pResult);
Top
7 楼coolxiao(coolxiao)回复于 2001-11-10 21:32:23 得分 0
按理解The framework calls this member function to inform the parent window of a control that an event has occurred in the control or that the control requires some kind of information.
应该是可以接收到的啊,而且好象也没有OnChange()吧。Top
8 楼coolxiao(coolxiao)回复于 2001-11-10 21:38:10 得分 0
smallfool(smallfool)
我记得有这种用法,但是我觉得响应OnNotify()不是一样的吗?Top
9 楼coolxiao(coolxiao)回复于 2001-11-13 14:07:52 得分 0
不是吧,都100分还没有一个人出来说说话,大家帮帮忙啦,帮忙up一下也有分啊。Top
10 楼smallfool(smallfool)回复于 2001-11-13 14:36:02 得分 0
你这个代码不对.
BOOL CProportionDlg::OnNotify(WPARAM wParam, LPARAM lParam, LRESULT* pResult)
{
// TODO: Add your specialized code here and/or call the base class
//MessageBox("ssss");
NMHDR* pnmh = (LPNMHDR) lParam;
if(pnmh->code == CBEN_ENDEDIT || pnmh->code == CBEN_BEGINEDIT)
{
AfxMessageBox("Edit");
return 0;
}
}
return CDialog::OnNotify(wParam,lParemt,lResult);
上述代码是可以运行的,也出现了提示.
Top
11 楼coolxiao(coolxiao)回复于 2001-11-14 16:15:09 得分 0
smallfool(smallfool)
还是不行啊,即使我的代码是错的,但如果有WM_NOTIFY消息的话,也应该会执行我的MessageBox语句啊,但是我用spy++看过,根本就没有收到这条消息,所以OnNotify没有
执行啊,请问你所说的出现提示是在什么情况下呢,你做了什么操作呢?
有没有哪位能给我讲讲WM_NOTIFY消息的机理,比如说什么控件会产生这种消息,在什么条件下产生等,我会不断加分的,谢谢。Top
12 楼coolxiao(coolxiao)回复于 2001-11-16 15:28:16 得分 0
say sth please,thank youTop
13 楼smallfool(smallfool)回复于 2001-11-17 16:24:57 得分 50
自MSDN翻译而来
从通用控件接收通知(消息)
作为子窗口的通用控件在发生内部事件时,如从用户端接收输入,会发送通知消息给其父窗口.
应用程序依靠这些通知消息来判断用户需要执行什么样的操作.大多数通用控件会发送WM_NOTIFY消息作为通知的消息.Windows3.x的控件却以WM_COMMAND作为大多数的通知消息来响应,而CWnd::Ontify是WM_NOTIFY消息的处理函数,同CWnd::OnCommand()一起,OnNotify()的实现是把通知消息派发给OnCmdMsg()来进行消息映射.相应的消息影射入口是ON_NOTIFY,
一个派生类可使用消息映射来处理自己的通知消息.
Top




