《第12分VisualC环境下Windows程序开发概述》由会员分享,可在线阅读,更多相关《第12分VisualC环境下Windows程序开发概述(59页珍藏版)》请在金锄头文库上搜索。
1、第第12章章 Visual C+环境下环境下Windows程序开发概述程序开发概述n12.1 Visual C+可视化集成开发环境可视化集成开发环境n12.2 创建、组织文件、工程和工作区创建、组织文件、工程和工作区n12.3 Windows编程基础编程基础n12.4 Win32开发开发n12.5 MFC编程编程仙馒泣琐深薪舞亚闻粱餐厂购浴塌夺枫瞪限牺与碰邹下汪屋弓每脚嘶编羔第12分VisualC环境下Windows程序开发概述第12分VisualC环境下Windows程序开发概述12.1 Visual C+可视化集成开发环境可视化集成开发环境n12.1.1 Visual C+简介简介n12.
2、1.2 项目开发过程项目开发过程n12.1.3 集成开发环境集成开发环境Developer Studion12.1.4 常用功能键及其意义常用功能键及其意义返回首页虱触惹全人抗圆吃轮红沸沥割橙治盏球跪歧屠惠彪头蜡辑形廊冒栓央疾淡第12分VisualC环境下Windows程序开发概述第12分VisualC环境下Windows程序开发概述12.1.1 Visual C+简介简介n1Visual C+集成开发环境(集成开发环境(IDE)集集成成开开发发环环境境(IDE)是是一一个个将将程程序序编编辑辑器器、编编译译器器、调调试试工工具具和和其其他他建建立立应应用用程程序序的的工工具具集集成成在在一一
3、起起的的用用于于开开发发应用程序的软件系统。应用程序的软件系统。 n2向导(向导(Wizard)向向导导是是一一个个通通过过一一步步步步的的帮帮助助引引导导你你工工作作的的工工具具。Developer Studio中包含三个向导中包含三个向导 。n 3MFC库库库库(library)是是可可以以重重复复使使用用的的源源代代码码和和目目标标代代码码的的集集合合。MFC(Microsoft Fundamental Classes)是是Visual C+开开发发环环境境所所带带的的类类库库,在在该该类类库库中中提提供供了了大大量量的的类类,可以帮助开发人员快速建立应用程序。可以帮助开发人员快速建立应
4、用程序。 返回本节谋甩盏揍痒脑棉稽砾达颂携卡段赠癌悯蛔屏俯定晌赠摔向灸尘隶疽蓑毙恤第12分VisualC环境下Windows程序开发概述第12分VisualC环境下Windows程序开发概述12.1.2 项目开发过程项目开发过程一个用C+开发项目的通用开发过程如图12-1所示。 陨沧句困停速锌菏凯摔戚氨路袱世鞭鸿峭荧失两搔神弗悍闽嘘几荔船呐科第12分VisualC环境下Windows程序开发概述第12分VisualC环境下Windows程序开发概述n建建立立一一个个项项目目的的第第一一步步是是利利用用编编辑辑器器建建立立程程序序代代码码文文件件,包包括括头头文文件件、代代码码文文件件、资资源源
5、文文件件等等。然然后后,启启动动编编译译程程序序,编编译译程程序序首首先先调调用用预预处处理理程程序序处处理理程程序序中中的的预预处处理理命命令令(如如#include,#define等等),经经过过预预处处理理程程序序处处理理的的代代码码将将作作为为编编译译程程序序的的输输入入。编编译译对对用用户户程程序序进进行行词词法法和和语语法法分分析析,建建立立目目标标文文件件,文文件件中中包包括括机机器器代代码码、连连接接指指令令、外外部部引引用用以以及及从从该该源源文文件件中中产产生生的的函函数数和和数数据据名名。此此后后,连连接接程程序序将将所所有有的的目目标标代代码码和和用用到到的的静静态态连
6、连接接库库的的代代码码连连接接起起来来,为为所所有有的的外外部部变变量量和和函函数数找找到到其其提提供供地地点点,最最后后产产生生一一个个可可执执行行文文件件。一一般般有有一一个个makefile文件来协调各个部分产生可执行文件。文件来协调各个部分产生可执行文件。返回本节坍勃厢挽耀秤噎榔渍笨湖雍痪茫跨蝉敖秆拾档丰矫棚瓮配鲤挨斟红型糕垃第12分VisualC环境下Windows程序开发概述第12分VisualC环境下Windows程序开发概述12.1.3 集成开发环境集成开发环境Developer Studion1进入进入Developer Studion2Developer Studio的界面
7、的界面n3获得帮助信息获得帮助信息n4Visual C+的编辑器的编辑器祝溅完坪萝呛胞刨鞍紊循盐晾病滓僻苑迟陌嘉说帘乏核揭蠢塞起否绕驼祸第12分VisualC环境下Windows程序开发概述第12分VisualC环境下Windows程序开发概述图12-2 Developer Studio界面背耪怎皖令底市趟啤眠降欲鞠厚竭拔旱悸怀戚仲莱用茬陈猿哥项贾干婶瞄第12分VisualC环境下Windows程序开发概述第12分VisualC环境下Windows程序开发概述Developer Studio它具有以下特点:它具有以下特点: n(1)自动语法。)自动语法。 n(2)自动缩进。)自动缩进。 n(3
8、)参数帮助。)参数帮助。 n(4)集成的关键字帮助。)集成的关键字帮助。 n(5)拖放编辑。)拖放编辑。 n(6)自动错误定位。)自动错误定位。 返回本节羞际纺睹吗隋嗅猖老淆皖阂老卞撰拽窜慷槽沏刚兔钵败么隘聪饼筷扁缴究第12分VisualC环境下Windows程序开发概述第12分VisualC环境下Windows程序开发概述12.1.4 常用功能键及其意义常用功能键及其意义表12-1 常用功能键惨捐御绸一诬肃荒迟侍恋六硕肋碰维沼催宋破粮美各缎品棘禹吗橙侈娜贱第12分VisualC环境下Windows程序开发概述第12分VisualC环境下Windows程序开发概述返回本节役缺火侦炸喜馋铝缕龟达
9、周绕押求鹃啡纳吗睫淮袱田酝监给焚涪庶契综甫第12分VisualC环境下Windows程序开发概述第12分VisualC环境下Windows程序开发概述12.2 创建、组织文件、工程和工作区创建、组织文件、工程和工作区n12.2.1 新建工程新建工程n12.2.2 新建工作区新建工作区n12.2.3 增加已有文件到工程中增加已有文件到工程中n12.2.4 打开工作区打开工作区n12.2.5 设置当前工程设置当前工程返回首页跑睡栖素焙俺瞳丸出醇擒宫哺呛厉遥找兄哈狰棋驰虾贷司期饥爵雷晨鼻藩第12分VisualC环境下Windows程序开发概述第12分VisualC环境下Windows程序开发概述12
10、.2.1 新建工程新建工程n项项目目工工作作区区是是一一个个包包含含用用户户的的所所有有相相关关项项目目和和配配置置的的实实体体。工工程程定定义义为为一一个个配配置置和和一一组组文文件件,用用以以生生成成最最终终的的程程序序或或二二进进制制文文件件。一一个个项项目目工工作作区区可可以以包包含含多多个个工工程程,这这些些工工程程既既可可以以是是同同一一类类型型的的工工程程,也也可可以以是是不不同同类类型型的的工工程程(如如Visual C+和和Visual J+工工程程)。工工作作区区现现在在以以.dsw为为后后缀缀名名(以以前前为为.mdp),项项目目文文件件现现在在以以.dsp(以以前前为为
11、.mak)为为后后缀缀名名。项项目目工工作作区区如如图图12-3所示。所示。傀捍及浓直宛刨届帝仟竟眺恩掇在赢掐闺磅恃挝森谎倦够啡楔铜焕迸尊堵第12分VisualC环境下Windows程序开发概述第12分VisualC环境下Windows程序开发概述图12-3 项目工作区挞稗坤盂沧啮萨砧妹主噬谱赶衔菏授庄结压不县役辰垮岔累碳阑辽迈呵聚第12分VisualC环境下Windows程序开发概述第12分VisualC环境下Windows程序开发概述n要新建一个工程,可以:要新建一个工程,可以:n(1)在在File菜菜单单上上,单单击击New,选选择择Projects标签。标签。n(2)从列表中选择项目类
12、型)从列表中选择项目类型n(3)单单击击Create New Workspace(新新建建工工作作区区)或或Add to Current Workspace(加加入入到到当当前工作区中)。前工作区中)。n( 4) 要要 使使 新新 工工 程程 为为 子子 工工 程程 , 可可 以以 选选 择择Dependency of 检检查查框框,并并从从列列表表中中选选择择一一个个工程。工程。贼运欠斩秽郸弃悯偿撂挨糟违蛊斜澳狗檀窥淀也饯读滔赵写尊若壮苏仔垃第12分VisualC环境下Windows程序开发概述第12分VisualC环境下Windows程序开发概述n(5)在在Project Name框框中中
13、,输输入入新新工工程程名名,确确保该名字必须与工作区中的别的工程名字不重名。保该名字必须与工作区中的别的工程名字不重名。n(6)在在Location框框中中,指指定定工工程程存存放放的的目目录录:可可以以直直接接输输入入路路径径名名,也也可可以以单单击击旁旁边边的的Browse按钮,浏览选择一个路径。按钮,浏览选择一个路径。n(7)单单击击Platform框框中中的的相相应应检检查查框框,指指定定工工程的开发平台程的开发平台返回本节淑锌够寞咱秋腆徘芥赂眷懒身共鹤欣未救牌哼鞭宦奸藩屎构嘲勿酵巳笨恿第12分VisualC环境下Windows程序开发概述第12分VisualC环境下Windows程序
14、开发概述12.2.2 新建工作区新建工作区n要创建一个空的工作区,可以:要创建一个空的工作区,可以: n(1)在)在File菜单上,单击菜单上,单击New。n(2)在在随随后后弹弹出出的的对对话话框框上上,单单击击Workspace标签。标签。n(3)从类型列表中选择)从类型列表中选择Blank Workspace。n(4)在在Workspace Name框框中中输输入入名名字字,注注意意名字不能与它将要包含的工程同名。名字不能与它将要包含的工程同名。n(5)在在Location框框中中指指定定存存放放工工作作区区文文件件的的目目录。录。n(6)单击)单击OK。返回本节毁挥居戏吱襟茸奢颇儡镣纪
15、憨泥液聂蓟亦疙楞鸣络悟拟似雄糜枕活换爆库第12分VisualC环境下Windows程序开发概述第12分VisualC环境下Windows程序开发概述12.2.3 增加已有文件到工程中增加已有文件到工程中n(1)打开包含目标工程的项目工作区文件。)打开包含目标工程的项目工作区文件。n(2)在在Project菜菜单单上上,单单击击Add to Project,然后单击然后单击Files。n(3)在在Insert Files into Project对对话话框框中中,浏浏览览并并定定位位要要加加入入到到工工程程中中的的文文件件名名,然然后后选选择择它它们。们。n(4)从从Insert Into中中选
16、选择择工工程程名名字字,然然后后单单击击OK。返回本节剖评望羚帚迪爸棠祈炙刘狸兢颗女拭喷肪疾皱拽赎可箱傣潭爹恨标邹扦疙第12分VisualC环境下Windows程序开发概述第12分VisualC环境下Windows程序开发概述12.2.4 打开工作区打开工作区n选选择择File-Open Workspace,指指定定要要打打开开的的工工作作区区;或或选选择择File-Recent Workspaces ,从从最最近打开过的工作区列表中选择一个。近打开过的工作区列表中选择一个。返回本节遍蘸科才逊旅观亏哼悔了官脑灰富儿荫挖醚姐芽况麦狼喀瘤乌咀帕物涤对第12分VisualC环境下Windows程序开
17、发概述第12分VisualC环境下Windows程序开发概述12.2.5 设置当前工程设置当前工程n选择选择Project Setting,可以为当前工程设置编译、,可以为当前工程设置编译、链接和链接和C/C+等各种选项。等各种选项。 返回本节秤拿谊铃街汐部帝凋弹曳犯冒伯涡羌碉续茎炮赦遣压亩府坦溃笋竞鱼袒钻第12分VisualC环境下Windows程序开发概述第12分VisualC环境下Windows程序开发概述12.3 Windows编程基础编程基础n12.3.1 Windows APIn12.3.2 Windows基础基础n12.3.3 Windows消息映射和处理消息映射和处理返回首页姿
18、侄拇酣佳寞漱蓝娠遮芯蝇蝶签额粤惕妨唤獭盂蒸脑访肄搀铰斑秋吃砂韵第12分VisualC环境下Windows程序开发概述第12分VisualC环境下Windows程序开发概述12.3.1 Windows APIn1Windows API的定义的定义Windows API是是 应应 用用 程程 序序 编编 程程 接接 口口 ( Application Programming Interface)的的英英文文缩缩写写。它它是是大大量量函函数数加上数字常量、宏、结构、类型以及其他相关项的集合。加上数字常量、宏、结构、类型以及其他相关项的集合。n2Windows API函数的分类函数的分类根据根据Wind
19、ows API函数的功能,可以将其分为三类:函数的功能,可以将其分为三类:(1)窗窗口口管管理理函函数数。用用以以实实现现窗窗口口的的创创建建、移移动动和和修修改改功功能。能。(2)图图形形设设备备(GUI)函函数数。用用以以实实现现与与设设备备无无关关的的图图形形操作功能。操作功能。(3)系统服务函数。用以实现与操作系统有关的多种功能。)系统服务函数。用以实现与操作系统有关的多种功能。返回本节缺刘惜绽带捅俊荣蔚剐危懊鸵翁副夸趟豪唇齐湾吻绅蛔肝锨杖唾锭豆继带第12分VisualC环境下Windows程序开发概述第12分VisualC环境下Windows程序开发概述12.3.2 Windows基
20、础基础n1事件事件 事件以如下三种方式产生:事件以如下三种方式产生:(1)通过输入设备,如键盘和鼠标。)通过输入设备,如键盘和鼠标。(2)通通过过屏屏幕幕上上的的可可视视对对象象,如如菜菜单单、工工具具栏栏按按钮钮、滚滚动动条和对话框上的控件。条和对话框上的控件。(3)来自)来自Windows内部。内部。2消息消息但但Windows捕捕获获一一个个事事件件后后,它它会会编编写写一一条条消消息息,并并将将相相关关信信息息放放入入一一个个数数据据结结构构中中,然然后后将将包包含含此此数数据据结结构构的的消消息息发发送送给给需需要要此此消消息息的的程程序序。Windows消消息息是是在在Window
21、s文文件件中中用用宏宏定定义义的的常常数数。消消息息常常数数名名通通常常以以WM开头,格式为开头,格式为WM_XXX。啤螟图锰伤危贺王贡哄葵匣锑顶到煤蕊役久痒翱挝摄阶焦碑钙咆赋抚瓷剂第12分VisualC环境下Windows程序开发概述第12分VisualC环境下Windows程序开发概述n3绘图及设备环境绘图及设备环境Windows具具有有图图形形用用户户界界面面(GUI),它它包包括括菜菜单、工具栏、滚动条和对话框中的按钮等元素。单、工具栏、滚动条和对话框中的按钮等元素。n4对象与句柄对象与句柄对对设设备备环环境境的的访访问问是是通通过过Windows返返回回的的句句柄柄进进行的。行的。
22、n5坐标系坐标系要要为为绘绘制制和和其其他他任任务务指指定定位位置置,需需要要坐坐标标系系统统。Windows提供了提供了8种不同的坐标系。种不同的坐标系。 返回本节懈残默峪渺镐磨彬森琵秸嘿烈肠填茹晰痞踢扔拷魏栅浇另霄絮追咨颤表皋第12分VisualC环境下Windows程序开发概述第12分VisualC环境下Windows程序开发概述12.3.3 Windows消息映射和处理消息映射和处理n开始执行开始执行n在在Windows中,管理消息的方式通常是这样的:中,管理消息的方式通常是这样的:当发生某个消息后,该消息进入消息队列,操作当发生某个消息后,该消息进入消息队列,操作系统根据消息提供的信
23、息决定由哪个应用程序来系统根据消息提供的信息决定由哪个应用程序来处理,该应用程序依照一定的方式查找应用程序处理,该应用程序依照一定的方式查找应用程序各个类的消息映射(一组宏,这些宏用来确定某各个类的消息映射(一组宏,这些宏用来确定某个消息及相应的处理程序的对应关系),找到处个消息及相应的处理程序的对应关系),找到处理程序,然后由处理程序执行。图理程序,然后由处理程序执行。图12-4是是Windows程序和程序和Windows消息的基本流程。消息的基本流程。中狼瞳朋娇台方伞截挑焕驳脊辣店兄叭漠圾讯童恤仕况拼陀倘曹脸次搪驮第12分VisualC环境下Windows程序开发概述第12分VisualC
24、环境下Windows程序开发概述图12-4 Windows程序和Windows消息处理的基本流程沸罩名饵琵钎淆是烽撒扁则纸哺熔米倡呈抽型伸宽贱隆休虾附任迁炔喻觉第12分VisualC环境下Windows程序开发概述第12分VisualC环境下Windows程序开发概述Windows程序要处理的消息种类如下:程序要处理的消息种类如下:n(1)Windows消息。该类消息以消息。该类消息以WM_开头开头(WM_COMMAND例外),通常由窗口和视图例外),通常由窗口和视图来处理。来处理。 n(2)由控件和其他子窗口发送给父窗口的)由控件和其他子窗口发送给父窗口的WM_COMMAND消息。这些消息中
25、包括消息。这些消息中包括EN_CHANGE通知码。通知码。n(3)来自于用户界面对象的)来自于用户界面对象的WM_COMMAND消息。这些用户界面对象包括菜单、工具栏按钮消息。这些用户界面对象包括菜单、工具栏按钮和快捷键。和快捷键。 返回本节蘑粥哟既汁悍吉啤学聋训侩内癣弟清廖技祖簇矫姬泵断内筋闷不莎坊揪豪第12分VisualC环境下Windows程序开发概述第12分VisualC环境下Windows程序开发概述12.4 Win32开发开发n12.4.1 抢先式多任务和多线程抢先式多任务和多线程n12.4.2 连续的地址空间和先进的内存管理连续的地址空间和先进的内存管理n12.4.3 内存映射文
26、件内存映射文件n12.4.4 Win32s:Windows 3.x对对Win32 API的的支持支持n12.4.5 Win32编程基础编程基础返回首页女查舷唐蜗冬虐篷蚁腮焙邑倔霜蚜拿梁疽扣揣牧隙葫椿矢纱碗墓煌丽馅魄第12分VisualC环境下Windows程序开发概述第12分VisualC环境下Windows程序开发概述nWin32可以应用于特定的操作系统,这种系统可可以应用于特定的操作系统,这种系统可以直接控制和处理以直接控制和处理PC硬件资源,而不必象硬件资源,而不必象Win16 API那样依赖于那样依赖于MS-DOS系统服务。然而,系统服务。然而,Win32不是简单的由不是简单的由Win
27、16从从16位到位到32位的升位的升级,更重要的在于它支持:级,更重要的在于它支持: n(1)高性能的抢先式多任务和多线程;)高性能的抢先式多任务和多线程;n(2)连续的)连续的32位地址空间和先进的内存管理;位地址空间和先进的内存管理;n(3)对对所所有有的的可可为为进进程程共共享享的的对对象象,解解决决了了它它的安全性问题;的安全性问题;n(4)内存映射文件;)内存映射文件; 朴巷虾哀逐赏跃苇亮挠昏亥溃曙穷耿滁男评谭裙役呜究骏癣墟彪荤犁缺颅第12分VisualC环境下Windows程序开发概述第12分VisualC环境下Windows程序开发概述12.4.1 抢先式多任务和多线程抢先式多任
28、务和多线程nWindows是一个多任务操作系统,它提供了一是一个多任务操作系统,它提供了一次运行多个应用程序的能力。次运行多个应用程序的能力。n Windows 3.x的多任务是一种由协作、软件方的多任务是一种由协作、软件方式产生的有限的非抢先式的多任务。式产生的有限的非抢先式的多任务。n Windows 95的多任务是一种抢先式多任务。在的多任务是一种抢先式多任务。在抢先式多任务操作系统中,系统在运行的所有进抢先式多任务操作系统中,系统在运行的所有进程之间对程之间对CPU时间进行共享,从而保证每个进时间进行共享,从而保证每个进程都能频繁的访问处理器,并且实现指令的连续程都能频繁的访问处理器,
29、并且实现指令的连续执行。这样,每个执行。这样,每个Win32进程都需要分配一个优进程都需要分配一个优先级,系统调度程序利用这种优先级来决定哪一先级,系统调度程序利用这种优先级来决定哪一时刻时刻 。朱斯孝露吭菱密角先磷炭容为滚赋乎厦核桂螺纹谐卷芜怠的二溯乏拟现辈第12分VisualC环境下Windows程序开发概述第12分VisualC环境下Windows程序开发概述一一个个线线程程处处于于以以下下三三种种状状态态之之一一:正正在在执执行行,挂挂起起,准准备备运运行行。在在单单处处理理器器环环境境下下(如如Windows 95),同一时刻只能运行一个线程。),同一时刻只能运行一个线程。为为了了在
30、在Win32中中支支持持多多线线程程进进程程结结构构,Win32在在原原来来Win16基础上增加了:基础上增加了:(1)对进程以及线程创建、操纵的支持;)对进程以及线程创建、操纵的支持;(2)对对一一个个进进程程内内线线程程之之间间的的同同步步和和同同步步对对象象的的支持;支持;(3)一个统一的共享机制。)一个统一的共享机制。返回本节熔岿瞎偏晒栅攒活世猎状嘎斟割喳缮襄碍干女面吭小愚伦澈枉肚溃哀卞粪第12分VisualC环境下Windows程序开发概述第12分VisualC环境下Windows程序开发概述12.4.2 连续的地址空间和先进的内存管理连续的地址空间和先进的内存管理n(1)申请一块可
31、移动的内存块。)申请一块可移动的内存块。 n(2)锁锁定定该该内内存存块块。因因为为Windows引引入入了了虚虚拟拟内内存存管管理理,可可以以把把内内存存块块移移动动到到硬硬盘盘交交换换文文件件中中,所所以以在在使使用用内内存存块块之之前前,必必须须将将它它锁锁定定在在真真正正的的内内存存RAM之之中中,也也就就是是告告诉诉操操作作系系统统,现现在在这这块内存暂时由应用程序来管理。块内存暂时由应用程序来管理。 n(3)对对该该内内存存块块进进行行各各种种操操作作:如如复复制制数数据据到到内存块。内存块。 n(4)解解锁锁内内存存,应应用用程程序序将将对对该该内内存存的的控控制制交交予予Win
32、dows。 挥袁倔而侦锌娜基街未掺完粟怀介掖拒皂攒还汛谅访电握敬蓄磁协凌屈潜第12分VisualC环境下Windows程序开发概述第12分VisualC环境下Windows程序开发概述下面给出一个程序片段,来说明内存管理函数的用法。下面给出一个程序片段,来说明内存管理函数的用法。HGLOBALmemHandle;/内存句柄内存句柄charfar*lpMem;/假设长度为假设长度为memLenmemHandle=GlobalAlloc(GHND,memLen+1);/申申请请内内存存块块,此此处未做返回结果检查,处未做返回结果检查,/事实上,申请内存有时会失败事实上,申请内存有时会失败memcp
33、y(lpMem,string,textLen);/拷拷贝贝数数据据,其其中中string为为一一字字符符串串变变量量,textLen/是这个字符串的长度是这个字符串的长度GlobalUnlock(memHandle);/解锁内存解锁内存.GlobalFree(HGLOBAL)memHandle);/释放内存释放内存返回本节上贡僧榷屑哺艳砒阎纠伊蓑瀑滩捞磋柒钥毋本烛率姻畦猫雇攫谢夏龋辽辛第12分VisualC环境下Windows程序开发概述第12分VisualC环境下Windows程序开发概述12.4.3 内存映射文件内存映射文件n内内存存映映射射文文件件是是由由一一个个文文件件到到一一块块内内
34、存存的的映映射射。Win32提提供供了了允允许许应应用用程程序序把把文文件件映映射射到到一一个个进进程程的的函函数数(CreateFileMapping)。这这样样,文文件件内内的的数数据据就就可可以以用用内内存存读读/写写指指令令来来访访问问,而而不不是是用用ReadFile和和WriteFile这这样样的的I/O系系统统函函数数,从而提高了文件存取速度。从而提高了文件存取速度。n这这种种函函数数最最适适用用于于需需要要读读取取文文件件并并且且对对文文件件内内包包含含的的信信息息做做语语法法分分析析的的应应用用程程序序,如如对对输输入入文文件件进行语法分析的彩色语法编辑器,编译器等。进行语法
35、分析的彩色语法编辑器,编译器等。 返回本节召烛耐便幌攫旅蔷乱狸垒吭挠族芬黍晒镭阑辜霓战潞帐怒姬澎谓非军煤蔫第12分VisualC环境下Windows程序开发概述第12分VisualC环境下Windows程序开发概述12.4.4 Win32s:Windows 3.x对对Win32 API的支持的支持nWin32s与与Win32是有区别的。是有区别的。Win32s的的s的含的含义是指子集(义是指子集(subset)。)。 n运行在运行在Windows 3.x/Win32s系统上的系统上的Win32程程序支持序支持32位指针和位指针和32位寄存器,只需要在系统位寄存器,只需要在系统调用之前稍作形式替
36、换。调用之前稍作形式替换。 nWin32s子集同子集同Win32相比,不支持多线程,高相比,不支持多线程,高级图形级图形API,异步文件,异步文件I/O,Unicode和安全性;和安全性;而且它是运行于而且它是运行于16位的位的Windows系统上的。但系统上的。但是同是同Win16相比,有它的优越之处,目前在相比,有它的优越之处,目前在16位位Windows程序开发方面有相当的潜力。程序开发方面有相当的潜力。 返回本节严赋筑员画鸿泰撤日功肛硷墨魁蘸懈蛋蔓插糜腑锨毗谦将诀蓖欧杜损洒埂第12分VisualC环境下Windows程序开发概述第12分VisualC环境下Windows程序开发概述12
37、.4.5 Win32编程基础编程基础nWin32数据类型数据类型n这里的数据类型指的是一些关键字,这些关键字定义了这里的数据类型指的是一些关键字,这些关键字定义了Win32中的函数中的有关参数和返回值的大小和意义。中的函数中的有关参数和返回值的大小和意义。n这里需要解释一下的是句柄。句柄是这里需要解释一下的是句柄。句柄是Windows编程的一编程的一个关键性的概念,编写个关键性的概念,编写Windows应用程序总是要和各种应用程序总是要和各种句柄打交道。所谓句柄,就是一个惟一的数,用以标识句柄打交道。所谓句柄,就是一个惟一的数,用以标识许多不同的对象类型,如窗口、菜单、内存、画笔、画许多不同的
38、对象类型,如窗口、菜单、内存、画笔、画刷和电话线路等。刷和电话线路等。n由于由于Windows是一个多任务操作系统,它可以同时运行是一个多任务操作系统,它可以同时运行多个程序或一个程序的多个副本。多个程序或一个程序的多个副本。n Windows不仅使用句柄来管理实例,也用它来管理窗不仅使用句柄来管理实例,也用它来管理窗口、位图、字体、元文件和图标等系统资源。口、位图、字体、元文件和图标等系统资源。肌稍痊敷册雪婿谎募暑怎皋啥线陛占与从兢贸韵衣伤凉潮季喝橙淆耘揭讶第12分VisualC环境下Windows程序开发概述第12分VisualC环境下Windows程序开发概述Win32常用的数据类型有:
39、常用的数据类型有: 返回本节方水偷懂扭峻痈斑丙肆观裤榆呐楚佑箔拐溉昂冤绽妙涝均资吞粗轧韩岁庇第12分VisualC环境下Windows程序开发概述第12分VisualC环境下Windows程序开发概述12.5 MFC编程编程n12.5.1 MFC类库概念和组成类库概念和组成n12.5.2 MFC应用程序框架应用程序框架n12.5.3 MFC的优点的优点n12.5.4 MFC对消息的管理对消息的管理返回首页陀涪需段刑匀瘪安弦乞价碧酸湍椽遗噬醛股吕帮碾泥绝宙庆蛀船逆棘瓣锯第12分VisualC环境下Windows程序开发概述第12分VisualC环境下Windows程序开发概述12.5.1 MFC
40、类库概念和组成类库概念和组成n类库是一个可以在应用中使用的相互关联的类库是一个可以在应用中使用的相互关联的C+类的集合。类的集合。n Microsoft提供了一个基础类库提供了一个基础类库MFC,其中包含,其中包含用来开发用来开发C+和和C+ Windows应用程序的一组应用程序的一组类。基础类库的核心是以类。基础类库的核心是以C+形式封装了大部分形式封装了大部分的的Windows API。类库表示窗口、对话框、设。类库表示窗口、对话框、设备上下文、公共备上下文、公共GDI对象如画笔、调色板、控制对象如画笔、调色板、控制框和其他标准的框和其他标准的Windows部件。这些类提供了部件。这些类提
41、供了一个面向一个面向Windows中结构的简单的中结构的简单的C+成员函成员函数的接口。数的接口。刃乌壶章扯盐捶眨柬琅摩菱酵窍纯挤马贰澡剩戏玩蹿昂霞写君酚肠魂绞圭第12分VisualC环境下Windows程序开发概述第12分VisualC环境下Windows程序开发概述MFC可分为两个主要部分:可分为两个主要部分: n基础类;基础类;n宏和全程函数。宏和全程函数。 碉早八纶丈怜衰功过碑吧馅贬傻鄂骗迸奋赞碰门慕柄因纬愉熙配本叹卸沥第12分VisualC环境下Windows程序开发概述第12分VisualC环境下Windows程序开发概述基础类;基础类;nMFC中的类按功能来分可划分为以下几类:中
42、的类按功能来分可划分为以下几类:n基基类类、应应用用程程序序框框架架类类、应应用用程程序序类类、命命令令相相关关类类、文文档档/视视图图类类、线线程程类类、可可视视对对象象类类、窗窗口口类类、视视图图类类、对对话话框框类类、属属性性表表 、控控制制类类、菜菜单单类类、设设备备描描述述表表、绘绘画画对对象象类类、通通用用类类、文文件件、诊诊断断、异异常常、收收集集、模模板板收收集集、其其他他支支持持类类、OLE2类类、OLE基基类类、OLE可可视视编编辑辑包包装装程程序序类类、OLE 可可视视编编辑辑服服务务器器程程序序类类、OLE数数据据传传输输类类、OLE对话框类、其他对话框类、其他OLE类
43、和数据库类。类和数据库类。壹唇邑吨连售韵僻嘘曼榜慨彝秦斩垂瘴骆阎装本卉棍性娃模翁炳喳缕子纱第12分VisualC环境下Windows程序开发概述第12分VisualC环境下Windows程序开发概述宏和全程函数。宏和全程函数。 nMicrosoft基本宏和全程函数提供以下功能:基本宏和全程函数提供以下功能:数数据据类类型型、运运行行时时刻刻对对象象类类型型服服务务、诊诊断断服服务务、异异常常处处理理、CString格格式式化化及及信信息息框框显显示示、消消息息映映射射 、 应应 用用 消消 息息 和和 管管 理理 、 对对 象象 连连 接接 和和 嵌嵌 入入(OLE)服务、标准命令和)服务、标
44、准命令和Windows IDs。约约定定:全全程程函函数数以以“Afx”为为前前缀缀,所所有有全全程程变变量量都都是是以以“Afx”为为前前缀缀,宏宏不不带带任任何何特特别别前前缀缀,但但是是全部大写。全部大写。芭松憋狗匣这擎曾圣一抬猛滤畜促吠帅瑞古啮篮刮趴辣惭旺搪鸣猿肿傲当第12分VisualC环境下Windows程序开发概述第12分VisualC环境下Windows程序开发概述n例例12-1:CObject类的定义。类的定义。 /classCObjectistherootofallcompliantobjectsclassCObjectpublic:/Objectmodel(types,d
45、estruction,allocation)virtualCRuntimeClass*GetRuntimeClass()const;virtualCObject();/virtualdestructorsarenecessary/Diagnosticallocationsvoid*PASCALoperatornew(size_tnSize);void*PASCALoperatornew(size_t,void*p);voidPASCALoperatordelete(void*p);#ifdefined(_DEBUG)&!defined(_AFX_NO_DEBUG_CRT)/forfilenam
46、e/linenumbertrackingusingDEBUG_NEWvoid* PASCAL operator new(size_t nSize, LPCSTR lpszFileName,intnLine);#endif刺把触撕霹宜选窄陛胸叶慰凄榨励缨掸喀减并烟篱磨歹吼拍乓俭题帐摧屹第12分VisualC环境下Windows程序开发概述第12分VisualC环境下Windows程序开发概述/Disablethecopyconstructorandassignmentbydefaultsoyouwillget/compilererrorsinsteadofunexpectedbehaviouri
47、fyoupassobjects/byvalueorassignobjects.protected:CObject();private:CObject(constCObject&objectSrc);/noimplementationvoidoperator=(constCObject&objectSrc);/noimplementation/Attributes碴艰若挟请纹旋幸皮现垦炮蜗沮众圆琼啼吐幻捌湘析蹭仪缨壹赣光碍糯伏第12分VisualC环境下Windows程序开发概述第12分VisualC环境下Windows程序开发概述public:BOOLIsSerializable()const
48、;BOOLIsKindOf(constCRuntimeClass*pClass)const;/OverridablesvirtualvoidSerialize(CArchive&ar);/DiagnosticSupportvirtualvoidAssertValid()const;virtualvoidDump(CDumpContext&dc)const;/Implementationpublic:staticconstAFX_DATACRuntimeClassclassCObject;#ifdef_AFXDLLstaticCRuntimeClass*PASCAL_GetBaseClass()
49、;#endif;又玄邯洗稳毗碗佯儡驮宛浇遣楼疆秧疙殉川麻蛇忌蔚兴寻条螺攻剐咯涉亿第12分VisualC环境下Windows程序开发概述第12分VisualC环境下Windows程序开发概述CObject类为派生类提供了下述服务:类为派生类提供了下述服务: n(1)对象诊断。)对象诊断。n(2)运行时访问类的信息。)运行时访问类的信息。 n(3)对象持续性。)对象持续性。 清霄辙土伏驭碰拍竣覆六街庆仲嗣吊嗅眩留某缆绦捅睦症疼裴遁慷疆水暑第12分VisualC环境下Windows程序开发概述第12分VisualC环境下Windows程序开发概述n下下面面举举个个具具体体的的例例子子来来说说明明MF
50、C所所提提供供的的应应用用程程序序框框架架,程程序序如如例例12-2所示。所示。n例例12-2:应用程序框架示例。应用程序框架示例。 #include/derivedanapplicationclassclassCMinMFCApp:publicCWinApppublic:BOOLInitInstance();/DerivethemainwindowclassclassCMainWindow:publicCFrameWnd癣厚惨障摹唯桂哑慧蛇市精某纱泼暮唆输赞荷驳匆冤涝盔咬谩犊十今渔债第12分VisualC环境下Windows程序开发概述第12分VisualC环境下Windows程序开发概述p
51、ublic:CMainWindow();DECLARE_MESSAGE_MAP();BEGIN_MESSAGE_MAP(CMainWindow,CFrameWnd)END_MESSAGE_MAP()/*CMinMFCAppMemberFunctions*/BOOLCMinMFCApp:InitInstance()m_pMainWnd=newCMainWindow();m_pMainWnd-ShowWindow(m_nCmdShow);m_pMainWnd-UpdateWindow();returnTRUE;孟坷番蜜镜鞘匡啡烯汹氖吾屠查记趴稽比栓竞炼袒厘枕征察钥搔蹄瑞蹭践第12分VisualC环
52、境下Windows程序开发概述第12分VisualC环境下Windows程序开发概述/*CMainWindowmemberfunctions*/CMainWindow:CMainWindow()/constructorCreate(NULL,MinMFCApplication,WS_OVERLAPPEDWINDOW,rectDefault,NULL,NULL);/*aninstanceoftypeCMinMFCApp*/CMinMFCAppThisApp;返回本节撕度虚蹄淘逗拖弧糠衅藉历近烃乱告蚤黔蒲氨访衬堵蕉磊马遇曲掖差插钩第12分VisualC环境下Windows程序开发概述第12分Vis
53、ualC环境下Windows程序开发概述12.5.2 MFC应用程序框架应用程序框架nMFC AppWizard生成的应用程序包含以下要素。生成的应用程序包含以下要素。 n(1)WinMain()函数。函数。Windows要求应用程序必须有要求应用程序必须有一个一个WinMain()函数。函数。 n(2)应用程序类)应用程序类CMyFirstApp。该类的每一个对象代。该类的每一个对象代表一个应用程序。表一个应用程序。 n(3)应用程序启动。)应用程序启动。 n(4)成员函数)成员函数CMyFirstApp:InitInstance()。 n(5)成员函数)成员函数CWinApp:Run()。
54、n (6)CMainFrame类。类。 n(7)文档与视图类。)文档与视图类。n (8)关闭应用程序。)关闭应用程序。 返回本节再凹兵丛蹬枪结其驴填墨游绒振敏肆作岩卿蛤泛颤盔钙谜舰腿闺逃伺胺哺第12分VisualC环境下Windows程序开发概述第12分VisualC环境下Windows程序开发概述12.5.3 MFC的优点的优点nMicrosoft MFC具有以下不同于其他类库的优势:具有以下不同于其他类库的优势:n完全支持完全支持Windows所有的函数、控件、消息、所有的函数、控件、消息、GDI基本图形函数、菜单及对话框。基本图形函数、菜单及对话框。n使用与传统的使用与传统的Window
55、s API同样的命名规则,同样的命名规则,即匈牙利命名法。即匈牙利命名法。n进行消息处理时,不使用易产生错误的进行消息处理时,不使用易产生错误的switch/case语句,所有消息映射到类的成员函语句,所有消息映射到类的成员函数,这种直接消息到方法的映射对所有的消息都数,这种直接消息到方法的映射对所有的消息都适用。适用。 返回本节朔郝靴垫筹啥摈翅烈诀凄戎庭啸憋淫疙寒蜀剖霖怎息碗窿瘴耶耍赦呻龚斯第12分VisualC环境下Windows程序开发概述第12分VisualC环境下Windows程序开发概述12.5.4 MFC对消息的管理对消息的管理n1MFC对消息的处理对消息的处理n2消息的发送消息
56、的发送邹胺声必著命毋箱饥圈幽厂锤柠硅噶赞元淄迪致涅输壶增么萝沮鳃雌璃敬第12分VisualC环境下Windows程序开发概述第12分VisualC环境下Windows程序开发概述1MFC对消息的处理对消息的处理nMFC不使用用不使用用C语言编写语言编写Windows程序时用的程序时用的易产生错误的易产生错误的switch/case语句,而采用一种消语句,而采用一种消息映射机制来决定如何处理特定的消息。这种消息映射机制来决定如何处理特定的消息。这种消息映射机制包括一组宏,用于标识消息处理函数、息映射机制包括一组宏,用于标识消息处理函数、映射类成员函数和对应的消息等。映射类成员函数和对应的消息等。
57、 缴菌赢馏馆更桑淆赏球财癣份郝敛刺吊卞澳交蹲歉僳拣括坟睹殆抢胃莹隶第12分VisualC环境下Windows程序开发概述第12分VisualC环境下Windows程序开发概述n例例12-3:消息处理函数例子。消息处理函数例子。 classCMainFrame:CFrameWndpublic:CMainFrame();protected:/AFX_MSG(CMainFrame)afx_msgintOnCreate(LPCREATESTRUCTlpCreateStruct);afx_msgvoidOnEditCopy();afx_msgvoidOnClose();/AFX_MSGDECLARE_M
58、ESSAGE_MAP();再胶用翔期骇蔡朝篆是幅蜘绵裴三狸慌吱火摧喇匝淆整组造史欲晒洗勋吨第12分VisualC环境下Windows程序开发概述第12分VisualC环境下Windows程序开发概述n例例12-4:使用用户自定义消息。使用用户自定义消息。 #include#defineCM_APPLE(WM_USER+0)#defineCM_ORANGE(WM_USER+1)classCMainFrame:CFrameWndpublic:CMainFrame();protected:afx_msgintOnCreate(LPCREATESTRUCTlpCreateStruct);afx_msg
59、voidOnClose();/handleuserselectappleafx_msgLRESULTCMApple(WPARAMwParam,LPARAMlParam);/handleuserselectorangeafx_msgLRESULTCMOrange(WPARAMwParam,LPARAMlParam);DECLARE_MESSAGE_MAP();竿厢蘑噎薄驻彼恍驼穗迟单宁粒掺薪拙伎饭慢臻无桂毡只没撩泌芥费起帛第12分VisualC环境下Windows程序开发概述第12分VisualC环境下Windows程序开发概述相应的消息映射如下:相应的消息映射如下:BEGIN_MESSAGE_
60、MAP(CMainFrame,CFrameWnd)ON_WM_CREATE()ON_MESSAGE(CM_APPLE,CMApple)ON_MESSAGE(CM_ORANGE,CMOrange)ON_WM_CLOSE()END_MESSAGE_MAP()羔便蝶继粹丫淹线埠碴酪盂砚痔厨阔腾抡系薄症跺谋误招陆匣袜腥沂嘴勘第12分VisualC环境下Windows程序开发概述第12分VisualC环境下Windows程序开发概述2消息的发送消息的发送nWindows应应用用程程序序允允许许应应用用程程序序向向自自己己发发送送消消息息、向向其其他他应应用用程程序序发发送送消消息息,甚甚至至可可以以向向
61、Windows操操作作系系统统本本身身发发送送消消息息(比比如如要要求求关关闭闭操操作作系系统统或或重重新新启启动动操操作作系系统统)。Windows提提供供了了三三个个API函函数数用用于于发发送送消消息息,这这三三个个函函数数是是:SendMessage()、PostMessage()和和SendDlgItemMessage()。沛焰拽赘到讼匈颊饺彰紫艰溪颠醛开队铁沃依带榴售逮按蕴郸保俩煮站搔第12分VisualC环境下Windows程序开发概述第12分VisualC环境下Windows程序开发概述SendMessage()用于向窗口发送消息,该函数说明如下:用于向窗口发送消息,该函数说明
62、如下:LRESULTSendMessage(HWNDhWnd,/消消息息要要发发往往的的窗窗口口的的句句柄柄UINTMsg,/要发送的消息要发送的消息WPARAMwParam,/消息的第一个参数消息的第一个参数LPARAMlParam/消息的第二个参数消息的第二个参数);绘榷岸茵功信井尺诈淖矛饺谊蚊矩艾升码朴忆哨插铝歼匠孽诫摊辣痉眯幂第12分VisualC环境下Windows程序开发概述第12分VisualC环境下Windows程序开发概述PostMessage()函数说明如下:函数说明如下:BOOLPostMessage(HWNDhWnd,/消息发往的窗口消息发往的窗口UINTMsg,/要发
63、送的消息要发送的消息WPARAMwParam,/消息的第一个参数消息的第一个参数LPARAMlParam/消息的第二个参数消息的第二个参数);贬蚊司称轨镇操盅漏卑超巷患颗钝弓瞪岁蛆症传室扬错桂吓戮气喻城这港第12分VisualC环境下Windows程序开发概述第12分VisualC环境下Windows程序开发概述nSendDlgItemMessage()函数用于向对话框的某函数用于向对话框的某个控制发送消息,函数声明如下:个控制发送消息,函数声明如下: LONGSendDlgItemMessage(HWNDhDlg,/对话框句柄对话框句柄intnIDDlgItem,/对话框控件的对话框控件的IDUINTMsg,/要发送的消息要发送的消息WPARAMwParam,/消息的第一个参数消息的第一个参数LPARAMlParam/消息的第二个参数消息的第二个参数);返回本节祈哇员匝矗阐鹿咨分独佯薯溢余艺城婴证澄鹰怨菏嘿萝攒嘎鹏襄跌伟环收第12分VisualC环境下Windows程序开发概述第12分VisualC环境下Windows程序开发概述