MFC2.docx
- 文档编号:7321348
- 上传时间:2023-05-11
- 格式:DOCX
- 页数:13
- 大小:738.07KB
MFC2.docx
《MFC2.docx》由会员分享,可在线阅读,更多相关《MFC2.docx(13页珍藏版)》请在冰点文库上搜索。
MFC2
控件
(一)
注:
下列例题均以建立基于对话框的应用程序为例。
1.控件的添加
控件的添加有两种方法:
●用鼠标直接从控件工具箱中拖拉到对话框中。
●用代码添加。
例1:
用代码添加按钮控件,要求在程序运行开始时,界面上就显示该按钮,以基于对话框的应用程序为例。
1)建立基于对话框的应用程序mypro2。
2)将项目工作区切换到ClassView页面,展开C*Dlg类,右击C*Dlg类名,从快捷菜单中选择AddMemberVariable,增加CButton类型的成员变量m_btnWnd。
如图1、图2所示。
图1增加成员变量
图2设置增加的成员变量的类型与变量名
3)在项目工作区的ClassView页面中,双击C*Dlg类下的OnInitDialog函数名(该函数是对话框初始化的消息映射函数,里面一般添加对话框的初始化代码),在右侧的代码窗口中添加对话框的初始化代码,如图3所示。
m_BtnWnd.Create("你好",WS_CHILD|WS_VISIBLE|BS_PUSHBUTTON,CRect(20,20,120,60),this,201);
该Create函数的第一个参数表示按钮的标题,第二个参数是按钮的类型,第三个参数是按钮的位置与大小,第四个参数是父窗口的指针(即对话框的指针),第五个参数是该按钮的ID,这里因为没有设置符号常量,直接写成值常量。
图3在对话框初始化的消息映射函数OnInitDialog函数中添加控件的创建代码
还可用代码设置该控件的字体等属性,如,将该按钮控件的字体设置和对话框字体一样,可在上述代码后,添加如下代码:
CFont*font=this->GetFont();//获取对话框的字体
m_BtnWnd.SetFont(font);//设置控件字体
2.控件属性的设置
控件属性的设置也有两种方法:
●在属性窗口中设置。
先在资源编辑器窗口中选中该控件,在右击弹出的快捷菜单中选择“属性”(proterties),打开属性对话框进行相应属性的设置。
●在代码中设置。
例2:
在对话框中布置一个按钮控件,标题与ID取默认值,标题为“Button1”,ID为“IDC_BUTTON1”,单击“确定”按钮,将Button1的标题设置为“新按钮标题”。
根据题目的意思,应该添加一个“确定”按钮的消息映射函数,该函数是对话框的成员函数。
在对话框的空白处右击,在弹出的快捷菜单中选择“建立类向导”,进入“MFCClassWizard”对话框,其中“Classname”中选择对话框类C*Dlg(系统提供的默认对话框类),“ObjectIDs”中选择“确定”按钮的ID:
IDOK,“Messages”中选择BN_CLICKED消息,单击“AddFunction”按钮添加确定按钮的单击消息映射函数。
完成后可单击“EditCode”编辑相应的函数体代码。
如图4所示。
CButton*p=(CButton*)GetDlgItem(IDC_BUTTON1);
p->SetWindowText("新按钮标题");
其中GetDlgItem函数是获取对话框中某控件的指针,参数为该控件的ID,该函数的返回值应强制类型转换为控件的指针类型。
SetWindowText函数是设置控件的标题属性,参数为字符串。
注:
对话框中的“确定”按钮和“取消”按钮的单击消息映射函数中默认调用基类CDialog类OnOK()和OnCancel()函数,这两个函数都会关闭对话框,若不想关闭对话框,可将调用基类函数的语句删除掉。
图4在确定按钮的消息映射函数体中修改按钮的标题属性
请试试在对话框中添加一个静态文本控件,在代码中设置该静态文本的标题属性。
提示:
在MFC中因为静态控件一般不响应消息,所以所有的静态控件的ID默认都为IDC_STATIC,不像其它控件的ID,后面有默认的阿拉伯数字加以区分,如IDC_BUTTON1,IDC_EDIT1等,要想通过GetDlgItem函数是获取静态控件的指针,事先一定要设置静态控件的ID,否则程序运行时会出错。
3.添加对话框的通用消息映射函数OnCommand函数
通用消息映射函数即遇到所有的消息都会调用该函数。
例3:
在上例中添加通用消息映射函数,判断是否按了用代码创建的按钮控件或IDC_BUTTON1。
打开MFCClassWizard对话框,“Classname”列表中选择C*Dlg,在IDs表中选择C*Dlg,在Messages框中找到并双击OnCommand,这样也可添加消息映射函数,如图5所示。
单击“EditCode”按钮添加判断代码。
如图6所示。
图5添加通用消息映射函数OnCommand
图6添加通用消息映射函数体代码
注:
一般控件的通知消息是一条WM_COMMAND消息,这条消息wParam参数的低位字中含有控件标识符,wParam参数的高位字则为通知代码,lParam参数则是指向控件的句柄。
4.单选按钮、复选框等控件的应用
例4:
buttonex
设计以下界面,程序运行后,单击某个单选按钮,就可以在编辑框里显示其对应的内容。
图7例4要求的界面布置
步骤:
1)创建并设计对话框
建立基于对话框应用程序,将界面布置如上图所示,并设置其中各个控件的相应属性,将其中四个单选按钮的ID属性分别设置为:
星期的ID为IDC_WEEK,月份的ID为IDC_MONTH,年份的ID为IDC_YEAR,日期的ID为IDC_DATE。
2)添加与控件相连的成员变量
在对话框资源的空白处右击弹出的快捷菜单中选择“建立类向导”,再在建立类向导的对话框的第二个页面标签“membervariables”中为编辑框IDC_EDIT1添加一个相连的控件变量,“classname”栏中选择C*Dlg类(默认为该类),在“controlsIDs”中选择IDC_EDIT1,单击右侧的“AddVariables”按钮,在弹出的“AddMemberVariable”对话框中设置控件变量的变量名,变量类别以及变量类型,其中变量名默认以“m_”为前缀,最好设置一个能表达该控件输入值意义的变量名,控件变量类别有两种类别:
一种是值类别(Value),这时控件里面的值是一个普通的变量类型,可在第三个下拉框中选择到底控件变量的类型是字符串、整形、double型等;另一种是控件类别(Control),这里控件的类型是一个控件类类型的对象,比如CEdit、CButton,可通过这个对象类型的控件变量调用相应类的成员函数进行控件的外观设置等。
如图8所示。
图8“AddMemberVariable”对话框
本例中只需要设置编辑框连接的控件变量存放一个字符串,因此设置为Value类别CString类型,设置好后按“OK”按钮,如图9所示。
图9设置好的控件变量
3)添加消息映射函数
①“星期”单选按钮单击事件的消息映射函数如图10所示。
其中,CTimet=CTime:
:
GetCurrentTime();
先定义一个Ctime类的对象用来保存当前系统时间,GetCurrentTime()是CTime类的静态成员函数,因为用类名加作用域运算符直接调用。
m_edit.Format("今天是星期%d",t.GetDayOfWeek()-1);
用CString类的Format成员函数构造m_edit的值。
图10“星期”单选按钮单击事件的消息映射函数
②“月份”单选按钮单击事件的消息映射函数如图11所示。
图11“月份”单选按钮单击事件的消息映射函数
③“年份”单选按钮单击事件的消息映射函数如图12所示。
图12“年份”单选按钮单击事件的消息映射函数
④“日期”单选按钮单击事件的消息映射函数如图13所示。
图13“日期”单选按钮单击事件的消息映射函数
4)功能的扩展
①若想在程序运行时设置某个单选按钮是选中状态,可在对话框的OnInitDialog成员函数中调用CheckRadioButton函数,来设置一组单选按钮中某个单选按钮是初选状态。
如本例题中设置“星期”单选按钮为默认选中状态,可在CButtonexDlg类的OnInitDialog成员函数中调用下列函数。
CheckRadioButton(IDC_WEEK,IDC_DATE,IDC_WEEK);
②若想在程序运行初始就触发某个事件,可在对话框的OnInitDialog成员函数中调用该事件的消息驱动函数。
如本例题中要求程序运行时就触发“星期”单选按钮的单击事件,可在C*Dlg类的OnInitDialog成员函数中调用下列函数。
OnWeek();
例5:
例CheckButton
设计如下界面,根据复选按钮是否被选中,在编辑框中显示相应内容。
图14例5的界面
步骤:
1)创建并设计对话框
建立基于对话框应用程序,将界面布置如上图所示,并设置其中各个控件的相应属性,将其中两个复选按钮的ID属性分别设置为:
“姓名”复选框的ID为IDC_NAME,“年龄”复选框的ID为IDC_AGE。
并将编辑框的属性窗口中“styles”页面标签中的multiline属性选中。
2)添加与控件相连的成员变量
在“建立类向导”中设置编辑框和复选框相连的控件变量。
如图15所示。
图15控件变量的设置
3)添加消息映射函数
添加“确定”按钮单击事件的消息映射函数。
如图16所示。
图16“确定”按钮单击事件的消息映射函数
控件
(二)
1.编辑框和旋转按钮控件示例
例1. 设置如下界面,在第一个编辑框中输入一个字符串,在中间一行左侧的编辑框中设置子串的起始下标,右侧的编辑框中设置要选取的长度,单击“确定”按钮在最下行的编辑框中显示出所选取的子串值。
图1例1界面
步骤:
1)创建并设计对话框
布置界面、设置控件属性。
第一个编辑框ID设置为IDC_EDITSOURCE,起始位置编辑框的ID设置为IDC_EDITSTART,选择长度编辑框的ID为IDC_EDITNUM,最后一个编辑框的ID为IDC_EDITSEL。
第一个spin控件的ID设置为IDC_SPINSTART,第二个spin控件的ID为IDC_SPINNUM。
两个spin控件属性对话框中“styles”页面中的“自动伙伴”属性选中,“对齐”属性中设置“right”,也要将“setbuddyinteger”属性选中。
2)添加与控件相连的成员变量
在“建立类向导”中设置编辑框和复选框相连的控件变量。
如图2所示。
图2 设置控件变量
3)添加消息映射函数
添加“确定”按钮单击事件的消息映射函数。
如图3所示。
图3“确定”按钮单击事件的消息映射函数
4)功能的扩展
因为spin控件的初始范围是100~0,若不重新设置范围,单击向下箭头是增加,单击向上箭头是减少,因此可在编辑框失去焦点时设置两个spin控件的选择范围,添加编辑框失去焦点事件的消息映射函数。
如图4所示。
图4编辑框失去焦点事件的消息映射函数
2.列表框示例
设置如下界面,在程序运行时,列表框中添加1到50的整数,单击“判断”按钮,判断列表框被选中项是不是素数,并在编辑框中显示出判断结果。
图5例2界面
步骤:
1)创建并设计对话框
布置界面、设置控件属性。
将“确定”按钮的标题改为“判断”,“取消”按钮的标题改为“取消”。
将列表框属性对话框“styles”页面中的sort属性去除,否则将按字符串的顺序排序。
将编辑框属性对话框“styles”页面中的Read-only属性选中。
2)添加与控件相连的成员变量
在“建立类向导”中设置编辑框和复选框相连的控件变量。
如图6所示。
图6 设置控件变量
3)添加消息映射函数
① 在程序运行时,列表框中添加1到50的整数。
程序运行时对话框初始状态设置,一般都在对话框的初始化函数OnInitDialog中添加相应代码。
② 添加“判断”按钮单击事件的消息映射函数。
如图7所示。
图7“判断”按钮单击事件的消息映射函数
4)功能的扩展
双击列表框中某一项,相当于单击“判断”按钮,也执行判断的操作。
因此可添加列表框双击事件的消息映射函数,函数体里只要调用判断按钮的单击事件的消息映射函数体即可。
如图8所示。
图8列表框双击事件的消息映射函数
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- MFC2