MFC动态按钮的创建及其消息响应 和 自定义消息
原文链接: http://www.cnblogs.com/gaohongchen01/p/4046525.html
动态按钮(多个)的创建:
1、在类中声明并定义按钮控件的ID
#define IDC_D_BTN 10000
2、在类的OnInitDialog()函数中动态创建按钮(建立按钮对象时最好建立对象的指针)
3、手动释放对象指针
下面是动态生成多个按钮的例子:
CButton* btn = new CButton[5];
DWORD dwStyle = WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON;
for(int i = 0; i < 5; i++)
{
btn[i].Create(_T("动态按钮"), dwStyle,CRect(20+80*i,20,80+80*i,60),this,IDC_D_BTN+i);
}
注:Create()的第一个参数为按钮的标题,可直接给出(如上所示),也可在String Table中先定义字符串,再利用控件的LoadString()函数将字符串读取进来
程序运行效果如下所示:
aaarticlea/png;base64,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acVnM8v+vsWJzq2+mFd7OZ8bw+THFQriigRxRYKrRY09m3hnw+rBNFF8sjji30/9OfLdNxnPvvLOoGdfikm+3de/wnr5l6PzevXjhlEqY1vH+/f9j4jm4/2AfdwbAfP/YbypXhOIegXsnLx819QVu6d9tmfayh+nfxEy44u90z7/cepneywz5rN0+8Sl2ycv3zXt8x9nrNo3e23YvK/C/b6JWLTx58Wbji7cELng65/mfhU+e23YzFX7pn3+4+TluyYt2zHZlK7pK0NmfLF31ur9s9eGzVkXNntt6Kw1+2au2jtjZciUFbsnBeyYjyRzhAAABZdJREFU8Gnwx4u3fLQwaKzfdx9aBWznosC9n31/aP3uY0EHT23/OWrHL1E7j57bdezc7v/+vefXf/Ycj/7xtwt7/7gcdibuUNS1iOiUXy7d+OVy+tErGceuZPw3JvO/sVm/xt389eqt3+JzTibln0krisosO5/NuXi7+nJ+XexdXjyrIZ4liGcJEop7ONdcTEm3ppH6wxWrh77x9sxpExgvDhvz8KODwiN+OXD8Ul//CuvF34zYhJl/GVF5H9bXPx/6D00atsTYMJ9PtxGNMQZm1b5Zq/fPXhM6e23YzNX7p68MmfrZninLd0222IpNWbFr+sqQWav3+647MD/w8MINkUs2H/v0+18Xf/fLJ98emR942HfdwVmr909fGTJl+a5JATvJes1ctW/22jDfLw/OW39ofuDheevD5355YM7asNmr909b+ePk5bt8lm4b77/1o0WWAds8bflW31U7Fq7fs3xz2LrtERv3/Xdr+B9bw3/fGv7b9wePbw0//sOhP4J/OrntyOmdv/y15/jf+05cPPBn7OFzCYfPJfz0d0LE39ci/rl25Pz1yOikyAvJv1xKO34168T123+m3f07qzQ6h335TlUssy6+iJfA4iWw+NeK72kSnU1Jt6aBylPSIPvj9J+vvv6W/8JZjCHvTnnu1ff+5+EB4RG/xCTnrvrh54/9tz5ws8XB2N16P+ofY1yv+UfR5/91rP9L9fXPh27zvbfH7XXGC/+hiYYZAxawc4rpkODsNaFz1h2Y+1X4vK/C56w7QDaM2IeZArbbGLAvDy74+qdFG3/+NOjXpVuO+28+RmzCfL88OGtN6PSVIZNNATPu2NaE+n55cH7g4U++PbJw489+30Ys+PrwvPXhvmvDZn6xd8qK3ROXbvvYfyuxAxszf8OH87+dsHjTtIAtc77Y9smXu5dt3Lt664Gvd/20ae/P34Uc2fjjT9/uPvTt7kMbQ376bl/k5tCj3x/8dduRE7uP/Rny+9+hpy6Enbpw4NSFA6cvHDh98eCZS+F/Xgk/G3P43NWfLyYfj8s4lZR79gbzn5usi7nlMfmVVwtr4gtrE4pqE4rqrrHuaRIdTjEx9bSe7KpGrlj5x+k/n3z62fm+kzd98xlj+OjZr46Y+Nyr7z386FODnn0x9OARTq0Ag8FgenHqBJXGaaysb6yqb6rmNlVzm6t5zTU8YQ1fWMMX1vCE1dzmam5TVX1TVX1jZX1jZV1jZV1jVX1jFbepmmu8ZG1DS12DqE4gqmsQ1fJbyE+s4jZV1ROXb6qy+OK1/BbiU2obWqwuX99UWdfIqRVwahs4tQ0VNXxODb+ytqGqTlDNFdTyGuv4TdyGZl5jM79RyG9s5jc28wRNPEETr7GZ39jMbxI2NLUIhKLGFnGTSNIkkjaJJc3GkZpHImuRykVypVihkihbpSqNTK2Vt2oVGp1p9Bhn89vJ00PfePOV19+Y7ztxw/plO39Yy3hz7IJho2a8+vbEZ18Z+dQLw/814CkMBoO5P/Pwo089/Oigfz/29L8ff/o/jz/znyeeeeSJZx8Z+OwjA5995Iln//P4M/9+/Ol/P/b0w48NevjRQQ8/+tTDjz718GOD/v3Y0/95/GniwgMGPvfok88/+uTzA558bsDA5x554tn/PPHMf4jPenTQw48O+rfx8s+Qlx/w5HPmy5P/0GNPP/zooH8NeOpfA57814An//eRgf/7yMCHBzz570ef/M9jTw14YtCjAwc9/uTTTzz1zMBBzzwx6Oknnnr6iacGPf7koCeeevqJQU8PHPTMwKefffKZ55569vlBz73w9PMvWs4zz7/4zAsvPvPCS8+88NKzL738/OBXXnjl1RdfHfLSa0MHDxn28tDXXxn2+ivDhmPczvRJoxbNG//dV347g5Yd3L36/wcV63FoDXPf4AAAAABJRU5ErkJggg==" alt="" />
动态按钮(多个)的消息响应:
一个MFC的消息响应函数在程序中有三处相关信息:函数原型、函数实现以及用来关联消息和消息响应函数的宏。头文件中在两个AFX_MSG注释宏之间是消息响应函数原型的声明。源文件中有两处:一处是在AFX_MSG_MAP注释宏之间的消息映射宏,用来关联消息和消息响应函数的宏;另一处是源文件中的消息响应函数的实现代码。
下面为动态生成的多个按钮的消息响应的建立步骤:
1、在对话框类的定义文件(.h文件)中声明消息响应函数OnButtonClick
afx_msg void OnButtonClick(UINT uID);
注:OnButtonClick函数的参数nID代表响应函数对应按钮控件的ID号,单个按钮可不设参数
2、在对话框类的函数实现文件(.cpp文件)中定义消息映射ON_COMMAND_RANGE (多个按钮)
在函数实现文件中的消息映射部分(BEGIN_MESSAGE_MAP与END_MESSAGE_MAP之间)定义按钮控件与其消息响应函数之间的映射关系。
ON_COMMAND_RANGE(IDC_D_BTN,IDC_D_BTN+5-1,OnButtonClick)
对于所有动态创建的5个按钮(ID号在IDC_D_BTN ~ IDC_D_BTN+5-1之间),定义其消息映射函数为OnButtonClick函数,根据其输入ID分辨具体响应那个按钮。
若是单个按钮,则消息映射为ON_BN_CLICKED
ON_BN_CLICKED(IDC_BUTTON_ID, OnButtonFunc)
3、实现消息响应函数OnButtonClick
在对话框类的函数实现文件(.cpp文件)中给出具体的按钮消息响应
自定义消息:
消息映射、循环机制是Windows程序运行的基本方式。VC++ MFC 中有许多现成的消息句柄,可当我们需要完成其它的任务,需要自定义消息,就遇到了一些困难。在MFC ClassWizard中不允许添加用户自定义消息,所以我们必须在程序中添加相应代码,以便可以象处理其它消息一样处理自定义消息。
Windows消息用"WM_"这个前缀,自定义消息一般用"UM_这个前缀"。
1、首先在头文件或CPP文件中定义一个消息(推荐用户自定义消息至少是WM_USER+100,因为很多新控件也要使用WM_USER消息)
#define WM_MY_MESSAGE (WM_USER+100)
2、在消息映射宏里面添加函数声明
afx_msg LRESULT OnMyMessage(WPARAM wParam, LPARAM lParam);
3、在函数实现文件(.cpp文件)中定义消息映射ON_MESSAGE,关联消息和消息响应函数
ON_MESSAGE(WM_MY_MESSAGE, OnMyMessage)
4、实现消息处理函数,该函数使用WPRAM和LPARAM参数并返回LPESULT
LPESULT CMainFrame::OnMyMessage(WPARAM wParam, LPARAM lParam)
{
// TODO: 处理用户自定义消息
...
return 0;
}
5、发送消息
::PostMessage(GetSafeHwnd(), WM_MY_MESSAGE, 0, 0);
其中GetSafeHwnd()得到了一个当前窗口的句柄,此消息将发给当前窗口;如果想发送消息给其它窗口,只需改变这个句柄,前提是目的窗口也实现了此消息的处理函数。
注:
如果用户需要一个定义整个系统唯一的消息,可以调用SDK函数RegisterWindowMessage定义消息:
static UINT WM_MY_MESSAGE=RegisterWindowMessage("User");
并使用ON_REGISTERED_MESSAGE宏指令取代ON_MESSAGE宏指令,其余步骤同上。
MFC动态按钮的创建及其消息响应 和 自定义消息的更多相关文章
- MFC动态按钮的创建及其消息响应(自定义消息)
动态按钮(多个)的创建: 1.在类中声明并定义按钮控件的ID #define IDC_D_BTN 10000 2.在类的OnInitDialog()函数中动态创建按钮(建立按钮对象时最好建立对象的指针 ...
- VS2010,MFC动态按钮和窗体背景图片,以及是静态文字控件透明,并避免静态文字刷新出现的重叠问题
1.动态按钮的四种动作 1)正常 2)按下 3)滑过 4)失效 在MFC中,4个动作对应着四种位图bmp, 首先,将代表四种状态的位图加载入资源中,将对应的按钮设置为BitmapButton 第二,在 ...
- win32 控件的创建和消息响应
1. 控件的创建 控件的创建和窗口创建是一样的,例如: ,,,, hWnd,(HMENU)IDB_BUTTON01,hInst,NULL); 是一个按钮的创建,其中hWnd是窗口句柄,hInst是应用 ...
- 【VS开发】MFC CListCtrl列表控件的消息响应
MFC里的CListCtrl选中一行,消息是哪个.实在想不起来了.找了一篇文章,比较有用: http://www.cnblogs.com/hongfei/archive/2012/12/25/2832 ...
- MFC动态创建对话框中的按钮控件并创建其响应消息
转自:http://www.cnblogs.com/huhu0013/p/4626686.html 动态按钮(多个)的创建: 1.在类中声明并定义按钮控件的ID #define IDC_D_BTN 1 ...
- MFC小程序003------MFC使用WebBrowser组件,在对话框中创建滚动视图,动态创建一个静态文本控件并设置鼠标单击的消息响应
MFC小程序截图: 一.在MFC中简单使用WebBrowser的ActiveX插件的方法: 见博文: http://blog.csdn.net/supermanking/article/detail ...
- 【转载】MFC动态创建控件及其消息响应函数
原文:http://blog.sina.com.cn/s/blog_4a08244901014ok1.html 这几天专门调研了一下MFC中如何动态创建控件及其消息响应函数. 参考帖子如下: (1)h ...
- MFC动态创建控件及其消息响应函数
这几天专门调研了一下MFC中如何动态创建控件及其消息响应函数. 参考帖子如下: (1)http://topic.csdn.net/u/20101204/13/5f1b1e70-2f1c-4205-ba ...
- MFC 动态创建按钮
首先在对话框(模式对话框,无模式对话框)中添加一个ADD按钮,通过点击按钮产生的通告消息调用::OnBtnAdd()方法.此方法会在对话框的左上角创建一个按钮. 当然首先要在和次对话框相关联的类中添加 ...
随机推荐
- ZH奶酪:利用CSS将checkbox选项放大
在Hybrid App开发过程中,html中默认的checkbox选项在手机屏幕上显得比较小,app不能像web page那样放大缩小,所以要通过CSS将checkbox选项放大: 例如HTML代码: ...
- eclipse 使用总结
1.eclipse 运行简单JAVA程序事例 2.eclipse 安装lombok 3.eclipse 远程调试程序 4.eclipse 经常弹出提示框 5.eclipse 修改设置Ctrl+Shif ...
- struts.xml文件中package元素的各大属性讲解
Struts2中的包: Struts2使用包来组织Action,将Action放在包下来定义,通过package元素配置一个包,通过package的子元素action来定义一个Action: Stru ...
- Android——复制项目出现Application Installation Failed
今天把一个项目复制到另一个文件夹下,重新打开结果不能正常安装到虚拟机上了. 解决方法: Build——Clean Project :清除一下项目缓存 Build——Rebuild Project ...
- Java多线程之Future与FutureTask
转载请注明原文地址:http://www.cnblogs.com/ygj0930/p/6561154.html 一:Future 在使用实现Callable创建线程时,call()方法是有返回值的. ...
- Linux Shell 下载网站指定文件
Shell脚本,用来从网站下载指定文件名的文件.先判断本地这个文件是否存在,如果存在则忽略,不存在则从远程服务器上下载,下载成功后本地的批次号累加1,然后使用新的批次号继续下载新文件. #!/bin/ ...
- 【面试】iOS 开发面试题(二)
1. 我们说的oc是动态执行时语言是什么意思? 答案:多态. 主要是将数据类型的确定由编译时,推迟到了执行时. 这个问题事实上浅涉及到两个概念.执行时和多态. 简单来说.执行时机制使我们直到执行时才去 ...
- Linux软硬连接
曾经对软硬连接一直搞不明白,关键是怕操作错误. 硬链接不能跨区实现连接,硬链接是对原始文件的镜像,同一个inode,软连接是快捷方式,inode保存的是快捷方式的.原始文件删除,导致软连接文件无效. ...
- Unrecognized option: -jrockit
weblogic报错: starting weblogic with Java version: Unrecognized option: -jrockit Error: Could not crea ...
- 【Android开发经验】怎样查看android-support-v4支持包中的源代码
在support-v4包里面.加入了非常多的支持控件,比方ViewPager,Fragment等,为了解决一些问题,我们有时候想要看一下实现源代码,可是点进去之后.源代码并不会显示出来,会出现以下的情 ...