CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  VC/MFC >  基础类

为什么我的程序没有响应WM_NOTIFY消息

楼主coolxiao(coolxiao)2001-11-10 20:43:43 在 VC/MFC / 基础类 提问

我的主窗口是一个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

相关问题

  • 如何在程序启动时调用WM_SETFOCUS消息的响应函数
  • !!!!!请教高手VB程序中如何响应WM_MEASUREITEM消息和WM_DRAWITEM消息?
  • 程序中响应F1-F12键
  • WM_KeyDown,WM_Char不响应
  • 我给我的程序的主窗口用了两次PostMessage(WM_CLOSE,0,0),为什么两次都可以响应?
  • 程序无响应死掉了
  • 程序为何会不响应?
  • Win2000下程序响应慢的问题
  • 如何编写事件响应程序?
  • 程序对mouse_event不响应

关键词

  • 消息
  • 控件
  • 函数
  • 代码
  • 执行
  • idc
  • onnotify
  • cben
  • cproportiondlg
  • presult

得分解答快速导航

  • 帖主:coolxiao
  • smallfool
  • smallfool

相关链接

  • Visual C++类图书
  • Visual C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo