打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
如何动态创建按钮,并响应消息

利用按钮的BS_PUSHBUTTON风格,具有该风格的按钮被单击时会发出WM_COMMAND消息,他的响应原理和用类向导定义的函数一样。只不过它的响应函数原形,消息映射以及函数实现需要你自己手动写进去
例如:
首先建一个AppWizard的工程Button,然后给CButtonDlg添加一个成员变量m_btn
如:CButton m_btn;
因为按钮是显示在对话框上的,所以我们可以在OnInitDialog()中动态创建按钮。因为创建按钮需要ID,所以在需要在Resource.h中定义一个ID
如:#define IDC_BUTTON_CREATE               1002
在OnInitDialog()中创建按钮的代码如下:
m_btn.Create("PushButton",BS_PUSHBUTTON |WS_CHILD|WS_VISIBLE|WS_TABSTOP,
                 CRect(0,0,100,50),this,IDC_BUTTON_CREATE);
按钮创建后,运行后按钮即会显示在对话框上。
下面为动态创建的按钮添加消息映射:
如:在ButtonDlg.h中,添加函数原形:
afx_msg void OnButtonCreate();
然后在ButtonDlg.cpp中添加消息映射:
ON_BN_CLICKED(IDC_BUTTON_CREATE,OnButtonCreate)
最后添加上函数的函数体即可
如:
void CButtonDlg::OnButtonCreate()
{
    // TODO: Add your control notification handler code here
    MessageBox("OnCreateButton!");
}
但是如何让动态创建的按钮响应鼠标双击呢?如果按照上面的方法,添加响应鼠标双击的函数会发现按钮不会响应鼠标双击!
我们利用对话框模版,在其上放一个按钮控件。然后利用类向导添加响应鼠标双击的函数,运行后双击按钮结果也没反应!但是如果我们把它的属性中STYLE项的Notify这项选上,运行后双击按钮就会响应。
因此我们断定,动态创建的按钮加上Notify风格BS_NOTIFY。我们可以在创建按钮时加上此风格也可以利用CWnd函数ModifyStyle()进行修改
如方法1 :
m_btn.Create("PushButton",BS_PUSHBUTTON |WS_CHILD|WS_VISIBLE|WS_TABSTOP|BS_NOTIFY,
                 CRect(0,0,100,50),this,IDC_BUTTON_CREATE);
方法2:
m_btn.ModifyStyle(0,BS_NOTIFY);
修改后,按照上述方法添加消息处理函数即可!
 
 
如果是其它控件比如Edit,要让Edit响应一般的通告消息只要在子类中添加响应得消息映射即可
虽然自空件将通告消息首先发送给父窗口,但父窗口并不会先处理而是将其反射回子控件,让子控件处理,如果子控件处理了则消息路由结束否则交给父窗口处理
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/tiantangniao232/archive/2007/03/31/1547594.aspx
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
VC++之Button控件
MFC控件的外观编辑
初识MFC框架
VS2010/MFC编程入门之二十二(常用控件:按钮控件Button、Radio Button和Check Box)
Matlab的GUI编程中给控件添加注释信息
Tkinter直接绑定和间接绑定
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服