动态创建mfc控件
来源:互联网 发布:大数据电商平台 编辑:程序博客网 时间:2024/05/16 06:19
MFC动态创建控件及其消息响应函数(个人小结)
(2012-07-27 11:45:10)这几天专门调研了一下MFC中如何动态创建控件及其消息响应函数。
参考帖子如下:
(1)http://topic.csdn.net/u/20101204/13/5f1b1e70-2f1c-4205-ba10-41616d16f07e.html
(2)http://www.cppblog.com/deercoder/articles/107132.html
这两篇帖子是比较经典的,能够回答我的问题。但是如何动态创建消息响应函数呢?这需要利用另外一个命令:
ON_COMMAND_RANGE
参考如下帖子:http://topic.csdn.net/t/20020728/22/906766.html
注意:ON_COMMAND_RANGE映射了一组控件ID与其相应的消息响应函数,因为要区分是哪个控件ID的消息响应函数,所以其消息响应函数需要加上参数:UINT
下面我自己新建了一个MFC工程,开始测试上面帖子中的用法。经过反复比较,发现还有一个细节需要注意:
需要在String Table中加入初始化时的那个控件ID,具体操作如下:
打开资源中的“String Table”,在空白行上双击鼠标,这时会弹出一个ID属性对话框,在其中的ID编辑框中输入ID,如:IDC_MYBUTTON,在Caption中输入控件标题或注解(注:Caption框不能为空,为空会导致创建失败),这里我输入的是按钮上要显示的文字--动态按钮。
这样后面的操作就不会出错了。
具体代码如下:
(1)建立控件ID号:在String Table中加入一个新ID:IDC_MYBUTTON。注意和默认的ID的值保持距离
(2)建立控件对象:
注意不能直接定义CButton对象,如:CButton m_MyBut;这种定义只能用来给静态控件定义控制变量,不能用于动态控件。
对于一个Dialog资源,先关联一个类,比如CTestDlg
然后在CTestDlg.cpp中位置加入:
ON_COMMAND_RANGE(IDC_MYBUTTON,IDC_MYBUTTON+10,&CTestDlg::OnMYBTN)
如下所示:
BEGIN_MESSAGE_MAP(CTestDlg, CDialog)
END_MESSAGE_MAP()
然后添加一个创建控件的函数:
{
CString m_Caption;
m_Caption.LoadString( nID ); //取按钮标题
CButton *p_Button = new CButton();
ASSERT_VALID(p_Button);
p_Button->Create( m_Caption, WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON | nStyle, rect, this, nID ); //创建按钮
return p_Button;
}
然后使用工具箱新建了一个button(IDC_BUTTON1),使得这个button的消息响应函数是用来新建三个新按钮。其消息响应函数如下:
void CTestDlg::OnBnClickedButton1()
{
if(btn_flag==false)
{
p_MyBut[0] = NewMyButton( IDC_MYBUTTON, CRect(20,20,50,60), BS_DEFPUSHBUTTON );
}
}
另外又设置了一个button(IDC_BUTTON2),按下这个按钮就销毁之前创建的三个新按钮。
void CTestDlg::OnBnClickedButton2()
{
}
设置全局变量:bool btn_flag;用来表示是否按下了button1,新建了三个按钮
设置全局变量:CButton *p_MyBut[3];用来存放新建的三个按钮
而这三个按钮的消息响应函数如下:注意需要加参数!
void CTestDlg::OnMYBTN(UINT nID)
{
}
========================================================
最后实现的功能就是按Button1生成三个新按钮,每个按钮都可以触发一个messagebox。而按Button2可以销毁三个新生成的按钮。
- mfc动态创建控件
- MFC动态创建控件
- MFC 动态创建控件
- MFC动态创建控件
- 动态创建mfc控件
- MFC 动态创建控件
- MFC动态创建控件--CStatic
- MFC中动态创建控件
- 深入浅出MFC:动态创建控件
- MFC动态创建CEdit控件
- MFC动态创建控件的消息处理
- MFC动态创建控件的消息处理
- MFC中动态创建一个控件
- MFC动态创建控件的消息处理
- MFC动态创建CButton控件显示不正常
- MFC 动态创建对话框和控件
- MFC 动态创建控件 字体设置问题
- 控件的动态创建-MFC方式
- Mysql备份和恢复
- Spark Shuffle内存分析
- delphi(客户端) socket 与 PHP_socket(服务器) 通信的例子
- dz论坛程序备份搬家
- 常用oracle函数备份
- 动态创建mfc控件
- java 泛型
- JS加载js文件或css文件和判断是否加载该js或css
- 网络之Http字段介绍
- 设计模式(六):组合模式(Composite)
- mysql触发器不能进行修改操作的总结
- 安装交叉编译环境,minicom,tftp,nfs,partitionmanager
- swift控件之旅之UILabel
- render