CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
山寨机中的战斗机! 程序优化工程师到底对IT界有没有贡献
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  VC/MFC >  界面

◆◆◆动态创建控件无法捕获BN_CLICKED事件的问题

楼主mybios(俊俊哥哥)2005-07-02 10:10:30 在 VC/MFC / 界面 提问

有一个继承类  
  class   CUCPay   :   public   CStatic  
  {  
      CButton   m_chkName;  
  }  
  在PreSubclassWindow的时候调用动态创建CheckBox的代码  
  m_chkName.Create(pPayType->strTypeName    
  ,   WS_VISIBLE   |   BS_AUTOCHECKBOX   |   WS_TABSTOP    
  ,   CRect(0,   0,   100,   32)  
  ,   this  
  ,   1000);  
  然后想响应m_chkName的状态改变事件BN_CLICKED,那么有如下代码:  
   
  //   截获消息  
  BOOL   CUCPay::PreTranslateMessage(MSG*   pMsg)    
  {  
  TRACE("%d,%d,%d,%d"  
  ,   pMsg->hwnd  
  ,   pMsg->message  
  ,   pMsg->wParam  
  ,   pMsg->lParam  
  );//   message总是不等于WM_COMMAND  
  return   CStatic::PreTranslateMessage(pMsg);  
  }  
   
  但是总是截获不了WM_COMMAND的消息,所以就无法获得通知码BN_CLICKED了.  
  现在我的解决办法如下:  
   
  BOOL   CUCPay::PreTranslateMessage(MSG*   pMsg)    
  {  
  //   如果选中了此控件  
  if(pMsg->message   ==   WM_LBUTTONUP   ||   pMsg->message   ==   WM_KEYDOWN)  
  {  
                                      //   根据句柄判断是否按下某个控件  
  if(pMsg->hwnd   ==   m_chkName.GetSafeHwnd())  
  {  
                                                        CString   strTemp;  
                                                        strTemp.Format("当前状态:%d"   ,   m_chkName.GetCheck());  
  AfxMessageBox(strTemp);  
  }  
  }  
  return   CStatic::PreTranslateMessage(pMsg);  
  }  
   
  这样状态是获取了.但是获得的状态总是鼠标按下以前的状态,鼠标按下以后的状态就只能在下次鼠标按下的时候才能获取了.  
  100分请教高手解决此问题.谢谢了!  
  问题点数:100、回复次数:10Top

1 楼krh2001(边城浪子)回复于 2005-07-02 10:27:28 得分 20

要想控件产生花BN_CLICK消息,应该在创建的时候指定风格标志:SS_NOTIFY  
   
   
  Top

2 楼mybios(俊俊哥哥)回复于 2005-07-02 11:03:25 得分 0

谢谢   krh2001   ,但是我刚刚试过了.  
  我把Create代码改成  
  m_chkName.Create(pPayType->strTypeName    
  ,   WS_VISIBLE   |   BS_AUTOCHECKBOX   |   WS_TABSTOP   |   SS_NOTIFY  
  ,   CRect(0,   0,   100,   32)  
  ,   this  
  ,   1000);  
  然后PreTranslateMessage里面根本截获不到WM_COMMAND的消息哦.  
  Top

3 楼oyljerry(【勇敢的心】→ ㊣提拉米苏√㊣)回复于 2005-07-02 13:34:48 得分 20

#define   ID_BUTTON_TEST   6000  
  CButton   btn;  
  afx_msg   void   OnTest();//.h  
   
  btn.Create("button",WS_CHILD|WS_VISIBLE,CRect(),this,ID_BUTTON_TEST   );  
   
  ON_COMMAND(ID_BUTTON_TEST   ,OnTest);  
   
   
   
  void   CTest::OnTest()  
  {  
  MessageBox("");  
  }  
  Top

4 楼mybios(俊俊哥哥)回复于 2005-07-02 13:48:34 得分 0

to:   oyljerry  
  你这个是在对话框中的写法。情况跟我的不同。Top

5 楼mybios(俊俊哥哥)回复于 2005-07-02 14:12:21 得分 0

已经想到办法了。创建的时候不需要指定风格标志:SS_NOTIFY  
  只需要重载OnCommand,不可以在PreTransferMessage里面写。Top

6 楼allenhiman(9Ft)回复于 2005-07-02 15:11:30 得分 0

...  
  Top

7 楼wangjia184(我就是传说中的。。。。。。SB)回复于 2005-07-12 13:07:54 得分 0

在   PreTransferMessage   里面处理鼠标点击  
   
  判断   ptTop

8 楼casinosun(去日苦多)回复于 2005-07-12 13:50:10 得分 20

就是ON_COMMAND(ID_BUTTON_TEST   ,OnTest);  
   
   
   
  void   CTest::OnTest()  
  {  
  MessageBox("");  
  }  
  在对话框和窗口中都行Top

9 楼greenabc(green)回复于 2005-07-12 20:34:42 得分 20

在PreSubclassWindow的时候调用动态创建CheckBox的代码  
  m_chkName.Create(pPayType->strTypeName    
  ,   WS_VISIBLE   |   BS_AUTOCHECKBOX   |   WS_TABSTOP    
  ,   CRect(0,   0,   100,   32)  
  ,   this  
  ,   1000);  
  改到  
  int   CUCPay::OnCreate(LPCREATESTRUCT   lpCreateStruct)    
  {  
  if   (CStatic::OnCreate(lpCreateStruct)   ==   -1)  
  return   -1;  
   
  //   TODO:   Add   your   specialized   creation   code   here  
  m_chkName.Create(pPayType->strTypeName    
  ,   WS_VISIBLE   |   BS_AUTOCHECKBOX   |   WS_TABSTOP    
  ,   CRect(0,   0,   100,   32)  
  ,   this  
  ,   1000);  
   
  return   0;  
  }  
   
  Top

10 楼goodboyws(深夜不眠者(VCMVP))回复于 2005-07-12 23:36:18 得分 20

PreTranslateMessage是否仅仅对顶级窗口有效Top

相关问题

  • Rich Edit 控件的创建
  • 动态创建控件
  • evb中创建控件
  • 关于创建控件……
  • 动态创建控件?
  • 创建新的控件类
  • 创建窗体及控件
  • 动态创建控件
  • 在Menu上创建控件
  • 如何捕获ActiveX控件的事件?

关键词

  • 控件
  • ws
  • 代码
  • chkname
  • pmsg
  • cucpay
  • ppaytype
  • strtypename
  • bn
  • autocheckbox

得分解答快速导航

  • 帖主:mybios
  • krh2001
  • oyljerry
  • casinosun
  • greenabc
  • goodboyws

相关链接

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

广告也精彩

反馈

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