界面有点用.ppt

上传人:本田雅阁 文档编号:3167208 上传时间:2019-07-19 格式:PPT 页数:138 大小:767.02KB
返回 下载 相关 举报
界面有点用.ppt_第1页
第1页 / 共138页
界面有点用.ppt_第2页
第2页 / 共138页
界面有点用.ppt_第3页
第3页 / 共138页
界面有点用.ppt_第4页
第4页 / 共138页
界面有点用.ppt_第5页
第5页 / 共138页
点击查看更多>>
资源描述

《界面有点用.ppt》由会员分享,可在线阅读,更多相关《界面有点用.ppt(138页珍藏版)》请在三一文库上搜索。

1、第10章 Visual C+编程实例 第10章 Visual C+编程实例 10.1 MFC编程流程 10.2 常用FC类和消息处理 10.3 对话框的应用 10.4 菜 单 的 应 用 10.5 工具栏应用 第10章 Visual C+编程实例 10.1 MFC编程流程 在普通的C/C+程序中,可以看到程序从main函数 开始到结束的所有代码,但在Visual C+中MFC封装了 一部分类,同时也隐藏了一部分代码,因此我们看不 到源程序的所有代码,例如从项目的所有源文件中找 不到main函数。 基本对话框的MFC程序流程图如图10-1所示。 第10章 Visual C+编程实例 图 10-1

2、 第10章 Visual C+编程实例 一个MFC程序运行的一般过程如下: (1) 生成CwinApp的一个实例(调用CwinApp的构造函数), 初始化全局对象; (2) Win32入口程序函数WinMain调用函数AfxWinMain; (3) AfxWinMain调用函数CwinApp的成员函数 InitInstance; (4) AfxWinMain调用函数CwinApp的成员函数Run; (5) AfxWinMain函数返回到WinMain,WimMain结束,程 序结束。 第10章 Visual C+编程实例 例10-1 吹泡泡程序。每当用户在窗口客户区中按 下鼠标左键时即可产生一

3、个泡泡(彩色圆形)。 设计思路:显示一个泡泡所需的数据包括其位置 和大小,在MFC中可用其包含矩形表示。可设置一数 组,每当用户按下鼠标左键时,就产生一个泡泡的数 据并存入数组中。最后,由框架窗口类的OnPaint()函 数显示所有的泡泡。 第10章 Visual C+编程实例 #include #define MAX_BUBBLE 250 class CMyWnd:public CFrameWnd CRect m_rectBubbleMAX_BUBBLE; int m_nBubbleCount; public: CMyWnd() m_nBubbleCount=0; 第10章 Visual C

4、+编程实例 protected: afx_msg void OnLButtonDown(UINT nFlags,CPoint point); afx_msg void OnPaint(); DECLARE_MESSAGE_MAP() ; /消息映射 BEGIN_MESSAGE_MAP(CMyWnd,CFrameWnd) ON_WM_LBUTTONDOWN() ON_WM_PAINT() END_MESSAGE_MAP() 第10章 Visual C+编程实例 /框架窗口类的成员函数 void CMyWnd:OnLButtonDown(UINT nFlags,CPoint point) if(m

5、_nBubbleCountCreate(0,_T(“吹彩色泡泡“); pFrame-ShowWindow(m_nCmdShow); this-m_pMainWnd=pFrame; return TRUE; CMyApp ThisApp; /全局应用程序对象 按【Ctrl+F5】运行程序,运行结果如图10-2所示。 第10章 Visual C+编程实例 说明: 该程序声明了两个类,一个是由应用程序类 CwinApp派生出来的CmyApp类,一个是由框架窗口 CframeWnd类派生出来的CmyWnd类。MFC的基本类 名均以字母C打头,习惯上在为使用MFC编写的应用 程序中的类起名时也这样做。在

6、程序中还声明了一个 CmyWnd类的全局对象ThisApp。 第10章 Visual C+编程实例 图 10-2 第10章 Visual C+编程实例 在CmyWnd类中声明了一个数组成员m_rectBubble, 用于存放泡泡的数据;另外,还声明了一个整型数据 成员m_nBubbleCount, 用来存放数组中泡泡的实际数量 。在框架窗口类的构造函数中该成员变量被初始化为0 ,由于构造函数非常简单,因此使用了内联函数的形 式。 第10章 Visual C+编程实例 OnPaint()函数用于绘制客户区的内容。要完成这 项任各,需要先建立一个设备环境(Device Context),这 可以通

7、过声明一个CpaintDC类的对象dc实现。在声明 语句中,应将当前窗口对象指针this 传给CpaintDC类的 构造函数,把绘图区域确定为当前窗口的客户区。 Windows在窗口更新、移动、改变尺寸或移去覆盖在 其上的其它窗口对象时均会向该窗口发送WM_PAINT 消息,从而触发应用程序调用OnPaint()函数重绘窗口 客户区。 第10章 Visual C+编程实例 OnPaint()函数根据数组m_rectBubble的内容画出一 个泡泡。其中语句。 dc.SelectStockObject(LTGRAY_BRUSH); 用于选择一个库存画刷,画刷决定了所画图形(如 椭圆、矩形和多边形

8、等)内部的颜色。 在处理鼠标消息的ONLButtonDown()函数中,语句 int r=rand()%50+10; 随机确定了要画出的泡泡的半径(范围为1050像 素点),其中全局函数rand()可产生一个随机整数。 第10章 Visual C+编程实例 调试: 首先,使用Visual C+集成开发环境中的菜单选项 “文件/新建”,并在项目选项卡中选择“Win32 Application“。 其次,在编译时要确定应用程序的可执行程序如 何使用MFC的类库。一种方法是使用共享的动态链接 库(DLL)。这种链接方式显著地减小了应用程序的可执 行文件的大小,并能有效地利用系统资源。 第10章 Vi

9、sual C+编程实例 用系统资源。 然而,动态链接到MFC时要求提供Mfcnn.dll库文 件,文件名中的nn代表MFC的版本号。该文件通常在 Windows System或System32文件夹下。如果一个应用 程序动态链接到了MFC,但该应用程序通常用在那些 可能没有Mfcnn.dll库的计算机系统上,则应把这个库 文件作为应用程序包的一部分提供给用户。Microsoft 允许程序员自由地把这些库文件附在应用程序中。 第10章 Visual C+编程实例 另外,也可以选择应用程序静态链接到MFC。静 态链接意味着,应用程序不依赖于MFC库文件的存在( 但仍然可能需要Msvcrt.dll文

10、件)。静态链接的代价是可 执行文件更大,而且MFC内存的利用可能不够充分。 在菜单中选择“工程”中的“设置”对话框,在对话 框右方的“General”选项卡中通过组合框“Microsoft Foundation Classes”选择使用MFC类库的方法。可选项 有三种,分别为“Not Using MFC(不使用MFC)“,“Use MFC in a Shared DLL(以动态链接库方式使用MFC)”和 “Use MFC in a Static Library(以静态库方式使用MFC)” 。 第10章 Visual C+编程实例 10.2 常用FC类和消息处理 10.2.1 常用MFC类 MF

11、C的类构成了一个完整的体系,该体系由一个 被称为Cobject的类作为基类,其它类大部分由该类派 生而来,如CWnd(窗口类)、Cdocument(文档类)、 Cfile(文件类)等。也有一部分类如字符串类,Cstring和 时间类Ctime等则不从Cobject继承。 第10章 Visual C+编程实例 1. 窗口公共基类CWnd 类CWnd对所有Windows窗口提供功能支持,它是 所有窗口类的直接或间接父类。 一个CWnd对象和一个Windows窗口是有本质区别 的,尽管它们有密切的联系。CWnd对象是一个 概念,即类的实例,而Windows窗口则是指向Windows 内部数据结构的一

12、个句柄,它的创建和显示要消耗系 统资源。一个CWnd对象通过其构造函数被创建,被析 构函数销毁,而一个Windows窗口则通过CWnd的 Create函数创建,被DestroyWindow函数销毁。 第10章 Visual C+编程实例 1) 窗口句柄 (1) 窗口句柄的创建:当CWnd:Create被调用时, Windows窗口被创建,窗口句柄存放在CWnd的成员变 量m_hWnd中。 (2) 程序中窗口句柄的取得:可以直接利用成员变 量m_hWnd,但安全的方法是调用函数CWnd:Get(), 它返回与窗口对象相关联的句柄,并且当窗口对象没 有关联句柄时或当前CWnd指针为NULL时返回空

13、指针 。 (3) 窗口句柄的销毁:调用CWnd:DestroyWindow 。 第10章 Visual C+编程实例 2) 窗口的大小和位置 (1) IsIconic:窗口是否处在最小化状态。 (2) IsZoomed:判断窗口是否在最大化状态。 (3) MoveWindow:改变窗口的大小、位置和Z轴顺序 。Z轴顺序指本窗口和其他窗口的覆盖关系。 第10章 Visual C+编程实例 3) 窗口的状态 (1) ShowWindow:显示或隐藏一个窗口,显示可以 有多种方式:最大化、最小化、正常显示等。 (2) IsWindowEnabled:判断一个窗口是否可见。 (3) IsWindowE

14、nabled:判断窗口的禁止/使能状态, 禁止状态的窗口不能响应用户的键盘和鼠标的输入。 (4) EnableWindow:设置窗口的禁止/使能状态,参 数为true表示使能。 第10章 Visual C+编程实例 4) 定时器函数 (1) SetTimer:开始一个系统定时器。定时器的作 用是每隔指定时间发一次WM_TIMER消息。 (2) KillTimer:结束一个指定的系统定时器。 5) 提示函数 (1) FlashWindow:闪烁窗口。 (2) MessageBox:弹出一个标准消息框。 第10章 Visual C+编程实例 例如:开始一个系统定时器每0.5秒发一次 WM_TIME

15、R消息,代码为: SetTimer(1,500,NULL): 其中,第一个参数表示定时器的标识,第二个参 数表示发送WM_TIMER的间隔时间,第三个参数是一 个回调函数,一般设为NULL。可以在WM_TIMER消 息的处理函数OnTimer(通过ClassWizard添加)中加入处 理代码来响应定时器消息。结束定时器的方法是调用 以定时器标识为参数的函数KillTimer,比如: KillTimer(1); 第10章 Visual C+编程实例 2字符串类CString Cstring类是MFC对字符串的封装,它包含一个可 变长的字符序列,提供了很多串操作,使用它比使用 其它字符串类型更加方

16、便。可以说,几乎每个MFC程 序都要用到这个类。CString没有继承任何类,且其各 个字符都是TCHAR类型。 CString对象可以随着串合并操作动态增加其长度 ,而无须用户来对其长度进行专门设置。CString可以 看作一个串类型,而不是一个指向字符串的指针。 第10章 Visual C+编程实例 1) CString的构造函数 CString类拥有众多的构造函数,用于以不同的数据类型和 不同的方式构造一个字符串对象,它们是 (1) CString(); /无参数的构造函数,产生一个空的 Cstring对象 (2) CString(const Cstring /用另外一个Cstring

17、对象的值初始化对象 (3) CString(TCHAR ch,int nRepeat=1); /用一个字符重复 若干次来初始化对象 第10章 Visual C+编程实例 (4) CString(LPCTSTR lpch,int nLength); /用一个字符数 组和一定长度初始化对象 (5) CString(const unsigned char *psz); /从一个无符号字 符指针构造对象 例如: CString s1; CString s2(“big“); CString s3=s2; CString s4(s2+“ “+s3); 第10章 Visual C+编程实例 2) CStri

18、ng的基本操作 Cstring的基本操作如下: (1) 求得到字符串长度:GetLength返回一个int类型的数。 (2) 判断字符串是否为空:BOOL IsEmpth() const。 (3) 强制字符串长度为0:void Empty()。 (4) 得到字符串某位置的字符:TCHAR GetAt(int nIndex) const。 (5) 设置字符串某位置的字符:void SetAt(int nIndex,TCHAR ch)。 (6) 强制转换为字符串指针类型:operator LPCTSTR。 第10章 Visual C+编程实例 例如,获取字符串str最后一个字符的语句如下: CSt

19、ring str=“aabbcde“; Char c1=str.GetAt(str.GetLength()-1); 第10章 Visual C+编程实例 3) 串提取 串提取函数由于根据某种原则从串中提取一个子串。 相关函数包括Mid,Left和Right。 (1) CString Mid(int nFirst) const; /获取从nFirst位置字 符开始的子串 (2) CString Mid(int nFrist,int nCount) const; /获取从 nFirst位置的字符开始包含nCount /个字符的子串(即到nFirst+nCount-1位置 /的字符为止) 第10章

20、Visual C+编程实例 (3) CString Left(int nCount)const; /获取左边nCount 个字符所构成的子串 (4) CString Right(int nCount)const; /获取右边nCount 个字符所构成的子串 4) 转换字符串 (1) void MakeUpper();/将字符串中所有字符换成大写 (2) void MakeLower();/将字符串中所有字符换成小写 (3) void MakeReverse();/将字符串中各字符的顺序倒转 (4) void Empty(); /将字符串中所有字符删除 第10章 Visual C+编程实例 5)

21、 字符串格式化函数 字符串格式化函数是CString:Format,它根据一 个参数字符串(格式控制字符串)和几个变量来格式化 一个串。 该函数的格式如下: void Format(LPCTSTR lpszFormat,.); void Format(UINT nFormatID,.); 第10章 Visual C+编程实例 该成员函数用于根据格式lpszFormat,用其它数据 构造一个字符串。其中省略号“.“是输出参数表,每个 参数可以是一个变量或表达式。函数Format常常用于 把其它类型的变量转换为字符串形式,或者把几个不 同类型的值合并成一个字符串的形式。 第10章 Visual C

22、+编程实例 例如: CString s1,s2,s3; s1.Format(“%c“,65); s2.Format(“float:%f,int:%d,hexint:%x“,3.48,20,0xFF); s3.Format(“string:%s,formated float:%2.1f“,“hehe“,3.14159); 执行以上代码后s1字符串是“A“,s2字符串是 “float:3.480000,int:20,hexint:ff“,s3 字符串是 “string:hehe,formated float:3.1“。 第10章 Visual C+编程实例 3CPoint、Crect和Csize类

23、 1) Cpoint类 MFC中的Cpoint类是对Windows结构POINT的封装 ,凡是能用POINT结构的地方都可以用Cpoint代替。 Cpoint提供了一些成员函数,使得操作POINT结构和 Cpoint类更加方便。 结构POINT表示一个屏幕上的二维点,它的定义 如下: 第10章 Visual C+编程实例 typedef struct tagPOINT LONG x; LONG y; POINT; 其中x和y分别是点的横坐标和纵坐标。 第10章 Visual C+编程实例 2) CSize类 MFC中的Csize类是对indows结构SIZE的封装, 凡是能用SIZE结构的地方

24、都可以用CSize代替。结构 SIZE表示一个矩形的长度和宽度,它的定义如下: typedef struct tagSIZE int cx; int cy; SIZE; 其中cx和cy分别是矩形的长度和宽度。 第10章 Visual C+编程实例 3) CRect类 Crect类是对Windows结构RECT的封装。结构RECT 表示一个矩形。 Typedef struct tagRECT LONG left; LONG top; LONG right; LONG bottom; RECT; 其中,left和top分别表示矩形左上角顶点的横、纵坐标 ;right和bottom分别表示矩形右下角

25、顶点的横、纵坐标 。 第10章 Visual C+编程实例 4CPaintDC类 在CpaintDC类中封装了大量的绘图和文字输出方 法(成员函数) (1) 文字信息显示。文字信息显示的成员函数为: BOOL TextOut(int x,int y,LPCTSTR lpszString); 该函数用于在指定坐标(x,y)处显示字符串 lpszString的内容,显示成功返回非0值,否则返回0。 坐标原点(0,0)在客户区左上角,Y轴向下。 第10章 Visual C+编程实例 (2) 画点。画点的成员函数为 COLORREF SetPixel(int x,int y,COLORREF colo

26、r); COLORREF SetPIxel(POINT point,COLORREF color); 该函数在指定坐标处按给定颜色画点,返回值为原来此 坐标处的颜色。 (3) 取指定坐标点的颜色。取指定坐标点的颜色的函数为 : COLORREF GetPixel(int x,int y)const; COLORREF GetPixel(POINT point)const; 该函数的返回值为指定坐标处的颜色。 第10章 Visual C+编程实例 (4) 画线。画线分两步完成:首先确定线的起始位置,然 后再调用画线函数。 用MovoTo将绘图位置移动到指定位置的原型为: CPoint MoveT

27、o(int x,int y); Cpoint Moveto(POINT point); 用LineTo函数画线的原型为: BOOL LineTo(int x,int y); BOOL LineTo(POINT point); 第10章 Visual C+编程实例 (5) 绘制矩形。绘制矩形的成员函数为: BOOL Rectangle(int x1,int y1,int x2,int y2); BOOL Rectangle(LPCRECT lpRect); 该函数的参数为需要绘制的矩形的左上角坐标 (x1,y1)和右下角坐标(x2,y2)。 (6) 绘制椭圆。绘制椭圆的成员函数的原型为: BOO

28、L Ellipse(int x1,int y1,int x2,int y2); BOOL Ellipse(LPCRECT lpRect); 该函数的参数的含义为所绘椭圆的包含矩形的左上角 和右下角坐标。 第10章 Visual C+编程实例 10.2.2 绘制图形 1. 图形对象的使用方法 普通绘图对象使用的模式为以下4步: (1) 生成绘图对象。 例如: Cpen pen,*op; pen.CreatePen(PS_SOLID,1,RGB(0,0,0); 第10章 Visual C+编程实例 这里定义的Cpen类指针op用于存储绘图前的画笔 ,使绘图结束后能够恢复系统原有状态。上面代码中 的

29、RGB(0,0,0)是一个宏,用于定义COLORREF类型的 颜色。COLORREF实际上是一个32位整数类型,用于 表示颜色,其第0、1、2字节分别用于存放该颜色的红 、绿、蓝色分量。如果已知某颜色的3个分量,则可使 用宏RGB()构造出该颜色: COLORREF RGB(BYTE bRed,BYTE bGreen, BYTE bBlue); 第10章 Visual C+编程实例 其中,第1个参数是颜色的红色分量,第2个参数 是颜色的绿色分量,第3个参数是颜色的蓝色分量,各 个分量的取值范围为0255。例如:RGB(0,0,0)为 黑色,RGB(255,255,255)为白色。 第10章 V

30、isual C+编程实例 (2) 将绘图对象选入绘图设备环境。其代码为: op=pDC-SelectObject( 可以看出,将绘图对象选入绘图设备环境的方法是 调用CDC:SelectObject()函数,与此同时,还要保 留旧的画笔。 (3) 进行绘图。其代码为: pDC-Moveto(100,100); pDC-Lineto(200,200); 第10章 Visual C+编程实例 (4) 绘图工作结束后,进行绘图设备环境的恢复工 作。其代码为: pDC-SelectObject(op); 如果还要改变pen的参数的话,必须将pen删除: pen.DeletObject(); 第10章

31、Visual C+编程实例 2. 画笔和画刷 画笔是用来画线的工具,是Cpen类的对象。画刷 是用来填充图形的工具,是Cbrush类的对象。 1) 画笔 画笔由Cpen类管理,使用Cpen类对象时,需要无 对其进行初始化工作,初始化Cpen类对象的方法有以 下3种: (1) 调用Cpen类的构造函数。 第10章 Visual C+编程实例 (2) 调用Cpen:CreatePen(int nPenStyle, int nWidth,COLORREF crColor)函数。其中第1个参数 是画笔的样式,可取值为: PS_SOLID /创建实线笔 PS_DASH /创建由短线构成的虚线 PS_DO

32、T /创建由点构成的虚线 PS_DASHDOT /创建由短线和点构成的虚线 第10章 Visual C+编程实例 (3) 调用Cpen:CreatePenIndirect()函数,通过LPLOGPEN 结构来设置Cpen的属性。例如: Cpen penRed; /说明画笔对象 penRed.CreatePen(PS_SOLID,3,RGB(255,0,0); /创建宽度 为3的红色实线画笔 /使用新的画笔时,要保存原来的画笔以便恢复 Cpen *pOldPen; POldPen=dc.SelectObject( /以下是作图代码,且使用新画笔画线 dc.SelectObject(pOldPen

33、); /恢复原来的画笔 第10章 Visual C+编程实例 2) 画刷 画刷是用来填充图形的工具,创建画刷有两种方法 :一种是调用构造函数,另一种是调用相关的成员函数 。 使用画刷叶要定义画刷对象,创建画刷并保存原来的画 刷,在绘图工作结束后还要恢复原来的画刷。例如: Cbrush NewBrush; /声明画刷对象 Cbrush *POldBrush; /保存原画刷的指针 NewBrush.CreateSolidBrush(PS_SOLID,21,RGB(0,0,255); /建立画刷 第10章 Visual C+编程实例 Pold_Brush=pDC-SelectObject( /将画刷

34、选入设备文本对象 /使用画刷 /恢复原先的画刷对象 pDC-Selectobject(PoldBrush); 第10章 Visual C+编程实例 10.2.3 消息处理 Windows操作系统是一个基于消息的操作系统, 其程序总要同消息打交道,这正是Windows程序同 DOS程序不同的地方。实际上,Windows系统通过 Windows消息告诉所有应用程序发生了什么事件,例 如用户点击了鼠标、用户点击了键盘的哪个键等,每 个应用程序都有消息处理或一组消息响应函数,用于 对消息进行响应。 第10章 Visual C+编程实例 Windows操作系统中定义了900余个Windows消息 ,系统

35、将用户的输入传给应用程序,然后又为每个输 入产生消息。此外,系统还为应用程序的变化产生消 息,如窗口的尺寸发生了变化等。应用程序自已也可 能产生消息,用于对应用程序内部发生的特殊事件进 行处理或其它应用程序之间的通信。 第10章 Visual C+编程实例 系统向应用程序发送消息时,将向应用程序发送 个参数: (1) 一个窗口的句柄:窗口句柄用于标识窗口的一 个常数,Windows的每个窗口都有一个窗口句柄。消 息参数中的窗口句柄标识的是接受消息的窗口。 (2) 一个消息标识:标识了产生的消息。消息标识 的例子有WM_CREATE,其中,WM_代表indows Message,是indows窗

36、口产生的消息,而 WM_CREATE代表窗口正在被创建,WM_PAINT则代 表窗口的客户区需要被重画。 第10章 Visual C+编程实例 (3) 两个32位的参数:消息参数定义了Windows应 用程序处理消息所需的数据或数据所在的位置,这两 个参数的含义与具体的消息有关。消息参数可以包含 一个整数、一组标志或一个结构对象的指针。消息参 数也可以是NULL,表示消息没有参数。 1. Windows消息分类 Windows消息大体上可以分为两大类:一类是系统 定义的消息,另一类是用户自定义的消息。其中 Windows系统定义的消息可以分为以下种: 第10章 Visual C+编程实例 (1

37、) Windows消息:这类消息主要是以WM_作前缀 的消息(WM_COMMAND除外,WM_COMMAND消息 专门被用于处理菜单和控件发出的消息),且必须由 CWnd类或CWnd类的派生类进行处理。消息响应函数 也必须被定义在发送消息CWnd类或 CWnd派生类中。 可见,这类消息属于面向Windows窗口的消息。 第10章 Visual C+编程实例 (2) 控件通知消息:这类消息主要由控件或其它子 窗口发出,并对各控件或子窗口的父窗口进行处理。 这类消息属于WM_COMMAND消息,只不过在 WM_COMMAND消息的两个消息参数中包含了每个控 件的句柄、标识(ID)和通知消息等信息。

38、 (3) Windows命令消息:这类消息是指由菜单、工 具条和加速键等发出的WM_COMMAND通知消息。 第10章 Visual C+编程实例 2. 鼠标消息处理 移动鼠标或点击鼠标按键,Windows便产生一个 或多个消息并将其发送给位于鼠标光标下的窗口。编 程时常用的鼠标消息有: WM_LBUTTONDOWN /按下鼠标左键 WM_LBUTTONUP /释放鼠标左键 WM_LBUTTONDBLCLK /双击鼠标左键 WM_RBUTTONDOWM /按下鼠标右键 WM_RBUTTONUP /释放鼠标右键 WM_RBUTTONDBLCLK /双击鼠标右键 WM_MOUSEMOVE /移动鼠

39、标 第10章 Visual C+编程实例 对应的Wnd类的消息处理成员函数分别为: void OnLButtonDown(UINT nFlags,CPoint point); void OnLButtonUp(UINT nFlags,CPont point); void OnLButtonDblClk(UINT nFlags,Cpoint point); void OnRButtonDown(UINT nFlags,Cpoint point); void OnRButtonUp(UINT nFlags,Cpoint point); void OnRButtonDblClk(UINT nFlag

40、s,Cpoint point); void OnMouseMove(UINT nFlags,Cpoint point); 第10章 Visual C+编程实例 其中,参数point表示鼠标的位置,nFlags是几个控 制键的状态,可以是下列值及其组合: MK_CONTROL /Ctrl键被按下 MK_LBUTTON /鼠标左键被按下 MK_RBUTTON /鼠标右键被按下 MK_SHIFT /Shift键被按下 例如:“MK_SHIFT|MK_LBUTTON”表示同时按下了 Shift键和鼠标左键。 第10章 Visual C+编程实例 10.3 对话框的应用 对话框是一些弹出式窗口信息的弹出

41、式窗口。它 通常包含,应用程序利用它可和用户进行交互式操作 。对话框是应用程序,用于显示或提示并等待用户输 入一个或多个控件,利用这些控件,用户可以输入文 本、选择选项,并完成某一特定命令。 第10章 Visual C+编程实例 对话框分为模式对话框和非模式对话框两种。模 式对话框是指这种对话框出现时,它的父窗口将暂时 失效,只有处理完对话框所要求的动作后,才会将控 制权交回给父窗口。非模态对话框图类似普通的窗口 ,并不垄断用户的输入。在非模式对话框打开时,用 户随时可用鼠标点击等手段激活其它窗口对象,操作 完毕后再回到本对话框。本节只通过一个实例来介绍 模式对话框。 图10-3是用AppWi

42、zard生成的一个基于对话框的程 序运行界面。下面详细介绍它的实现步骤: 第10章 Visual C+编程实例 图 10-3 第10章 Visual C+编程实例 1. 产生对话框模板 在VC+ 6.0中选择菜单“File”“New”或按【 Ctrl+N】键,弹出一个对话框,如图10-4所示。在对话 框中选择工程标签页,用鼠标选中左边列表框中的 “MFC AppWizard 【exe】”一行;在“C位置:”处输入 存放源代码的目录的名字,单击“确定”后出现图10-5 所示对话框。 第10章 Visual C+编程实例 图 10-4 第10章 Visual C+编程实例 图 10-5 第10章

43、Visual C+编程实例 2. 设置对话框模板 设置对话框模板一般需要以下几步:设置对话框 的属性;向对话框模板放置控件;通过控件属性对话 框设置各个控件的属性和控件的跳表顺序。 1) 设置对话框的属性 首先调整模板的大小:把鼠标放在对话框模板的边 或角上,等鼠标变为双箭头形状,拖动鼠标即可。 点击对话框模板(而不是它上面某一控件),按【 Enter】键弹出属性设置对话框,图10-6所示为该对话 框的General页。可以设置对话框的风格和各边界滚动 条的类型,对话框的标题等。 第10章 Visual C+编程实例 图 10-6 第10章 Visual C+编程实例 2) 添加控件并设置控件

44、属性 添加控件要借助于控件工具条(图10-7所示),控件 工具条提供了25种控件。常用的控件是:图形控件 (Picture)、静态文本框(Static Text)、编辑框(Edit Box)、 组框(Gorup Box)、按钮(Botton)、复选框(Check Box)和 单选框(Radio Button)。图形控件用于显示位图(Bitmap) 和图标(Icon);静态文本框用于显示静态文本(当然显示 的内容可以通过程序改变);编辑框用于数据的输入和显 示;组框用于把若干控件从视觉上组合成一组,形成友 好的界面;按钮用于用户向程序提供命令;复选框完成 开关功能;单选框也提供选择,它与复选框的

45、区别是在 一组单选框中,用户只能选择其中一个,并且单选框自 已不能取消自已的选择,而只能通过选中别的单选框来 取消。 第10章 Visual C+编程实例 图 10-7 第10章 Visual C+编程实例 向对话框增加一个控件的方法是在控件工具条上 通过单击选择一个控件,然后在对话框模板上按下鼠 标左键,控件就会按默认大小放置在对话框上。通过 单击选中控件,把鼠标光标移动到控件边缘,等光标 呈箭头状时拖动鼠标可以改变控件的大小。删除一个 控件的方法是先选中控件后按【Delete】键。 设置控件的属性:先选中控件,按【Enter】键(或 者按鼠标右键,在弹出的菜单上选择Properties项)

46、弹出 图10-8所示的属性对话窗口,在该窗口中可以设置控 件的标识符(ID),标题(Caption)和各种风格(Style)等。 第10章 Visual C+编程实例 图 10-8 第10章 Visual C+编程实例 在图10-9中,将对话框模板上的“TODO:在这是设 置对话控制”静态文本框和“确定”按钮删除。为对话 框增加3个编辑框,它们的ID分别为ID_EDIT_ADD1, ID_EDIT_ADD2和ID_EDIT_ADD3;添加两个静态文 本框,它们的Caption分别为“+”和“=”。另外,“+”和 “=”的属性页对话框的Styles属性页要作两点改变:将 “X对齐文本”属性设为C

47、enter,选择“C中垂直”复选框 ,如图10-10所示。 第10章 Visual C+编程实例 图 10-9 第10章 Visual C+编程实例 图 10-10 第10章 Visual C+编程实例 再添加两个命令按钮,它们的Caption分别为“计算 结果”和“退出”,“计算结果”的ID是IDC_BUTTON1,“ 退出”的ID是IDC_BUTTON2。 3) 定义成员变量 增加了3个编辑框后,获取三个编辑框中的输入数 字的常用方法是:先定义一些与控件相联系的变量, 然后在程序中通过这些变量来完成对控件的控制。 为控件定义变量最方便的方法是通过ClassWizard 。按【Ctrl+W】

48、键,弹出图10-11所示的MFC ClassWizard对话框,选择Member Variables窗口如图10 -12所示。 第10章 Visual C+编程实例 图 10-11 第10章 Visual C+编程实例 图 10-12 第10章 Visual C+编程实例 选中“IDC_EDIT1”,双击鼠标或单击Add Variable.按钮,弹出图10-13所示的对话框,这个对话 框用来增加与控件相联系的成员变量。先为变量取名 为m_add1,填在Member variable name中。这个变量用 来存放用户在IDC_EDIT1编辑框中输入的数,供程序 计算结果用;再选择变量的类别填在Category中,可以 为Value或Control,后者表示所定义的变量是控件类的 一个对象,比如对于编辑框而言,Control类变量的类 型是Cedit,前者表示所定义的变量是与控件相联系的 一个值, 第10章 Visual C+编程实例 这个值的含义随不同类型的控件而不同,如对于编辑 框而言,变量表示在编辑框所输入的内容。有的控件 不能定义与之相关的Value变量,如按扭;最后选择变 量的类型填在Variable type中,变量m_add1的类型定义 为double类型。 用

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

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1