VC++基础控件案例图详解.docx
《VC++基础控件案例图详解.docx》由会员分享,可在线阅读,更多相关《VC++基础控件案例图详解.docx(32页珍藏版)》请在冰豆网上搜索。
VC++基础控件案例图详解
一.简单MFC应用程序开发。
例1.编写如下图的程序,若单击“复制”按钮,则把上面的编辑框中的内容复制到下面的编辑框中;若单击“结束”按钮,则退出程序的运行。
(1)工程创建
选择“文件|新建”命令;
在“工程”选项卡中,选定“MFCAppWizard(exe),输入工程名称TEST,单击“确定”按钮;
选定“D基本对话框”即创建基于对话框的应用程序,单击“完成”按钮。
(2)放置控件,先删除原有的控件,然后放置本例需要的控件,本例共涉及4个控件:
2个编辑框和2个命令按钮。
编辑框主要用来输入数据,也可以用来显示数据;命令按钮用来执行有关操作。
(3)设置控件的属性,控件添加后就要设置其有关的属性。
上编辑框的属性设置:
选定“Multiline”复选框,编辑框中可以输入多行文本;选定“Verticalscroll和AutoVScroll,编辑框将有垂直滚动条;选定“WantReturn”。
下编辑框的属性设置同上编辑框,但可不选定“WantReturn”。
(4)连接变量,为控件连接变量就是为控件起一个名字。
每一个控件都是一个对象,调用MFC类库中的函数都是通过对象来实现的。
编辑框属于CEdit类,一个具体的编辑框就是一个CEdit类的对象,如上IDC_EDIT1和IDC_EDIT2。
这些对象必须有名称才能对它们进行操作,所以要给每一个对象连接一个变量,作为对象的名称。
这个变量将成为类中的一个数据成员。
现在为IDC_EDIT1连接一个变量m_e1。
在IDC_EDIT1编辑框中右击鼠标出现快捷菜单选择“建立类向导”,如下图所示。
在上图中选择“创建类向导”后,弹出如下图所示的MFCClassWizard对话框,在“MemberVariables”中,选定“IDC_EDIT1”,再选择“AddVariable”按钮。
出现下图所示的AddMemberVariable对话框中输入以下的数据:
MemberVariablename(成员变量名):
m_e1;
Category(类别):
Control;
Variabletype(类型):
CEdit。
用同样的方法为IDC_EDIT2连接一个变量m_e2,结果如下图所示。
(5)添加并且编写消息处理函数,在建立了对话框(用户操作界面)、设置控件属性和连接变量后,就要考虑为哪些控件编写什么样的消息处理函数了。
本例要求单击“复制”按钮后,编辑框中的内容复制到下面的编辑框中。
也就是说,在程序运行时,在“复制”按钮上发生单击事件后,Windows向对话框发出了一个BN_CLICKED消息,CTESTDlg类应有一个处理该消息的函数。
添加和编写这个消息处理函数的过程是:
双击“复选”按钮,弹出如下图所示的“AddMemberFunction”对话框,输入函数名(缺省函数名为OnButton1),单击“确定”按钮后,添加了一个空函数。
另一个方法是在“MFCClassWizard”对话框“MessageMaps”选项卡中,选定IDC_BUTTON1和BN_CLICKED消息,如图所示,然后单击“AddFunction”按钮即可。
再单击EditCode按钮,出现如下消息处理函数。
为消息处理函数voidCTESTDlg:
:
OnButton1()和voidCTESTDlg:
:
OnButton2()分别添加代码如下图所示。
二.静态文本框、命令按钮和编辑框的使用
静态文本框,是最简单的控件,它主要用来显示文本信息,不能接受用户输入,一般不需要连接变量,也不需要处理消息。
命令按钮,是最常见的、应用最广泛的一种控件。
在程序执行期间,若单击某个命令按钮,则执行相应的消息处理函数。
命令按钮的主要属性是标题属性,该属性用来设置命令按钮上显示的文本。
命令按钮一般不需要连接变量。
命令按钮能处理BN_CLICKED消息。
编辑框,是一个文本编辑区域,用户可以在该区域输入、编辑和显示正文内容。
由于编辑框内置了一定的编辑功能,如剪切、复制、粘贴、撤销等功能,一般不需要对它进行编程。
(1)属性设置,编辑框的重要属性(样式style选项卡中)设置:
Multiline,定义该编辑框为多行文本框;Number,限定输入的字符只能是数字字符;Boder为控件创建边界;Read-only,编辑框成为只读的,禁止用户编辑修改。
(2)成员函数,编辑框常用的成员函数如下表所示。
成员函数
功能
应用示例
SetSel(n,m)
选定编辑框中从第n个字符到第m个字符的内容。
SetSel(0,-1)的作用是选定所有的内容
(0,-1);
Copy()
将编辑框中当前选定的内容复制到剪切板
();
Cut()
将编辑框中当前选定的内容剪切到剪切板
();
Clear()
删除编辑框中当前选定的内容
();
Paste()
把剪贴板中内容粘贴到编辑框中光标所在位置
();
GetLine(n,ch)
将多行编辑框中第n行的内容复制到ch中,ch一般为字符数组
charch[80];
(0,ch);
ReplaceSel(ch)
将ch中内容替换编辑框中选定的内容
charch[80]=”abcd”;
(ch);
Undo()
撤销对编辑框的最后一次操作
();
由于CEdit是从CWnd类直接派生来的,所以编辑框可以使用CWnd类的成员函数。
CWnd类的重要成员函数有:
获取编辑框中内容:
GetWindowText(CString&rString)const;将编辑框中内容复制到CString类对象rString中。
例如,将编辑框m_e中内容复制到CString类对象ch中:
CStringch;
(ch);
例如,将编辑框m_e中内容复制到字符数组ch中:
charch[80];
(ch,80);
设置编辑框中内容:
voidSetWindowText(LPCTSTRlpszString);将lpszString中内容替换编辑框中原有内容,lpszString是字符数组或字符串指针。
例如:
设置编辑框中的内容为“abcdefg”:
charch[20]=”abcdefg”;
(ch);
(3)连接变量
编辑框在连接变量时,除了要指定变量名之外,还要确定变量类别。
变量类别有两个可选择:
Control是指该变量作控件使用,对应的变量类型只能是Cedit,可以使用该控件类的成员函数;Value,是指该变量作C/C++中普通的变量使用,对应的变量类型有CString、int、double等。
如下图所示。
注意:
如果一个编辑框连接了一个Value类别的变量,则该变量就表示这个编辑框,编辑框中显示的内容就是变量的值。
但是,改变了编辑框的内容并不会自动更新对应的变量的值,同样改变了变量的值也不会自动刷新编辑框的内容。
若要保持一致,需要使用UpdateData()函数更新:
若编辑框的内容改变了,则应使用语句UpdateData(TRUE);更新对应的变量的值;若变量的值改变了,则应使用语句UpdateData(FALSE);刷新编辑框的内容。
例2,输入一元二次方程ax2+bx+c=0的系数a、b、c,计算并输出两个根x1、x2,如下图所示。
说明:
建立工程名为FC,对话框上有5个静态文本框、5个编辑框和2个命令按钮。
为5个编辑框连接的变量如下图,类型都是value,数据类型都是double。
为了计算b2-4ac的平方根,需要使用sqrt()函数,因此在文件的开头添加文件包含命了:
#include“”。
“计算”和“结束”按钮的消息函数如下图所示。
例3,编写一个对输入的字符串进行转换的程序。
转换规则为:
将大写字母转换成小写;将小写转换成大写;换行符和回车符不变;其余字符转换为“*”。
要求每输入一个字符立即进行判断和转换。
程序运行界面如下图所示,其上仅放有2个编辑框,它们的属性如下表所示,连接的变量分别是m_e1和m_e2,都是Control类别。
控件
属性
属性值
m_e1
ID
缺省
Multiline
选定
VerticalScroll
选定
AutoVScroll
选定
WantReturn
选定
m_e2
ID
缺省
Multiline
选定
VerticalScroll
选定
AutoVScroll
选定
Readonly
选定
为了在每输入一个字符后立即进行判断和转换,编写了“EN_CHANGE”的消息函数,如下图所示。
三.框架、单选按钮和复选框
框架、单选按钮和复选框都是对话框的常见控件,框架与静态文本框一样是CString类的对象,单选按钮和复选框与命令按钮都是CButton类的对象。
1.框架
当对话框上控件较多时,可以使用框架将一组相关的控件框起来,达到标识一组控件的作用。
框架不需要连接变量,也不需要处理消息。
框架的重要属性有:
ID,所有框架的缺省ID都是IDC_STATIC,不需要重新设置;标题,该属性决定框架上的标题文本。
2.单选按钮,单选按钮必须成组出现,用户在一组单选按钮中最多只能选择一项。
当某一项被选定后,其他选项自动变成未选状态。
窗体中放置一组单选按钮的方法:
同一组按钮必须一个接一个地放进对话框中,中间不能插入其他控件,并且一个组的第一个按钮要选中“Group”属性,表示一组控件的开始。
打开MFCClassWizard的MemberVariables选项卡,可以发现一组中只有第一个按钮的ID被显示,这意味着只能对第一个按钮连接变量。
单选按钮的重要属性:
ID,每个单选按钮都有一个缺省ID,如IDC_RADIO1,可以重新设置;标题,该属性值就是单选按钮右边显示的文本标题;Group,一组中第一按钮选中该属性,表示它是一组的开始。
单选按钮的消息函数:
BN_CLICKED。
单选按钮的重要成员函数:
(1)设定单选按钮选中状态,初始时,可使用WindowAPI函数CheckRadioButton()设定一组单选按钮中选中的按钮。
形式:
voidCheckRadioButton(intnIDFirstButton,intnIDLastButton,intnIDCheckButton);
说明:
nIDFirstButton是一组中第一个单选按钮的ID;nIDLastButton,是一组中最后一个单选按钮的ID;nIDCheckButton为初始时设置为选中的那个单选按钮的ID。
(2)判定单选按钮是否被选定
形式:
UNITIsDlgButtonChecked(intnIDButton)const;
说明:
如果ID为nIDButton的单选按钮被选中,则该函数的返回值为true,否则为false。
例4,设计一个如下右图所示的程序。
当单击“确定”按钮后,用AfxMessageBox函数显示有关信息,如左图所示。
界面设计:
首先创建一个对话框程序(工程名称为DXAN),然后放置控件,进行属性设置,将编辑框连接到Value类CString类型的m_e变量,其余控件不需要连接变量。
对其中IDC_RADIO1、IDC_RADIO2(它们用第一个框架框上,第一个框架的标题属性修改为“性别”,如下图GroupBox属性设置对话框所示)的标题属性分别设置为“男”(如下图RadioButton属性设置对话框)、“女”,将IDC_RADIO1的Group属性选定。
对其中IDC_RADIO3、IDC_RADIO4和IDC_RADIO5(它们用第二个框架框上,第二个框架的标题属性修改为“职称”)的标题属性分别设置为“教授”、“副教授”和“讲师”,将IDC_RADIO3的Group属性选定。
初始化设置:
单选按钮的初始化工作在对话框的初始化函数中实现,初始化函数建立如下图MFCClassWizard中,单选按钮的初始化代码见下图代码窗口中OnInitDialog成员函数的红框区域中。
“确定”按钮的消息处理函数代码如下图所示:
3.复选框
复选框列出了可供选择的项,用户可根据需要选择其中的一项或多项,各选项之间的状态互不相关。
重要属性:
ID,每个复选框都有一个缺省ID,如IDC_CHECK1;标题,该属性值决定了复选框右边显示的文本标题。
连接变量,复选框通常被连接到Value类别BOOL类型的变量。
消息:
复选框能处理BN_CLICKED消息。
例5,设计一个如图所示的程序,当单击“确定”按钮后,在右边的编辑框中显示有关信息。
界面设计:
首先,创建一个基于对话框的界面(工程名称FXK)。
然后放置控件(原有控件删除,再重新放置两个编辑框、一个框架、三个复选框和一个按钮)。
接着,进行属性设计,2个编辑框属性基本不变,右下的编辑框的只读属性选中;复选框的标题属性分别设置为“旅游”(如下图所示)、“运动”、“音乐”。
第四步,对编辑框和复选框分别建立连接变量如下表所示。
控件
变量名
变量类别
变量类型
编辑框1
m_e1
Value
CString
编辑框2
m_e2
Value
CString
复选框1
m_c1
Value
BOOL
复选框2
m_c2
Value
BOOL
复选框3
m_c3
Value
BOOL
最后,输入“确定”按钮的消息处理函数,如下图所示。
四.列表框和组合框
列表框是CListBox类的对象,组合框是CComboBox类的对象。
1.列表框,它通过显示多个选项,供用户选择,达到与用户对话的目的。
如果有较多的选项而不能一次全部显示时,系统会自动加上滚动条。
列表框最主要的特点是只能进行选择,而不能直接修改其中的选项。
列边框的重要属性:
selection(选择,如下图),属性值有:
Single-单个选择;Multiple-多个选择,但是忽略Ctrl和Alt键;Extended-允许使用Ctrl和Alt键的多项选择;None-禁止选择。
sort(分类),当该属性被选定后,列边框中选项按字母顺序排列。
列边框的成员函数(假定某窗体中添加的列边框已经建立了Contrlo类别的CListBox类型的连接变量m_l):
添加项目:
格式:
intAddString(LPCTSTRlpszItem);
例如:
语句(“万里”);把“万里”这项添加到列边框m_l中。
删除项目:
格式:
intDeleteString(UNITnIndex);说明:
nIndex表示被删除项目在列边框中位置,对于第一个选项,nIndex应为0。
例如:
语句(4);删除列表框中第五个项目。
获取当前选定的项目的序号:
格式:
intGetCurSel()const;
例如,语句inti=();将使i获得m_l列表框中当前选定的项目的序号。
获取列表框中指定的项目:
格式1:
intGetText(intnIndex,LPTSTRlpszBuffer)const;
格式2:
voidGetText(intnIndex,CStrin&rString)const;
说明:
将列表框中每nIndex个选项的文本送到lpszBuffer或rString中。
例如:
chars1[20];CStrings2;
(4,s1);(4,s2);这两条语句将第5项内容分别送给了s1和s2
例6.编写一个能对列表框进行项目添加、修改和删除操作的应用程序,如下图所示。
“添加”按钮的功能是将文本框中内容添加到列表框,“删除”按钮的功能是删除列表框中选定的选项。
如果要修改列表框,则首先选定选项,然后单击“修改”按钮,所选的选项显示在文本框中,当在文本框中修改完成之后再单击“修改确定”按钮更新列表框。
界面设计:
创建一个基于对话框的界面(工程名称为LBK),在其上添加1个列表框、1个编辑框和五个按钮(设置五个按钮的标题属性分别是“添加”、“删除”、“修改”、“确定修改”、“退出”),如下图所示。
列表框的连接变量是Control类的CListBox类型的m_l,编辑框的连接变量是Value类的CString类型的m_e。
窗体的初始化消息函数中实现对列表框内容的初始添加:
使用其AddString函数添加。
各按钮消息处理函数如下图所示。
2.组合框
组合框是组合了编辑框和列表框的特性而形成的控件。
组合框在列表框中列出可供用户选择的项,当用户选定了某项后,该项内容自动装入编辑框中。
组合框有三种样式:
简单组合框(Simple)、下移式组合框(Dropdown)、下拉式列表框(Droplist),如下图所示。
属性设置:
由于组合框包含了编辑框和列表框因此它有许多属性,大多数编辑框和列表框的属性可适用于组合框,下面的两个属性是组合框独有的。
类型(Type)共有简单、下移和下拉列表,默认值是下移。
键入列表框项(Enterlistboxitems),在列表框的属性窗口“Data”选项卡中有一个键入式列表框项,这里可以在设计阶段完成对组合框的初始输入。
注意,每当一项输入完成后按Ctrl+Enter键才能输入下一项。
特别提醒:
运行时,组合框的高度如果没有调节好是无法显示出下拉内容的,调节组合框的高度方法是点击组合框下拉的那个箭头然后在调节高度就是有效的了。
常用的成员函数:
编辑框和列表框的成员函数几乎都可以用于组合框,但是列表框的成员函数GetText()在组合框中变成GetLBText()。
格式1:
intGetLBText(intnIndex,LPTSTRlpszText)const;
格式2:
voidGetLBText(intnIndex,CString&rString)const;
说明:
使用GetLBText()函数将组合框中的第nIndex项的文本送入lpszText(字符数组)或rString(字符串变量)。
组合框触发的消息:
CBN_SELECTCHANGE:
组合框的列表框中选项改变时触发。
CBN_EDITCHANGE:
组合框的编辑框中文本改变时触发。
例7,设计一个如图所示的对话框。
如果单击“确定”按钮,则用消息框显示选择的信息,如下图所示。
说明,创建一个基于对话框的界面,然后放置控件:
两个静态文本、1个组合框、1个编辑框和1个按钮。
组合框的选项在设计阶段直接输入。
组合框的连接变量是Value类的CString类型的m_c,编辑框的连接变量是Value类的CString类型的m_e。
确定按钮的消息处理函数如下图所示。
五.滚动条
滚动条是CScrollBar类的对象,用来协助显示数据或确定位置,也可以用来作为数据输入的工具,滚动条有水平和垂直两种。
例8建立一个水平滚动条,最小值为0,最大值为100,单击滚动条两端箭头时滑块移动的增量值为2,单击滚动条中空白处(滑块与两端箭头之间的区域)时滑块移动的增量值为10。
界面上还有一个只读的编辑框,显示滑块当前位置所代表的值。
说明:
首先,创建工程名为GDT的界面,然后放置1个水平滚动条和一个编辑框(只读属性选定),建立水平滚动条的Control类的CScrollBar类型的连接变量m_s,建立编辑框的Value类的int类型的连接变量m_e。
接着,初始化设置。
滚动条的初始化就是设置最小值、最大值和初始时滑块所代表的值。
滚动条初始化在对话框的初始化函数(如下图所示)中完成,涉及两个成员函数:
设置最大值和最小值
格式:
voidSetScrollRange(intnMinPos,intnMaxPos,BOOLbRedraw=TRUE)
说明:
nMinPos表示最小值,nMaxPos表示最大值。
当bRedraw=TRUE时重画滚动条。
设置滑块的位置
格式:
intSetScrollPos(intnPos,BOOLbRedraw=TRUE)
说明:
nPos表示滑块的位置。
当bRedraw=TRUE时重画滚动条。
然后,编写消息处理函数。
当用户在滚动条上进行操作时,滚动条接收不到任何消息。
但是对话框却能接收到WM_HScroll(水平滚动条)或WM_VScroll(垂直滚动条)消息,即程序对滚动条的操作只能在OnHScroll()或OnVScroll()中编写代码。
滚动条处理WM_HScroll消息的函数为OnHScroll()函数,如下图所示。
其中:
pScrollBar是指向用户正在进行操作的滚动条;nPos表示滑块当前的位置;nSBCode是指示用户正在进行的操作,其取值及其意义如下表所示。
用户操作
触发的消息函数
拖动滑块
SB_THUMBTRACK
单击向上(左)的箭头
SB_LINELEFT/SB_LINEUP
单击向下(右)的箭头
SB_LINERIGHT/SB_LINEDOWN
单击向上(左)的箭头与滑动区块之间的区域
SB_PAGELEFT/SB_PAGEUP
单击向下(右)的箭头与滑动区块之间的区域
SB_PAGERIGHT/SB_PAGEDOWN
滑动条的WM_HScroll消息的处理函数OnHScroll的代码如下图所示。
六.时钟
CTime类是MFC中一个封装日期和时间的类,它有一个静态成员函数GetCurrentTime(),返回系统当前的日期和时间。
例9,设计如下图的窗体对话框(工程名称为SZ),放置一个框架、两个复选框、两个编辑框,复选框和编辑框的属性设置、连接变量的建立如下表所示。
控件
属性设置
变量名
变量类
变量类型
复选框
标题为“日期”
m_k1
Value
BOOL
复选框
标题为“时间”
m_k2
Value
BOOL
编辑框
选定“只读”
m_e1
Value
CString
编辑框
选定“只读”
M_e2
Value
CString
两个复选框的单击选中消息处理函数代码如下图所示: