C++MFC控件使用详解Word文档格式.docx

上传人:b****2 文档编号:5232905 上传时间:2023-05-04 格式:DOCX 页数:43 大小:38.75KB
下载 相关 举报
C++MFC控件使用详解Word文档格式.docx_第1页
第1页 / 共43页
C++MFC控件使用详解Word文档格式.docx_第2页
第2页 / 共43页
C++MFC控件使用详解Word文档格式.docx_第3页
第3页 / 共43页
C++MFC控件使用详解Word文档格式.docx_第4页
第4页 / 共43页
C++MFC控件使用详解Word文档格式.docx_第5页
第5页 / 共43页
C++MFC控件使用详解Word文档格式.docx_第6页
第6页 / 共43页
C++MFC控件使用详解Word文档格式.docx_第7页
第7页 / 共43页
C++MFC控件使用详解Word文档格式.docx_第8页
第8页 / 共43页
C++MFC控件使用详解Word文档格式.docx_第9页
第9页 / 共43页
C++MFC控件使用详解Word文档格式.docx_第10页
第10页 / 共43页
C++MFC控件使用详解Word文档格式.docx_第11页
第11页 / 共43页
C++MFC控件使用详解Word文档格式.docx_第12页
第12页 / 共43页
C++MFC控件使用详解Word文档格式.docx_第13页
第13页 / 共43页
C++MFC控件使用详解Word文档格式.docx_第14页
第14页 / 共43页
C++MFC控件使用详解Word文档格式.docx_第15页
第15页 / 共43页
C++MFC控件使用详解Word文档格式.docx_第16页
第16页 / 共43页
C++MFC控件使用详解Word文档格式.docx_第17页
第17页 / 共43页
C++MFC控件使用详解Word文档格式.docx_第18页
第18页 / 共43页
C++MFC控件使用详解Word文档格式.docx_第19页
第19页 / 共43页
C++MFC控件使用详解Word文档格式.docx_第20页
第20页 / 共43页
亲,该文档总共43页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

C++MFC控件使用详解Word文档格式.docx

《C++MFC控件使用详解Word文档格式.docx》由会员分享,可在线阅读,更多相关《C++MFC控件使用详解Word文档格式.docx(43页珍藏版)》请在冰点文库上搜索。

C++MFC控件使用详解Word文档格式.docx

对模式对话框,在创建函数返回后即可删除对象。

无模式对话框不是同步的,在创建函数调用后立即返回,因而不知道何时删除对象,但可以通过重载CWnd:

PostNcDestroy函数并执行清除操作。

5.1.2使用对话框编辑器

打开对话框编辑器

将项目工作区窗口切换到ResourceView页面,双击Dialog目录下任意一个对话框ID。

或者,选择“Insert”“Resource”菜单命令(或按快捷键Ctrl+R),选择Dialog项,单击New。

在对话框中添加和编辑控件

(1)控件添加的方法

在对话框中添加一个控件的方法有下列几种:

在控件工具栏中单击某控件,鼠标箭头在对话框变成“十”字形状;

在对话框指定位置单击鼠标左键,再拖动选择框可改变控件的大小和位置。

在控件工具栏中单击某控件,鼠标箭头对话框变成“十”字形状;

在指定位置处单击鼠标左键不放,拖动鼠标至满意位置,释放鼠标键。

用鼠标左键点中控件工具栏中的某控件,并按住鼠标键不放;

在移动鼠标到对话框的指定位置的过程中,会看到一个虚线框,下面带有该控件的标记;

释放鼠标键。

(2)单个控件的选取

鼠标选取

保证选择按钮()是被选中的,移动鼠标指针至指定的控件上,单击鼠标左键。

助记符选取

在相应的控件上右击。

选择“Properties”菜单项,对话框中的“Caption”框是用来输入控件的标题,在标题中的某个字母之前键入“&

”符号,则该字母就是此控件的助记符。

Tab键选取

利用Tab键,可在对话框的控件中进行选择。

每按一次Tab键依次选取对话框中的下一个控件,若按住Shift键,再单击Tab键则选取上一个控件。

(3)多个控件的选取

在对话框按住鼠标左键不放,拖出一个大的虚框,释放鼠标,则被该虚框所包围的控件都将被选取。

先按住Shift键不放,用鼠标选取控件,直到所需要的多个控件选取之后再释放Shift键。

若在选取时,对已选取的控件再选取一下,则该控件取消选取。

一旦单个控件被选取后,其四周由选择框包围着,选择框上还有几个(通常是八个)蓝色实心小方块,拖动它可改变控件的大小,如图。

多个控件被选取后,其中只有一个控件的选择框有几个蓝色实心小方块,这个控件称为主要控件,而其他控件的选择框的小方块是空心的。

如图。

(4)控件的移动、删除和复制

当单个控件或多个控件被选取后,按方向键或用鼠标拖动控件的选择框可移动控件。

若在鼠标拖动过程中还按住Ctrl键则复制控件。

若按Del键可将选取的控件删除。

(5)设定控件的Tab键次序

一是改变用Tab键选择控件的次序,二是当两个或两个以上的控件构成一组时,需要它们的Tab键次序连续。

对话框控件的Tab键次序设定步骤如下:

首先,选择“Layout”“TabOrder”命令,或按Ctrl+D,此时每个控件的左上方都有一个数字,表明了当前Tab键次序,如图。

其次,按新的次序依次用鼠标单击各个控件,新的Tab键即可生成。

最后,单击对话框或按Enter键结束TabOrder方式。

对话框的控件的布局

大多布置控件的命令使用前,需要选取多个控件,且“主要控件”起到了关键作用。

多个控件的布置过程中,常需要重新设置“主要控件”。

设置的方法是按住Ctrl或Shift键,用鼠标单击所要指定的控件。

系统提供了网格、标尺等辅助工具。

在图5.5的控件布局工具栏的最后两个按钮分别用来网格和标尺的切换。

一旦网格显示,添加或移动控件时都将自动定位在网格线上。

“Layout”菜单下的“GuideSettings”命令提供了设置网格单元大小的功能,如图。

测试对话框

5.1.3对话框的编程

添加对话框资源

选择“Insert”“Resource”菜单命令(或按Ctrl+R),若单击Dialog项左边的“+”号,将展开对话框资源的不同类型选项,如图。

改变对话框的属性

在对话框模板的非控件的区域左击,用下列方式之一打开属性对话框:

选择“View”菜单“Properties”命令或按Alt+Enter健。

用鼠标右击对话框模板,选取Properties命令。

如图,General是对话框属性的默认显示页面,其中列有对话框的标识符名称框、标题框等,具体说明如表。

向对话框添加控件

添加一个类:

注意:

以字母c开头

在对话框模板的非控件的区域双击,如图的对话框。

单击[OK],弹出如图的对话框。

可以为对话框资源定义一个新类名c123。

消息映射首先添加“按钮”

单击[OK]按钮,出现“MFCClassWizard”对话框,如图。

选定IDC_BUTTON1的BN_CLICKED,双击左键或单击[AddFunction]按钮,如图。

对话框中,可以为添加的成员函数名重新定义,单击[OK]。

选定成员函数OnButton1项,双击左键或单击[EditCode]按钮,在此成员函数添加代码。

不同资源对象(控件、菜单命令等)的消息是不相同的。

例如,按钮控件IDC_BUTTON1的消息有两个:

BN_CLICKED和BN_DOUBLECLICKED,分别表示当用户单击或双击该按钮时产生的消息。

一般不需要对图5.10对话框中的[OK](确定)与[Cancel](取消)按钮进行消息映射,因为系统已自动设置了这两个按钮的动作,当用户单击这两个按钮都将自动关闭对话框。

程序在三处添加新用户代码

(1)在头文件(MyDlg.h文件)中声明消息处理函数OnButton1:

protected:

//{{AFX_MSG(CMyDlg)

afx_msgvoidOnButton1();

//}}AFX_MSG

(2)在MyDlg.cpp源文件开头部分的消息映射入口,添加消息映射宏:

BEGIN_MESSAGE_MAP(CMyDlg,CDialog)//消息映射开始

//{{AFX_MSG_MAP(CMyDlg)

ON_BN_CLICKED(IDC_BUTTON1,OnButton1)

//}}AFX_MSG_MAP

END_MESSAGE_MAP()//消息映射结束

表明消息及其处理函数之间的联系。

单击按钮控件IDC_BUTTON1时,系统将自动调用OnButton1函数。

(3)在MyDlg.cpp文件中写入一个空的消息处理函数的模板,以便用户填入具体代码,如下面的框架:

voidCMyDlg:

OnButton1()

{

//TODO:

Addyourcontrolnotificationhandlercodehere

}

在程序中使用对话框

(1)利用项目工作区的ClassView标签项,将Ex_SDIHello.cpp源文件打开;

(2)在Ex_SDIHello.cpp源文件的前面加上包含类CMyDlg的头文件:

#include"

MyDlg.h"

(3)在InitInstance函数体中的“returnTRUE;

”语句之前添加下列代码:

CMyDlgdlg;

dlg.DoModal();

DoModal是模式对话框最常用的函数,它负责对话框的显示和终止。

(4)编译并运行。

在程序的一开始就出现用户自己设计的对话框,单击[Button1]按钮将弹出“欢迎进入对话框的设计!

”的消息对话框来。

5.2控件的创建和使用方法

5.2.1控件的创建方法

控件的创建方式有以下两种:

1。

一种是在对话框模板中用编辑器指定控件,也就是说,将控件的父窗口指定为对话框,这样做的好处是明显的,因为当应用程序启动该对话框时,Windows系统就会为对话框创建控件;

而当对话框消失时,控件也随之清除。

2。

另一种方式是将控件看作是任一窗口的子窗口,并通过调用相应的Create函数来创建。

[例Ex_SDIHello]在上例Ex_SDIHello的基础上用子窗口方式创建控件。

(1)打开CMyDlg的头文件MyDlg.h,添加一个按钮类CButton指针变量:

classCMyDlg:

publicCDialog

//Construction

public:

CMyDlg(CWnd*pParent=NULL);

//standardconstructor

CButton*m_btnWnd;

}

5.2控件的创建和使用方法

(2)按Ctrl+W快捷键打开对话框,切换到MessageMaps页面,在ObjectIDs列表中选定“CMyDlg”项,并在Message列表中找到WM_INITDIALOG消息,双击鼠标左键,然后单击[EditCode]按钮,添加下列代码:

BOOLCMyDlg:

OnInitDialog()

{CDialog:

OnInitDialog();

Addextrainitializationhere

m_btnWnd=newCButton();

//构造按钮控件

m_btnWnd->

Create("

你好"

WS_CHILD|WS_VISIBLE|BS_PUSHBUTTON,

CRect(20,20,120,60),this,201);

//创建

CFont*font=this->

GetFont();

//获取对话框的字体

m_btnWnd->

SetFont(font);

//设置控件字体

returnTRUE;

//returnTRUEunlessyousetthefocustoacontrol

//EXCEPTION:

OCXPropertyPagesshouldreturnFALSE

Create用来创建一个按钮控件,第一个参数指定按钮的标题,第二个参数指定控件的风格,第三个参数指定它在父窗口中的位置和大小,第四个参数指定父窗口指针,最后一个参数是指定该控件的标识值。

(3)编译并运行,

结论:

采用第一种办法

5.2.2控件的数据交换和数据校验ddx交换,ddv校验

例如,为CMyDlg类的按钮控件IDC_BUTTON1添加并使用其成员变量m_MyBtn,则其相应的过程如下:

(1)启动MFCClassWizard,切换到MemberVariables页面,如图。

(2)选定Classname为CMyDlg,然后在ControlIDs列表中,选定所要关联的控件ID号IDC_BUTTON1,双击鼠标左键或单击[AddVariable]按钮,如图。

(3)在Membervariablename框中填好与控件相关联的成员变量m_MyBtn,单击[OK],在ControlIDs列表中出现刚才添加的容。

需要说明的是,

DDV/DDX技术中,允许为同一个控件关联多个数据成员变量,但必须保证这些变量名是互不相同的(control(控件类),value(具体数据))且这些变量在同一个类型不能有多个变量。

如果添加的成员变量是一个数值类型,则在MFCClassWizard对话框的MemberVariables页面下方还要求用户输入变量的围,这就是控件的数据校验设置。

同样方法为edit添加m_stredit

(4)单击[OK],发现ClassWizard作了以下三方面的修改。

1在MyDlg.h文件中,添加与控件关联的成员变量的声明,代码如下:

//DialogData

//{{AFX_DATA(CMyDlg)

enum{IDD=IDD_DIALOG1};

CButtonm_MyBtn;

CStringm_strEdit;

//}}AFX_DATA

2在MyDlg.cpp文件中的CMyDlg构造函数实现代码处,添加数据成员变量的初始代码:

CMyDlg:

CMyDlg(CWnd*pParent/*=NULL*/)

:

CDialog(CMyDlg:

IDD,pParent)

{//{{AFX_DATA_INIT(CMyDlg)

m_strEdit=_T("

"

);

//}}AFX_DATA_INIT

3在MyDlg.cpp文件中的DoDataExchange函数体,添加控件的DDX/DDV代码。

DoDataExchange(CDataExchange*pDX)

DoDataExchange(pDX);

//调用此函数作为DDX的开始

//{{AFX_DATA_MAP(CMyDlg)

DDX_Control(pDX,IDC_BUTTON1,m_MyBtn);

DDX_Text(pDX,IDC_EDIT1,m_strEdit);

DDV_MaxChars(pDX,m_strEdit,20);

//}}AFX_DATA_MAP

(5)为一个控件定义一个关联的数据成员变量后,就可以使用CWnd:

UpdateData控件相关数据的输入和读取

True:

控件传给变量

False:

变量传给控件

函数实现控件的控制,包括控件相关数据的输入和读取。

运行该程序,当在编辑框中输入“Hello”后,单击[Button1]按钮,则此时该按钮的名称就变成了编辑框控件中的容“Hello”,如图。

voidc123:

OnButton1()c123--button1—click

{

//TODO:

UpdateData();

m_mybtn.SetWindowText(m_stredit);

}

5.2.3控件的通用属性

5.2.4控件的消息

控件的编程和使用过程中,可以向控件发送消息来完成特定的任务,或者是根据控件产生的消息执行自己的代码(主要)。

应用程序创建一般控件或公共控件之后,控件的状态发生改变时,控件就会向其父窗口发送消息,这个消息称为“通知消息”。

对于每个消息,系统都会用一个MSG结构来记录,MSG具有下列结构:

typedefstructtagMSG{//msg

HWNDhwnd;

//接收到消息的窗口句柄

UINTmessage;

//消息

WPARAMwParam;

//消息的附加信息,它的含义取决于message

LPARAMlParam;

//消息的附加信息,它的含义取决于message

DWORDtime;

//消息传送时的时间

POINTpt;

//消息传送时,光标的屏幕坐标

}MSG;

对于一般控件来说,通知消息通常是一条WM_COMMAND消息,这条消息的wParam参数的低位字中含有控件标识符,wParam参数的高位字则为通知代码,lParam参数则是指向控件的句柄。

对于公共控件,通知消息通常是一条WM_NOTIFY消息,wParam参数是发送通知消息的控件的标识符,lParam参数是指向NMHDR结构的指针。

对于有些控件的通知消息,lParam参数是指向一个更大的结构,且结构中的第一个成员还必须具有NMHDR结构。

对于控件的WM_COMMAND或是WM_NOTIFY消息,都可以用ClassWizard对它们加以映射。

尽管控件的各自通知消息并不相同,但下列的通知消息是所有Windows控件所共有的:

NM_CLICK在控件中单击鼠标左按钮

NM_DBLCLK在控件中双击鼠标左按钮

NM_RCLICK在控件中单击鼠标左按钮

NM_RDBLCLK在控件中双击鼠标右按钮

NM_RETURN当控件具有输入焦点时按下ENTER键

NM_SETFOCUS控件得到输入焦点

NM_KILLFOCUS控件失去输入焦点

NM_OUTOFMEMORY没有足够的存使控件完成操作

添加消息映射

类向导-c123-c123-oncommand:

BOOLc123:

OnCommand(WPARAMwParam,LPARAMlParam)

Addyourspecializedcodehereand/orcallthebaseclass

WORDaa=HIWORD(wParam);

WORDbb=LOWORD(wParam);

if((bb==IDC_BUTTON2)&

&

(aa==BN_CLICKED))

MessageBox("

abc"

returnCDialog:

OnCommand(wParam,lParam);

5.3常用控件

根据控件的特性和功能,一般可将其分为三类:

Windows公共控件、ActiveX控件以及MFC新增的一些控件等。

5.3.1静态控件和按钮

静态控件

一个静态控件是用来显示一个字符串、框、矩形、图标、位图或增强的图元文件。

它可以被用来作为标签、框或用来分隔其它的控件。

一个静态控件一般不接收用户输入,也不产生通知消息。

在对话框编辑器的控件工具栏中,属于静态控件的有:

静态文本()、组框()和静态图片(添加bmp图片资源-设置图片为bmp格式-选择)()三种。

按钮

(1)按键按钮

通常可以立即产生某个动作,执行某个命令,常被称为命令按钮。

两种风格:

标准按键按钮和默认按键按钮。

从外观上来说,默认按键按钮是在标准按键按钮的周围加上一个黑色边框,这个黑色边框表示该按钮已接受到键盘的输入焦点,只须按回车键就能按下该按钮。

具体设定的方法是在按键按钮属性对话框的Style页面中选中“Defaultbutton”项。

(2)单选按钮

外形是在文本前有一个圆圈,被选中时,就标上一个黑点,可分为一般和自动两种类型。

自动类型中,若选中同组按钮中的某个单选按钮,则其余的单选按钮的选中状态就会清除,保证了多个选项始终只有一个被选中。

(3)复选框

外形是在文本前有一个空心方框,被选中时,复选框中就加上一个“”标记,三态复选框还有种处于灰框状态,表示“不确定”。

设定成三态复选框的方法是在复选框属性对话框的Style页面中选中“Tri-state”项。

按钮的消息

常见的只有两个:

BN_CLICKED和BN_DOUBLE-CLICKED。

按钮选中操作

最常用的按钮操作是设置或获取一个或多个按钮的选中状态。

CButton类的成员函数SetCheck和GetCheck设置或获取指定按钮的选中状态,原型:

voidSetCheck(intnCheck);

intGetCheck()const;

nCheck和GetCheck函数返回的值可以是:

0表示不选中,1表示选中,2表示不确定(仅用于三态按钮)。

对于多个单选按钮的选中状态的设置或获取,需要使用CWnd类的成员函数CheckRadioButton和GetCheckedRadioButton,原型:

voidCheckRadioButton(intnIDFirstButton,intnIDLastButton,intnIDCheckButton);

intGetCheckedRadioButton(intnIDFirstButton,intnIDLastButton);

nIDFirstButton和nIDLastButton指定这组单选按钮的第一个和最后一个按钮ID值,nIDCheckButton指定要设置选中状态的按钮ID值,函数GetCheckedRadioButton返回被选中的按钮ID值。

[例Ex_Ctrls1]用静态图片、单选按钮、复选框和按键按钮控件,设计界面。

开始,所有单选按钮都是灰显的,不能选择,选中“允许”复选框后,所有单选按钮可以使用,选定一个单选框后,单击[应用]。

(1)用MFCAppWizard(exe)创建一个名为Ex_CommCtrls的基于对话框的应用程序。

在创建的第一步,将应用程序类型选择为DialogBased,按[Finish]。

自动显示出该程序的对话框资源模板容。

(2)打开属性对话框将其标题改为“使用Windows常用控件”。

(3)用编辑器为对话框添加如下表所示的一些控件。

(4)四个单选按钮的Tab次序应连续,从IDC_RADIO1到IDC_RADIO4依次增加。

(5)按Ctrl+W快捷键,切换到MemberVariables页面,在Classname中选择CEx_CommCtrlstDlg,选中复选框控件ID号IDC_CHECK1,双击鼠标或单击AddVariables按钮。

(6)切换到ClassWizard的MesssageMaps页面,为复选框IDC_CHECK1和按钮IDC_BUTTON1增加BN_CLICKED的消息映射,添加代码:

voidCEx_CommCtrlsDl

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 初中教育 > 语文

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2