visual c 数据库编程实例01基础篇.pdf
《visual c 数据库编程实例01基础篇.pdf》由会员分享,可在线阅读,更多相关《visual c 数据库编程实例01基础篇.pdf(17页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、下载用Visual C+和M F C创建的应用程序大多会自动生成窗口,并且可以处理消息,进行绘图。M i c r o s o f t在这方面做了大量的工作,隐藏了内部工作,使我们能够更轻松地创建一个一般的应用程序。然而,当用户不能实现他们想要实现的功能时,适当地了解内部工作机制,对于消除编程上的困惑会有好处。更重要的是,知道怎样执行任务(诸如把窗口放置到什么地方,从什么地方获得一个消息和在任意地方绘图),有助于分清用户的应用程序和由Visual C+和M F C自动提供的限于窗口、消息和绘图的应用程序。Visual C+应用程序有四项主要基本知识:创建一个窗口、了解其他的 M F C类、把消息
2、发送到一个窗口和在一个窗口内绘图。当然还有其他一些基本知识,我们也将在涉及时适当地进行讨论。不过本部分将讨论以下四项基本知识。窗口在第1章中,我们首先讨论在使用和不使用 M F C的情况下创建一个窗口,以便清楚地了解M F C是如何工作的。M F C窗口既可以由属于M F C的C+类创建,也可以由一个早于并存在于M F C之外的非C+窗口类创建。我们将进一步观看窗口类并讨论那些由 Wi n d o w s操作系统提供的窗口类。最后,再看看M F C应用程序中都有什么。类在第2章中,我们将全面地讨论 M F C提供的强大的功能。大多数 M F C类是从三个M F C基类(C O b j e c
3、t、C W n d和C C m d Ta rg e t)派生来的。并讨论构成一个应用程序的 M F C类、支持窗口界面的 M F C类、用来绘图的类、访问文件的类、维护数据和数据库的类和访问因特网(I n t e r n e t)的M F C类。消息处理在第3章中,我们将讨论一个M F C应用程序是怎样通过消息与外界及应用程序进行通信的。还将讨论四种消息类型,并跟踪一个消息通过接收消息的类。最后将探讨该路径上的重定向消息。绘图在第4章中,我们将讨论在窗口中绘图的方法,包括绘图工具、绘图用的颜色、在屏幕或打印机上绘图、绘制位图和图标、绘制矩形和圆、绘制动画。第一部分基 础 知 识下载第1章 窗口
4、在本章中,我们将讨论 M F C用户界面的基本要素:窗口。在此基础上比较A P I窗口和M F C窗口的异同,描述如何创建一个窗口、销毁一个窗口和控制 Wi n d o w s操作系统与窗口的通信问题。1.1 窗口和API环境窗口是屏幕上的一个矩形区域,应用程序在该区域中显示数据并等待鼠标点击。Wi n d o w s应用系统的用户界面可以包含许多窗口,每个窗口都有不同的特点,但都是互相联系的,如图1-1所示。图1-1 Windows应用程序用户界面包括的窗口1.1.1 三种类型窗口在这么多窗口中,基本类型只有三种:重叠(O v e r l a p p e d)窗口,弹出(P o p u p)
5、窗口和子窗口(C h i l d)。在它们之间并没有太多内在的差异,但是使用不同的窗口风格,它们的外观是不同的(见图1-2)。重叠窗口通常用于建立应用程序主窗口。事实上,有时也叫做“主”窗口或者“框架”窗口。弹出窗口通常以对话框和消息框的形式与用户对话。子窗口通常用在视图(Vi e w)中,如在文本编辑器中的文本显示,也用在控件中,如在对话框中的O K按钮。而对那些看起来像按钮或控件的子窗口,也称为“控件”窗口。重叠窗口和弹出窗口的主要区别是弹出窗口出现时可以没有标题(也称为标题栏)。子窗口与重叠窗口或弹出窗口的主要区别是子窗口只能出现在另一个窗口中,并且子窗口的任何多余部分都被该窗口移去或剪
6、切掉。另外,子窗口是唯一不能有菜单条的窗口。参见图1-3中的Windows 应用程序,其中包括重叠窗口、弹出窗口和子窗口。应用程序的主窗口窗口窗口窗口窗口图1-2 窗口风格可以用来区分三种不同类型的窗口图1-3 由重叠窗口、弹出窗口和子窗口组成的窗口应用程序1.1.2 客户区和非客户区每个窗口都有由系统绘制的“非客户区”和由应用程序绘制的“客户区”。系统可以绘制图1-4显示的其中一个或者全部特征,当然也可以把所有的特征留给你去绘制。图1-4 窗口的非客户区可以由系统选择绘制每个窗口代表内存中的一个窗口对象,并由该窗口对象告诉 Wi n d o w s操作系统将窗口绘制在何处,以及在对鼠标单击、
7、键盘按下(假设该窗口拥有输入焦点)和时钟终止等事件作出响第1章 窗口3下载重叠窗口弹出窗口子窗口注意:在它的最基本的窗体中,系统不进行任何绘制。窗口都是客户区注意:在它的最基本的窗体中,系统不进行任何绘制。窗口都是客户区注意:这都是客户区。子窗口通常自己进行绘制最基本的窗体典型的外观共同的设置注意:子窗口不能有子菜单不是一个窗口显示在子窗口中,并由子窗口绘制属于桌面的重叠窗口,也称为主窗口属于弹出窗口的子窗口,它位于弹出窗口之中属于主窗口的子窗口属于主窗口的弹出窗口水平滚动条垂直滚动条关闭按钮最大化按钮最小化按钮任务栏应用程序图标菜单条系统菜单(单击应用程序图标时,显示虚线框)客户区应时应调用
8、什么应用程序。窗口对象自身是窗口类的一个实例,它不是 Visual C+的类,而是存在于Visual C+之外,并早于Visual C+的Microsoft Wi n d o w s所属的类。然而,就像C+的类一样,窗口类为每个基于它创建的窗口定义了若干特征,如背景色和往何处发送消息等(见图1-5)。图1-5 Microsoft Windows所属的窗口类创建的窗口对象Wi n d o w s操作系统提供了一个扩展的应用程序接口(A P I),可以用来创建和维护这些窗口对象。调用C r e a t e Window()函数可以创建一个窗口对象;调用 S e t WindowLong()函数可以
9、改变由窗口类定义的特征;调用 M o v e Window()函数可以移动窗口;调用D e s t r o y Window()可以退出窗口。如此说来,M F C又能做些什么呢?1.2 窗口和MFC环境M F C窗口是C+和Windows API调用的综合。事实上,M F C窗口提供了许多(但不是全部)Windows API的C+封装,从而减轻了编写 Wi n d o w s应用程序时一些乏味的工作,并提供了一些新的服务。M F C窗口不对窗口对象进行直接控制,而在 A P I环境中却是可以的。如果不能在 A P I环境中实现某项功能,那么肯定也不能在 M F C环境中实现。举例来说,M F
10、C库的C W n d可以创建一个窗口,但它只是过去在A P I环境中使用的A P I调用的封装。微软已经把在 M F C库中创建和维护一个窗口的逻辑作为真正的 C+封装和控制。然而,这种方法虽使得M F C库万能,但却是不方便的,并导致了严重的冗余和更多的错误。创建M F C窗口是复杂的,首先,创建类 C W n d的一个实例,然后调用类 C W n d的一个成员函数,该成员函数调用A P I中的C r e a t Window()函数。返回的窗口句柄(这只是指向窗口对象的非直接指针)保存在类C W n d的成员变量m _ h W n d中。注意 因为窗口在内存中创建,而内存经常发生变化,窗口
11、地址可能是经常变化的。因此,窗口句柄并非直接指向窗口对象,而是指向跟踪窗口对象地址的另一个指针。销毁窗口同样也是复杂的,必须确保销毁了该窗口对象,以及封装该窗口对象的 C W n d实例。虽然C W n d对象知道窗口对象,但是窗口对象并不知道 CWn d对象(见图1-6)。4第一部分 基 础 知 识下载使用RegisterClass()函数创建窗口类窗口对象由CreateWindow()函数创建,作为它的变量传输窗口类窗口管理器保持一个窗口对象列表,并告诉每个对象在屏幕上绘制自己窗口窗口对象窗口类图1-6 应用两个对象创建MFC窗口尽管窗口应用程序的用户界面可以由几十个、甚至几百个窗口构成,
12、但是大多数窗口还是由不到十个的窗口类创建的。即使在应用程序中有一千个窗口,每个窗口也只能是三种基本类型之一:重叠窗口、弹出窗口或子窗口。1.3 怎样应用MFC创建一个窗口可以用M F C的C W n d类创建一个窗口:CWnd wnd;BOOL b=wnd.CreateEx(ExStyle,ClassName,WindowName,Style,x,y,Width,Height,Parent,Menu,P a r a m);第一行代码创建了一个C W n d类的对象,第二行通过调用Windows API函数C r e a t e WindowEx()创建了真正的窗口。HWND h w n d=:
13、C r e a t e WindowEx(ExStyle,ClassName,WindowName,Style,x,y,Width,Height,Parent,Menu,Instance,Param);因为C W n d类只是封装了用于创建窗口的 Windows API函数(C r e a t e WindowEx(),因此,从本质上讲,创建窗口所必须的参数在 A P I环境和M F C环境中是相同的:参数S t y l e和E x S t y l e决定窗口的“外观”和类型(重叠、弹出、子窗口)。参数C l a s s N a m e决定在创建窗口时使用的窗口类。参数Wi n d o w N
14、 a m e决定窗口标题内容(如果窗口标题有内容)。参数x,y,Wi d t h和H e i g h t决定窗口的位置和大小。参数P a r e n t指向拥有该窗口的窗口指针(如果有这样的窗口)。参数M e n u指向内存中的一个对象,作为它的菜单使用除非创建一个子窗口,如果是这样的话,那么该参数是帮助父窗口识别子窗口的 I D n u m b e r。参数I n s t a n c e识别该窗口属于哪个应用程序,以便发送到该窗口的消息能被发送到正确的应用程序的消息队列中。C W n d类填入I n s t a n c e参数。参数P a r a m是在创建窗口时由窗口类使用的指针,该指针是
15、指向附加信息的非强制性结构的指针。返回的h w n d参数是指向创建的窗口对象的指针,但在未创建任何窗口时,该参数返回值为N U L L。窗口句柄自动地保存在C W n d类的m _ h W n d成员变量中,这在前面的图1-6中可以看到。第1章 窗口5下载窗口类调用CWnd的成员函数Create(),该函数自身调用图 1-4中看到的:Create Wi n d o w()函数:Create Window再次创建窗口;窗口句柄保存到CWnd中窗口管理器告知每个窗口对象在屏幕上绘制自己然后,在堆栈上或堆中创建一个CWnd类对象首先,用AfxRegister Class()函数创建一个窗口类窗口窗
16、口对象CWnd类对象现在既然已了解了有关创建窗口的基本知识,那么让我们进一步来看看填写这些参数的规则。规则1.窗口名称参数该参数是一个零结尾的文本串,用该串指明在窗口标题栏中显示的内容。如果窗口没有标题栏,该参数可以为零(0)。然而,某些通用控件也使用该参数。例如,按钮控件把该参数的内容放在按钮的表面。在创建窗口标题栏后,可以用类C W n d的成员函数S e t Wi n d o w Te x t()来改变窗口标题栏的名称。2.风格和扩展风格参数这两个是3 2位的参数,用来指定创建什么类型的窗口。可以选择多种类型,如下面的例子所示:,W S _ C H I L D|W S _ V I S I
17、 B L E,窗口风格参数的作用包括:用于创建三种基本窗口类型的风格,用 W M _ C H I L D创建一个子窗口;用 W M _ P O P U P创建一个弹出窗口。W M _ O V E R L A P P E D创建一个重叠窗口。如果不为窗口指定任何一种风格,那么窗口风格默认为W M _ O V E R L A P P E D。用以增添窗口的非客户区特色的风格。例如,可以用 W S _ V S C R O L L为窗口添加一个垂直滚动条,如图1-7所示其他非客户区窗口风格。图1-7 非客户窗口风格用来增添窗口的特色由每个通用控件定义的风格。例如,B S _ F L AT按钮风格告诉按
18、钮控件绘制一个二维按钮。用来使窗口可视、可操作和/或初始最大化的风格。用来标识控件组起始控件的风格,或者当用户敲击 Ta b键控制焦点在窗口中变化时,用来指示哪个控件有资格获得输入焦点的风格。想了解更多的有关窗口风格的例子,请参阅附录 A。在创建窗口以后,可以用 C W n d的成员函数ModifyStyle()和ModifyStyleEx()改变窗口风格。某些风格可能要求重画窗口,这时,可以给 ModifyStyle()函数添加第三个参数,自动激发类C W n d的成员函数S e t WindowPos()做重画窗口工作。6第一部分 基 础 知 识下载如果选取了最小化或最大化按钮则关闭按钮出
19、现若在CreateWindow()中定义了菜单条,则菜单条出现,它不是一个子窗口(使窗口可视)(禁止窗口输入)CWnd wnd;wnd.ModifyStyle(0,WS_BORDER,SWP_NOZORDER);事实上,给 M o d i f y S t y l e()或M o d i f y S t y l e E x()添加任何第三个参数,都需要添加下面的S e t WindowPos()选项:S W P _ N O Z O R D E R、S W P _ N O M O V E、S W P _ N O A C T I VAT E和S W P _ S H O W。注意 有时候,甚至一个重画
20、的窗口可能与新风格不相容,尤其对通用控件窗口来说更是这样。因为单个窗口决定重画窗口时使用什么风格。在这种情况下,唯一的办法是:在事先存储已有窗口的风格和其他参数后,销毁和重建该窗口。3.X和Y位置参数这是两个3 2位的参数,用于以像素为单位指定窗口的位置。创建重叠窗口和弹出窗口时,X和Y是相对于桌面窗口左上角的位置。而创建子窗口时,X和Y是相对于父窗口客户区的左上角位置。如果把 X和Y参数都设置为C W _ U S E D E FA U LT,那么系统将自动为窗口选定一个位置。系统层叠排列这些新窗口(见图1-8)。图1-8 CW_USEDEFAULT允许系统自动设定窗口位置然而,如果X和Y参数
21、都设置为C W _ U S E D E FA U LT,那么子窗口在创建的时候,总被创建在(0,0)的位置。创建窗口以后,可以用类C W n d的成员函数M o v e Window()移动窗口。4.宽度和高度参数这是两个3 2位的参数,用于以像素为单位指定窗口的大小。如果将参数 Wi d t h和H e i g h t都设置为C W _ U S E D E FA U LT,则系统将根据桌面窗口的大小,自动选定窗口的大小。然而,对于一个子窗口来说,系统将创建一个长和宽均为 0的窗口。如果窗口的风格是 W S _ M I N I M I Z E或W S _ M A X I M I Z E,那么系
22、统将忽视用户为Wi d t h和H e i g h t设置的任何值。创建窗口以后,可以用类CWn d的成员函数M o v e Window()重新设置窗口的大小。5.Z-Order当几个窗口占据屏幕上同一区域时,Z-O r d e r决定哪个窗口显示在哪个窗口之上。Z-O r d e r(Z顺序)中的Z来源于坐标X-Y-Z轴的Z轴,其中Z轴垂直屏幕,并由屏幕指向外面。当窗口最初被创建或选中时,则窗口将出现在 Z-O r d e r的顶层。然而,该窗口永远不可能出现在一个最顶层窗口的上面,除非该窗口也是最顶层的窗口。“最顶层”窗口用 W S _ E X _ TO P M O S T窗口风格创建,
23、并显示在所有非最顶层窗口的上面,而与该窗口是不是当前选中的窗口无关。创建窗口后,可以用CWn d的成员函数S e t Wi n d o w P o s()改变窗口的Z顺序。6.父窗口或物主窗口参数该参数是指向类 CWn d对象的指针,根据创建的窗口类型标识是父窗口还是物主窗口第1章 窗口7下载第一窗口下一个窗口第三个窗口(O w n e r):如果创建的是一个子窗口,那么用该参数来标识它的父窗口(该子窗口所放置的并为之所截断的窗口)。该值不能为N U L L。子窗口只能出现在它的父窗口里面,当父窗口被销毁时它们也被销毁,并且当父窗口被隐藏或最小化时它们也被隐藏。如果创建的是重叠窗口或弹出窗口,
24、用该参数来标识物主窗口。如果该值为N U L L,则桌面窗口成为物主窗口。从属窗口总是显示在它们的主窗口上面,并且随着物主窗口的销毁而被销毁;物主窗口最小化时,则从属窗口被隐藏;但当物主窗口被隐藏时,从属窗口并不被隐藏。一个子窗口可能是另一个子窗口的父窗口,但绝不可能是一个物主窗口。如果试图使一个子窗口成为一个物主窗口,那么系统只能使那个子窗口的最顶层窗口作为物主窗口。图 1-9是这些关系的概述。图1-9 物主、父、子窗口的层次关系可以用C W n d的成员函数 SetOwner()改变已有窗口的物主窗口,用 C W n d的成员函数SetParent()改变父窗口。7.菜单或控件I D参数该
25、参数用来标识菜单(M e n u)句柄或控件(Control)ID,这要依赖于创建的窗口是子窗口、重叠窗口,还是弹出窗口。如果创建的是一个子窗口,用该参数标识控件 I D,控件I D通常用来帮助父窗口识别子窗口。因为该参数寻求一个 H M E N U变量,因此,需要用H M E N U类型重载变量定义控件I D。例如,如果子窗口的控件I D是1 0 2,应该用如下方法定义它:,(HMENU)102,如果创建的是一个重叠窗口或弹出窗口,用该参数定义窗口的菜单。若该值为 N U L L,则菜单默认为在该窗口的窗口类中定义的任何菜单;如果窗口类也没有指定的菜单,则该窗口在创建时没有菜单。可以用下面的
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- visual 数据库编程实例01基础篇 数据库 编程 实例 01 基础
限制150内