C的Windows编程基础课件_第1页
C的Windows编程基础课件_第2页
C的Windows编程基础课件_第3页
C的Windows编程基础课件_第4页
C的Windows编程基础课件_第5页
已阅读5页,还剩211页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

C的Windows编程基础聪明出于勤奋,天才在于积累C的Windows编程基础C的Windows编程基础聪明出于勤奋,天才在于积累Windows编程基础基本概念Windows程序运行机制VC6.0下三种编程方式命名规则——匈牙利命名法(自学)Windows程序结构简单的Windows编程(API)MFC编程基础新课程改革倡导教师改变传统的单向授课方式,构建有利于学生终身发展的高效课堂教学新模式,培养学生主动学习的能力。为贯彻落实高效课堂改革宗旨,促进学生全面发展,2013年下半年以来,我校全体教师在实践中不断探索、优化和创新,推出了“四自”高效课堂教学新模式,实现课堂真正意义上“质”的提升――课堂即成长,既成长知识与能力,也成长情感与创造力。目前,我校语文、数学、英语各科教师均能熟练运用“四自”高效课堂模式组织课堂教学,并能根据实际情况灵活运用,以学定教,学与教相得益彰,课堂教学呈现出勃勃生机。我校高效课堂“四自”教学模式是指在课堂教学中以“自我准备―铺垫导入、自主学习―导学探究、自主检测―巩固内化、自我提升―总结评价”为主要环节的高效课堂教学模式,四大模块的时间大致分配为:5分钟+20分钟+10分钟+5分钟。本模式总的设计理念为:课堂教学必须以学生为本,注重学生自身学习的意识、情感、方法、态度的培养,课堂教学方式要从传统的关注教师讲为主转变为以学生自主学习交流为主,课堂教学要体现以学生的终身发展和全面发展为根本目标。“四自”模式的内涵旨在以学生为中心,高度尊重学生,全面依靠学生,充分发挥学生潜能,通过学生自主学习与合作交流并存的探索、实践、质疑、创造等方法来完成学习目标。高效课堂“四自”教学模式基本环节及设计理念阐释如下:一、自我准备―铺垫导入自我准备环节包括教师教的准备和学生学的准备两个方面。教师教的准备是指教师根据高效课堂的教学理念和本学科特点,结合本班学生的具体情况,认真钻研文本,设计最合适的导学问题、学路建议或学法指导,并根据学生的课前准备情况作适当调整,以达到最佳的导学效果。学生学的准备是指学生在课前根据教师要求充分复习和预习,情绪饱满,准备好学具、知识、学习方法等。学生要在复习旧知和以往掌握的学习方法的基础上,明确本节课的学习目标,进入教师创设的学习情境,为学习新知识、掌握新能力奠定基础。自我准备环节要求教师通过检测了解本班学生的学习准备情况,适当调整课堂教学的目标与重难点,并创设合适的学习情境与氛围;学生要通过温故知新做好思考和探究的准备,调动学习积极性并快速融入到学习情境中。此环节是对师生课前准备情况的检测,旨在贯彻落实“先学后教,以学定教”的高效课堂教学理念,使课堂教学更具有针对性和指向性。二、自主学习―导学探究自主学习环节是课堂教学的主体,旨在通过教师的引导,让学生充分投入到学习中,通过独立自学、小组交流和全班交流评价等方式促使学生掌握知识、形成技能。该环节是根据新课标提出的“积极倡导自主、合作、探究的学习方式,努力建设开放而有活力的课程”这一基本理念设计的,它将学生独立自学、学习小组和全班学生合作互学、交流释疑、总结评价等学习方式有机融为一体,达到充分调动学生学习积极性和主动性的目的,主要包括独立自学与交流释疑两个环节。独立自学环节是指学生根据教师设计好的导学问题或学路建议,通过独立学习充分感知教材、理解教材,并提出自己的疑问,形成初步的思考结果。这一过程属于思维的最佳状态,教师一般不宜打断学生的思维,应引导学生根据导学问题或学路建议自己动脑动手获取知识,发现问题。教师可巡视,督促自学,掌握学生的自学情况,发现学生思维中的薄弱环节,为下一步探究搜集素材。交流释疑环节包含讨论、互教、展示、点评、质疑、解惑等活动,主要表现在学生遇到自己不能解决的问题时向小组同学请教,小组共同探讨;在课堂上小组汇报展示解决问题的过程、方法和结果,或者质疑讨论不了的问题;教师鼓励其他同学点评或者答疑,从而让更多同学展示自己的学习方法和成效。在这一过程中,教师应善于发现错误症结,适时点拨,精讲重点、难点及困惑点,启发引导学生进行总结,提炼方法,使知识系统化。教师也可以采用质疑导学问题的方法引导学生们进行有效探究,对于学生可以独立完成的导学问题,教师只需在提问、讨论过程中明确肯定学生的自学结果并给予表扬鼓励即可。有一定难度的问题可以提问于中等偏上的学生,使各层次的学生人人参与,个个都有受表扬的机会,通过肯定、表扬、鼓励等方式让学生体会到学习的快乐,从而体验成功的喜悦,认为学习是“乐事”而非“苦差”,更加激发学生们的学习兴趣与学习热情,产生源源不断的学习动力。在提问、讨论的过程中,教师应特别关注有待激励的学生,把导学问题中简单的问题留给他们,鼓励学困生变依赖观望为积极投入,跳一跳也能品尝到甘甜的知识之果。三、自主检测―巩固内化自主检测环节是指教师针对本堂课的重难点设计形式多样、螺旋上升的检测题当堂考查学生对学习内容的掌握情况,并进行及时反馈。检测题的设计要根据学生实际和教学实际,在质与量两方面下工夫,进行严格筛选。教师所设计的检测题可以是例题的变型题、课本上的练习题或改造题、练习册上的原题或改选题,也可以是课堂知识的小测试、听写、背诵、竞赛等,内容多样化,形式多元化。检测题可分为必做题与选做题,必做题侧重于基础知识和基本技能,重在巩固强化课堂知识信息的识记、理解与运用,属基础题。选做题侧重于对所学知识的深化运用,难度、灵活度较大,这是对学有余力同学的培优,重在培养学生知难而进的钻研精神。自主检测环节要求教师鼓励学生根据自主学习情况以巩固性练习题和拓展性练习题对自己进行检测,在自主检测中进一步内化知识、提升能力。同时要充分发挥学习组长的小老师作用,让小组长检查批改组内成员的课外作业或组织成员相互交流、检查、批改作业并及时订正。作为教师主要是发现并引导学生探究具有代表性和共性的疑难问题,精讲重点难点、学生易错易混知识点以及告知学生解答的方法和技巧,以达到对所学知识的巩固、内化。四、自我提升―总结评价自我提升环节体现了将知识系统化和将学习生活化的教学理念。此环节的教学中,教师可引导学生梳理本堂课的知识重点和能力训练要点,引导学生对本节课学习的主要内容、基本方法、情感升华或人文思想进行梳理总结,组织学生对课堂学习表现情况进行自评、互评,教师亦可对表现优异的个人和小组给予激励性评价,也可以布置有意义的拓展延伸实践活动等,通过此环节的教学,促使学生总结学习经验,掌握学习方法,最终学会自我学习与合作学习。任何教学模式,都是在一定教学思想或理论指导下建立起来的较为稳定的教学活动结构框架。我校所创新的高效课堂“四自”教学模式充分体现了“先学后教、以学定教”的教学原则,经过一年多来的教学实践,证明本模式操作性强,能让学生的情感动起来,让学生的嘴巴动起来,让学生的双手动起来,让学生的大脑动起来,确实是一种颇具推广价值的教学模式。我们坚信在这种科学、合理的模式理念指导下,我校的高效课堂改革之花一定会盛开得更加绚烂!?创设真实学习情境是指将书本中的那些抽象、间接的概念及原理还原到真实的情境中,还知识的本来面目,创设与学习内容相融合的真实情境,让学生在身临其境中学会知识,获得能力,学会在感受、体验中认识世界,丰富人生的经历。教师在课堂教学中创设真实的学习情境,是落实新课程理念与课程标准的一条重要途径。试以高中生物新课程为例,探讨新课程实施中创设真实学习情境的课堂教学策略。1联系学生的生活经验学生的生活经验中蕴藏着巨大的,甚至是无穷无尽的教育资源。教学中,教师若从学生熟悉的经验出发,将学生的生活世界和书本世界联系起来,能够极大地激发学生的学习兴趣与动机,帮助学生借助已有的相关生活经验理解新知识,有利于培养学生关注社会、关注生活的情感态度,使他们体会到科学与社会、生活密切相关,并善于从生活中发现问题和运用知识解决问题。例如,学习细胞中的糖类时,教师提供几种糖果让学生看配料说明,进行品尝;学习细胞中的无机物时,让学生拿出自带的饮料瓶看成分说明;学习细胞呼吸时,为学生提供市场上购买的酿制食醋、味精、啤酒及自制的果酒;学习免疫调节时,联系接种疫苗、艾滋病、器官移植内容等。联系学生的生活经验,教师不但要引导学生从生活中发现问题,同时也要重视为学生提供应用知识于真实生活中的情境。比如,让学生为加酶洗衣粉作广告,为色盲患者提供优生的方案,解释鸡蛋为什么煮熟了吃更好消化……2提供观察、实验、考察等实践机会教学中,教师将学习任务设置在与之相对应的真实情境中,为学生提供观察、实验、考察等实践机会,会使课本中抽象、间接的知识感性化、具体化,实现化繁为简、化难为易、化枯燥为生动,并使学生能够在实践活动中获得多方面的能力和体验。例如,学习细胞中的无机盐时,教师点燃花生种子、向日葵种子,让学生观察它们在燃烧过程中释放出能量和最终得到的灰烬;学习物质跨膜运输的实例时,让学生用盐拌韭菜馅、黄瓜丝,观察现象;学习细胞呼吸内容时,让学生通过塞验“探究酵母菌细胞呼吸的方式”来理解抽象的细胞呼吸概念和方式;在“使用高倍显微镜观察几种细胞”、“观察根尖分生组织细胞的有丝分裂”等实验中,给学生提供充分的独立操作和观察的机会;针对有些难以直接观察到的生命现象如草履虫的分裂过程、分泌蛋白的合成和运输等内容,为学生提供录像或图片,以便其进行观察。3提供与所学知识相关的历史背景将科学知识置于社会和历史背景之中,重现知识发生发展的真实情景,可以使学生在更大的背景范围内理解知识,建立起更广泛的知识结构,了解在科学知识的发生发展过程中,科学家的思维方式和价值取向,体会科学知识在人类发展史中的价值与作用,并通过知识的发生发展过程,使学生实现深入理解知识和灵活应用知识。例如,教材中科学史方面的资料分析“细胞学说建立的过程”的背景资料中包含了细胞学说的主要内容、细胞学说的形成过程、细胞学说建立过程中的思维方式、细胞学说发现与技术之间的关系、科学家的价值观对细胞学说发现的影响、科学发现过程中的科学精神等。教师要使学生仿佛置身于建立细胞学说的时代,更加深入地理解其含义,领悟其中蕴含的方法,体会科学家的情感、态度与价值观。教师应充分挖掘并利用好教材中提供的科学史资料,努力为学生展现出科学发现的真实历史背景。4创设模拟情境模拟情境是指模仿事物发生发展的真突情况而进行的类比、想象和行动。它能够将微观、抽象、间接的内容形象、具体化,实现化难为易、深入浅出,能够有效地帮助学生理解知识,使学生学会运用类比的方法,并培养学生的想象力。例如,学习“生命活动的主要承担者――蛋白质”一节内容时,针对蛋白质分子结构的多样性这一教学难点,教师创设了如下的模拟情境:呈现一幅用英文字母表示的细胞内氨基酸图片,图片中的每一个英文字母代表一个氨基酸,不同的字母代表不同的氨基酸。然后进行类比说明:当氨基酸的种类相同,数目不同时,如organize/organizer,词意不同;当氨基酸的数目相同,种类不同时,如mice/rice,词意不同;当氨基酸的种类、数目相同,但排列顺序不同时,如pear/reap,词意不同。氨基酸的数目、种类、排列顺序的不同,加上多肽链空间结构的千差万别,肽链数目的不同,形成了不同结构的蛋白质。5制作物理模型物理模型是指以实物或图画形式直观地表达认识对象的特征。物理模型是将真实的物体经过简化、概括而建构成的,能够直观而形象地表达认识对象的特征,便于观察和理解。通过制作物理模型,学生能够更加深入地认识事物的本质与特征,把握事物之间的空间结构关系,理解结构和功能之间的关联。例如,在学习“尝试制作真核细胞的三维结构模型”、“制作DNA双螺旋结构模型”的内容时,教师要求学生自己选择材料进行设计、制作模型。结果,学生选择了多种多样的材料:种子、果实、蔬菜、橡皮泥、毛线、果脯、彩纸、布、小食品等。他们用这些丰富的材料制作出了富有创意的各种模型,并在制作模型的过程中及时发现问题、纠正错误的认识,进行自评和互评。这样,学生们通过亲手制作模型,获得了关于细胞结构、DNA结构的知识,获得了制作模型的技能,发展了他们的创造性思维。6创设故事情境创设故事情境是将知识融于故事之中,以故事的方式来表达知识,能够化枯燥为生动、,化抽象为具体。教学中,教师创设适宜的故事情境对激发学生的学习兴趣,帮助学生理解和应用知识具有重要的意义。例如,在学习“细胞器――系统内的分工合作”时,教师以葡萄糖分子在细胞中的旅行为线索,形象生动地交代了各种细胞器的结构及其功能。教师是这样导入的:一天,几个分子怀着好奇心,打算结伴到细胞里畅游一番,它们一同来到细胞膜前敲门,细胞膜随后对它们进行了严格的审查。结果,蛋白质、核酸、蔗糖都被拒之门外了,只有葡萄糖很幸运,如愿进入了细胞。葡萄糖分子来到细胞内,放眼望去,没想到这个汪洋世界里竟如此熙熙攘攘、热闹非凡,又绝对是井然有序、严密协调,动力站、化工厂、包装厂、净化机构,还有运输通道等,俨然一个大而全的“工业加工基地”。葡萄糖分子究竟看到了细胞内部有什么更精致的结构?这些结构之间有怎样的联系?它们承担着什么生命功能?它们又是怎样协调配合的?让我们一起跟随葡萄糖分子来探索……7进行调查、搜集实例进行调查和搜集实例,能够使学生深入到真实的情境中,获得真实的资料和感受,在实践中理论联系实际,理解知识,应用知识解决问题,获得收集信息的能力,学会鉴别、选择、运用和分享信息。,例如,关于人类遗传病一节内容,教师设计了调查问卷,发动学生在休息日、假期到社区,甚至到医院去调查,让学生了解在日常生活中遗传病的种类、外在表现及其遗传规律,对在社区、医院收集的遗传病例、家系图谱进行整理。还可以让学生调查当地生态环境中的主要问题,提出保护建议或行动计划;调查某种动物激素的应用;搜集应用生物技术保护生物多样性的实例;搜集有关试管婴儿的资料,评价其意义及伦理问题;搜集恶性肿瘤防治方面的资料等。8进行游戏、角色扮演教学中,教师以游戏或龟色扮演的方式来完成相应的学习任务,会极大地激发学生的学习兴趣,使他们倍感亲切,加深内心体验和对知识的理解,并留下深刻的印象。这样对化抽象为具体、化难为易、培养学生的情感态度与价值观具有非常重要的意义。例如,在学习减数分裂内容时,教师制作了8条果蝇染色体模型,分别发给8名学生,让每名学生扮演其中的一条染色体,先让8名学生摆出果蝇体细胞中的染色体组成,然后又让8名学生摆出果蝇配子中染色体的组成,其他学生进行评价。这样使原本很抽象的内容很快得到了解决,给学生留下了非常深刻的印象。9在真实情境中评价学习结果对学生学习结果的评价,应与真实情境融为一体,这样,才能够如实反映出学习的效果。例如,评价学生使用显微镜的能力,是在学生的实际操作中进行的,而不是纸上谈兵。学生在学习过程中对真实问题的解决,其本身就反映了学习的效果。如让学生设计并实施实验“比较过氧化氢酶在不同条件下的分解”,教师可以通过学生的设计方案、实施过程、所得结果进行评价。教师编制的有关测试题也应与真实情境相融,如“家庭中的盆栽植物要经常松土,请你用细胞呼吸的原理分析松土对植物的影响”。教师为评价学生的学习结果而提问的问题应设置在真实情境中。如浓度低的饮料可以用来补充体内的水分,浓度高的饮料能起到这样的作用吗?生产高浓度饮料的厂商可以宣传其产品很解渴吗?C的Windows编程基础聪明出于勤奋,天才在于积累C的Wi1Windows编程基础Windows编程基础2基本概念Windows程序运行机制VC6.0下三种编程方式命名规则——匈牙利命名法(自学)Windows程序结构简单的Windows编程(API)MFC编程基础基本概念3窗口和程序窗口是Windows本身以及Windows环境下的应用程序的基本界面单位。很多人都误以为只有具有标题栏、状态栏、最大化、最小化按钮这样标准的方框才叫窗口。其实窗口的概念很广,例如按钮和对话框等也是窗口,只不过是一种特殊的窗口。窗口和程序窗口是Windows本身以及Windows环境下4窗口窗口(Window)由句柄唯一标识。Windows程序的基本操作单元。系统管理应用程序的基本单位。应用程序与用户交互的接口环境。应用程序的运行就是窗口内部、窗口之间、窗口与系统之间数据处理与交换的过程。一个Windows程序至少有一个窗口。窗口窗口(Window)由句柄唯一标识。5窗口的组成应用程序的主窗口窗口窗口窗口窗口窗口窗口的组成应用程序的主窗口窗口窗口窗口窗口窗口6窗口的组成窗口是屏幕上的一个矩形区域应用程序在该区域中显示数据并等待鼠标点击Windows应用系统的用户界面可以包含许多窗口每个窗口都有不同的特点,但都是互相联系的窗口的组成窗口是屏幕上的一个矩形区域7三种类型的窗口在这么多窗口中,基本类型只有三种:重叠(Overlapped)窗口弹出(Popup)窗口子(Child)窗口在它们之间并没有太多内在的差异,但是使用不同的窗口风格,它们的外观是不同的三种类型的窗口在这么多窗口中,基本类型只有三种:8三种类型的窗口重叠窗口通常用于建立应用程序主窗口。事实上,有时也叫做“主”窗口或者“框架”窗口弹出窗口通常以对话框和消息框的形式与用户对话子窗口通常用在视图(View)中,如在文本编辑器中的文本显示,也用在控件中,如在对话框中的OK按钮而对那些看起来像按钮或控件的子窗口,也称为“控件”窗口三种类型的窗口重叠窗口通常用于建立应用程序主窗口。事实上,有9三种窗口组成的应用程序属于桌面的重叠窗口,也称主窗口主窗口的子窗口主窗口的子窗口主窗口的弹出窗口弹出窗口的子窗口三种窗口组成的应用程序属于桌面的重叠窗口,也称主窗口主窗口的10三种类型的窗口主要区别重叠窗口和弹出窗口弹出窗口出现时可以没有标题(也称为标题栏)子窗口与重叠窗口、弹出窗口子窗口只能出现在另一个窗口中,并且子窗口的任何多余部分都被该窗口移去或剪切掉另外,子窗口是唯一不能有菜单条的窗口三种类型的窗口主要区别11程序通常说的程序都是指一个能让计算机识别的文件。接触得最多的是以exe或者com作为扩展名的文件。程序通常说的程序都是指一个能让计算机识别的文件。12进程与线程进程就是应用程序的执行实例(或称一个执行程序),进程是程序动态的描述。一个以exe作为扩展名的文件,在没有被执行的时候称之为应用程序,当用鼠标双击执行以后,就被操作系统作为一个进程执行了。当关机或者在任务栏的图标上单击鼠标右键选“退出”时,进程便消亡,彻底结束了生命。进程经历了由“创建”到“消亡”的生命期,而程序自始至终存在于你的硬盘上,不管计算机是否启动。进程与线程进程就是应用程序的执行实例(或称一个执行程序),进13Windows任务管理器—进程Windows任务管理器—进程14线程线程是进程的一个执行单元。同一个进程中的各个线程对应于一组CPU指令、一组CPU寄存器以及一个堆栈。进程本来就具有动态的含义,是通过线程来体现的。线程线程是进程的一个执行单元。15Windows应用程序,操作系统,计算机硬件之间的相互关系

应用程序

操作系统

输入输出设备

消息队列

向下的箭头1表示操作系统能够操纵输出设备,以执行特定的功能,如让声卡发出声音,让显卡画出图形。向上的箭头2表示操作系统能够感知输入设备状态的变化,如鼠标移动,键盘按下,并且能够知道鼠标移动的具体位置,键盘按下的哪个字符。这就是操作系统和计算机硬件之间的交互关系,应用程序开发者通常不需知道其具体实现细节。Windows应用程序,操作系统,计算机硬件之间的相互关系16API与SDKAPI是英文ApplicationProgrammingInterface的缩写,意思是“应用程序接口”,泛指系统为应用程序提供的一系列函数接口在编程时可以直接调用,而不必知道其内部实现的过程,只知道它的原型和返回值就可以了SDK是英文SoftwareDevelopmentKit的缩写,意思是“软件开发工具包”微软提供了许多专门的SDK开发包,比如DirectX开发包和语音识别开发包等API与SDKAPI是英文ApplicationProgr17关于API

向下的箭头③表示应用程序可以通知操作系统执行某个具体的动作。如操作系统能够控制声卡发出声音,但它并不知道应该何时发出何种声音,需要应用程序告诉操作系统该发出什么样的声音。关于API向下的箭头③表示应用程序可以通知操18关于API

应用程序是如何通知操作系统执行某个功能的呢?在应用程序中要完成某个功能,都是以函数调用的形式实现的,同样,应用程序也是以函数调用的方式来通知操作系统执行相应的功能的。操作系统所能够完成的每一个特殊功能通常都有一个函数与其对应,也就是说,操作系统把它所能够完成的功能以函数的形式提供给应用程序使用,应用程序对这些函数的调用就叫做系统调用,这些函数的集合就是Windows操作系统提供给应用程序编程的接口WindowsAPI。如CreateWindow就是一个API函数,应用程序中调用这个函数,操作系统就会按照该函数提供的参数信息产生一个相应的窗口。关于API应用程序是如何通知操作系统执行某个功能的呢?19事件及消息事件(Event)是对计算机操作的动作。每个事件对应一个消息,即每个事件发生的效果是产生消息。消息(Message)是描述事件发生的信息。比如:按键事件——按下键的消息、字符消息和键弹起的消息程序执行的顺序取决于事件发生的顺序,但是消息的产生并不要求有次序之分。事件及消息事件(Event)是对计算机操作的动作。每个事件对20消息(Message)

向上的箭头④表示操作系统能够将输入设备的变化上传给应用程序。

如用户在某个程序活动时按了一下键盘,操作系统马上能够感知到这一事件,并且能够知道用户按下的是哪一个键,操作系统并不决定对这一事件如何作出反应,而是将这一事件转交给应用程序,由应用程序决定如何对这一事件作出反应。好比有个蚊子叮了我们一口,我们的神经末梢(相当于操作系统)马上感知到这一事件,并传递给了我们的大脑(相当于应用程序),我们的大脑最终决定如何对这一事件作出反应,如将蚊子赶走,或是将蚊子拍死。对事件作出反应的过程就是消息响应。消息(Message)向上的箭头④表示操作系21消息(Message)消息是应用程序和计算机交互的途径,在计算机上几乎做每一个动作都会产生一个消息。鼠标被移动会产生WM_MOUSEMOVE消息;鼠标左键被按下会产生WM_LBUTTONDOWN的消息;鼠标右键按下便产生WM_RBUTTONDOWN消息等。消息(Message)消息是应用程序和计算机交互的途径,在计22消息的功能功能帮助Windows实现多任务。通知应用程序某一事件已经发生,各应用程序给予响应。消息的功能功能23消息的组成操作系统是怎样将感知到的事件传递给应用程序呢?这是通过消息机制(Message)来实现的。操作系统将每个事件都包装成一个称为消息的结构体MSG来传递给应用程序,参看MSDN。消息的组成:

消息号+字参数+长字参数消息号事先定义好。字参数(wParam)长字参数(lParam)提供附加信息,含义和具体消息号相关。消息的组成操作系统是怎样将感知到的事件传递给24典型的消息结构typedefstructtagMSG{HWNDhwnd;//接收窗口

UINTmessage;//消息标识

WPARAMwParam;//附加信息LPARAMlParam;//附加信息DWORDtime;//发送时间POINT

pt;//鼠标位置}MSG,*PMSG;

//…\vc\include\wtypes.h典型的消息结构typedefstructtagMS25句柄(HANDLE)句柄(HANDLE):资源的标识。操作系统要管理和操作这些资源,都是通过句柄来找到对应的资源。按资源的类型,又可将句柄细分成图标句柄(HICON),光标句柄(HCURSOR),窗口句柄(HWND),应用程序实例句柄(HINSTANCE)等等各种类型的句柄。操作系统给每一个窗口指定的一个唯一的标识号即窗口句柄。句柄(HANDLE)句柄(HANDLE):资源的标识。26句柄句柄是一个指针通过句柄就可以控制该句柄指向的对象编写程序总是要和各种句柄打交道的句柄(handle)是一个4字节长的整数值是系统用于表示应用程序中不同的对象和同类对象中不同的实例。如一个窗口、按钮、图标、菜单等这些东西在系统中被视为不同类型的对象,用不同的句柄将他们区分开来。句柄句柄是一个指针27常用的句柄句柄类型说明句柄类型说明HWND标识窗口句柄HDC标识设备环境句柄HINSTANCE标识当前实例句柄HBITMAP标识位图句柄HCURSOR标识光标句柄HICON标识图标句柄HFONT标识字体句柄HMENU标识菜单句柄HPEN标识画笔句柄HFILE标识文件句柄HBRUSH标识画刷句柄常用的句柄句柄类型说明句柄类型说明HWND标识窗口句柄HDC28从变量的类型区分变量的用途intx,y;x=30; y=30; //x和y既可以用来表示坐标点,也可以用来表示宽度和高度,还可以用来表示身高和体重。typedefintWIDTHtypedefintHEIGHTWIDTHx;HEIGHTy;//好处:我们从变量的类型上就可以知道x和y是用来表示宽度和高度。从变量的类型区分变量的用途intx,y;29消息驱动机制DOS程序是通过调用系统的函数来获得用户输入。Windows程序则是通过操作系统发送的消息来处理用户输入在Windows操作系统环境内系统产生的动作用户运行应用程序产生的动作事件产生的消息消息驱动机制DOS程序是通过调用系统的函数来获得用户输入。事30消息驱动机制Windows程序接收消息分发消息处理消息与用户进行交互消息驱动机制Windows程序与用户进行交互31消息的分类窗口管理消息、初始化消息、输入消息、系统消息等。VC定义不同的前缀用于消息宏定义识别消息类型。 BM 按钮消息 CB 组合框消息 DM 下压按钮控制消息 EM 编辑框消息 LB 列表框消息 WM 窗口消息消息的分类窗口管理消息、初始化消息、输入消息、系统消息等。32不同消息类型的取值范围消息类型取值范围系统定义消息(1)0x0000~0x03ff用户定义内部消息0x0400~0x07ff系统定义消息(2)0x8000~0xbfff用户定义外部消息0xc000~0xffff不同消息类型的取值范围消息类型取值范围系统定义消息(1)0x33Windows应用程序常用消息WM_LBUTTONDOWNWM_KEYDOWNWM_CREATWM_CLOSEWM_DISTORYWM_QUITWM_PAINTWM_CHARWM_COMMANDWindows应用程序常用消息WM_LBUTTONDOWN34Windows应用程序常用消息窗口管理消息初始化消息输入消息系统消息剪贴板消息控制处理消息控制通知消息滚动条通知消息非用户区消息MDI消息DDE消息应用程序自定义的消息Windows应用程序常用消息窗口管理消息控制通知消息35消息的传递Windows系统有一个存放消息的队列。每个应用程序也有一个消息队列。Windows系统先将收到的消息存放在系统队列中。然后再分发到相应的应用程序队列中。应用程序则从自身的队列中获取消息并进行处理。消息的传递Windows系统有一个存放消息的队列。36消息的传递事件事件事件系统消息队列应用程序队列应用程序队列应用程序队列应用程序应用程序应用程序消息的传递事件事件事件系统消息队列应用程序队列应用程序队列应37一个应用程序队列WindowsInputMessageSystemQueueApplicationQueueWinMain()MessageLoopWindowsFunction一个应用程序队列WindowsInputSystemQue38两个应用程序队列WindowsInputMessageSystemQueueApplicationQueueApplicationQueueWinMain()MesaageLoopWindowsFunctionWinMain()MesaageLoopWindowsFunction两个应用程序队列WindowsInputSystemQue39结束一个应用程序WM_DESTROYWindowsWM_QUITApplicationQueueWindowsFunctionApplicationWinMain()MessageLoop结束一个应用程序WM_DESTROYWindowsWM_QU40创建消息循环Windows程序至少包含两个函数:WinMain():必有且仅有一个窗口函数:每个窗口对应一个窗口函数,以响应该窗口的消息通常每个Windows应用程序至少对应一个窗口,每个窗口都要有一个窗口函数负责处理该窗口内所发生的事件创建消息循环Windows程序至少包含两个函数:41创建消息循环While(GetMessage(&msg,(HWND)NULL,0,0)){ TranslateMessage(&msg);

//转换某些键盘消息 DispatchMessage(&msg);

//将消息发送给窗口过程,例程中指WndProc}

何时退出?

//当从应用程序消息队列中检取的消息是 //WM_QUIT时,则退出循环创建消息循环While(GetMessage(&msg,(42投递和发送消息PostMessage和SendMessagePostMessage只把消息放入队列,不管其他程序是否处理都返回,然后继续执行这是个异步消息投放函数,会造成消息的滞后性SendMessage必须等待其他程序处理消息完了之后才返回,继续执行这是个同步消息投放函数,不会造成消息的滞后性但如果消息处理失败,则会造成程序停止PostMessage的返回值表示PostMessage函数执行是否正确SendMessage的返回值表示其他程序处理消息后的返回值投递和发送消息PostMessage和SendMessage43投递和发送消息—图示WindowsSystemQueueApplicationQueueWinMain()MesaageLoopWindowsFunctionPostMessage()SendMessage()Application投递和发送消息—图示WindowsSystemQueueA44投递和发送消息—示例PostQuitMessage(nExitCode)功能:发送WM_QUIT消息给系统,以通知系统应用程序要结束。WM_QUIT消息只能用PostMessage,因为该消息将导致应用程序释放消息环,也就无法返回结果。SendDlgItemMessage(…)功能:向对话框控件发送消息相当于先用GetDlgItem()得到控件句柄,再SendMessage(),是一种组合的方便方式。投递和发送消息—示例PostQuitMessage(nExi45VC6.0下三种编程方式控制台编程(DOS编程)

Win32ConsoleApplicationWindowsAPI编程:

Win32ApplicationMFC编程:

MFCAppWizard(exe)VC6.0下三种编程方式控制台编程(DOS编程)46VisualC++开发环境标题栏菜单栏工具栏项目工作区窗口文档窗口工具栏输出窗口输出窗口标签状态栏VisualC++开发环境标题栏菜单栏工具栏项目工作区窗口47开发环境的菜单功能File菜单中的命令主要用来对文件和项目进行操作Edit菜单中的命令是用来使用户便捷地编辑文件内容View菜单中的命令主要用来改变窗口和工具栏的显示方式,激活调试时所用的各个窗口等Insert菜单中的命令主要用于项目及资源的创建和添加开发环境的菜单功能File菜单中的命令主要用来对文件和项目48开发环境的菜单功能Project菜单中的命令主要用于项目的一些操作Build菜单中的命令主要用来应用程序的编译、连接、调试、运行Tools菜单中的命令主要用于选择或定制开发环境中的一些实用工具Windows菜单中的命令主要用于文档窗口的操作VisualC++提供了大量详细的帮助信息开发环境的菜单功能Project菜单中的命令主要用于项目的49File->New->ProjectsMFCAPI控制台(DOS)File菜单File->New->ProjectsMFCAPI控制台(D50VC6.0可以创建的项目类型项目类型说明项目类型说明ATLCOMAppWizard创建ATL应用程序DatabaseProject 创建数据库项目Win32Dynamic-LinkLibrary创建Win32动态链接库DevStudioAdd-inWizard创建自动化宏CustomAppWizard创建自定义的AppWizardISAPIExtensionWizard创建Internet服务器或过滤器Makefile 创建Make文件MFCActiveXControlWizard创建ActiveX控件程序MFCAppWizard(dll)创建MFC动态链接库MFCAppWizard(exe) 创建MFC可执行程序Win32Application创建Win32应用程序Win32ConsoleApplication创建Win32控制台应用程序ClusterResourceTypeWizard通过它可以创建两种项目类型(ResourceDLL和ClusterAdministratorExtensionDLL)UtilityProject通过它可以创建一个效用项目,该项目只作为其他子项目的一个包容器,减少子项目的编联时间,但它本身并不包含任何文件Win32StaticLibrary创建Win32静态库VC6.0可以创建的项目类型项目类型说明项目类型说明ATL51File->New->FilesFile->New->Files52开发环境的工具栏标准工具栏类向导工具栏小型编译连接工具栏工具栏的显示与隐藏、浮动与停泊“Customize”对话框方式(Tools--Customize)快捷菜单方式(任何工具栏处右击鼠标)开发环境的工具栏标准工具栏532.1Windows程序结构12.1Windows程序结构1542.1.1简单的Windows应用程序实例创建(演示)用AppWizard创建理解程序框架添加程序代码编译运行2.1.1简单的Windows应用程序实例创建(演示)552.1.1简单的Windows应用程序

例Ex_HelloMsg:一个最简单的Windows应用程序。#include<windows.h>intWINAPIWinMain(HINSTANCEhInstance,HINSTANCEhPrevInstance,LPSTRlpCmdLine,intnCmdShow){

MessageBox(NULL,"你好,我的VisualC++世界!","问候",0);return0;}2.1.1简单的Windows应用程序例Ex_Hell562.1.1简单的Windows应用程序Windows程序的入口函数-WinMain函数的原型如下:intWINAPIWinMain(HINSTANCEhInstance,//当前实例句柄HINSTANCEhPrevInstance,//以前的实例句柄LPSTRlpCmdLine,//指向命令行参数的指针intnCmdS)//窗口的显示状态

每一个Win32应用程序都需要Windows.h头文件,包含了一些Windows头文件。

程序中,MessageBox是一个Win32API函数,用来弹出一个对话框窗口,显示短信息。2.1.1简单的Windows应用程序每一个Win3257窗口的创建创建一个完整的窗口需要经过下面四个操作步骤:设计一个窗口类;注册窗口类;创建窗口;显示及更新窗口。窗口的创建创建一个完整的窗口需要经过下面四个操作步骤:58设计窗口类typedefstruct_WNDCLASS{UINT style;//窗口类的类型WNDPROC lpfnWndProc;//过程函数int cbClsExtra;int cbWndExtra;HANDLE hInstance;HICON hIcon;HCURSOR hCursor;HBRUSH hbrBackground;LPCTSTR lpszMenuName;LPCTSTR lpszClassName;}WNDCLASS;设计窗口类typedefstruct_WNDCLASS59窗口类的类型在我们的程序中经常要用到一类变量,这个变量里的每一位都对应某一种特性。当该变量的某位为1时,表示有该位对应的那种特性,当该位为0时,即没有该位所对应的特性。当变量中的某几位同时为1时,就表示同时具有几种特性的组合。一个变量中的哪一位代表哪种意义,不容易记忆,所以我们经常根据特征的英文拼写的大写去定义一些宏,该宏所对应的数值中仅有与该特征相对应的那一位(bit)为1,其余的bit都为0。窗口类的类型在我们的程序中经常要用到一类变量60我们使用gotodefinition就能发现CS_VREDRAW=0x0001,CS_HREDRAW=0x0002,CS_DBLCLKS=0x0008,CS_NOCLOSE=0x0200。

他们的共同点就是只有一位为1,其余位都为0。

如果我们希望某一变量的数值既有CS_VREDRAW特性,又有CS_HREDRAW特性?我们只需使用二进制OR(|)操作符将他们进行或运算相组合,如style=CS_VREDRAW|CS_HREDRAW|CS_NOCLOSE。如果我们希望在某一变量原有的几个特征上去掉其中一个特征,用取反(~)之后再进行与(&)运算,就能够实现,如在刚才的style的基础上去掉CS_NOCLOSE特征,可以用style&~CS_NOCLOSE实现。窗口类的类型我们使用gotodefinition就能发现61窗口过程函数第二个成员变量lpfnWndProc指定了这一类型窗口的过程函数,也称回调函数。

回调函数的原理:当应用程序收到给某一窗口的消息时(还记得前面讲过的消息通常与窗口相关的吗?),就应该调用某一函数来处理这条消息。这一调用过程不用应用程序自己来实施,而由操作系统来完成,但是回调函数本身的代码必须由应用程序自己完成。对于一条消息,操作系统到底调用应用程序中的哪个函数(回调函数)来处理呢?操作系统调用的就是接受消息的窗口所属的类型中的lpfnWndProc成员指定的函数。每一种不同类型的窗口都有自己专用的回调函数,该函数就是通过lpfnWndProc成员指定的。窗口过程函数第二个成员变量lpfnWndPr62窗口过程函数举例:汽车厂家生产汽车好比应用程序创建窗口,用户使用汽车好比操作系统管理窗口,某种汽车在销售前就指定好了修理站(类似回调函数),当用户的汽车出现故障后(类似窗口收到消息),汽车用户(类似操作系统)自己直接找到修理站去修理,不用厂家(类似应用程序)亲自将车送到修理站去修理,但修理站还得由厂家事先建造好。窗口过程函数举例:汽车厂家生产汽车好比应用程序创建窗口,用户632.1.1简单的Windows应用程序

例Ex_HelloWin:一个较完整的Windows应用程序。与Ex_HelloMsg示例相比,Ex_HelloWin要复杂的多,可以将其分是两个基本函数的程序结构:函数WndProc用来接收和处理各种不同的消息;WinMain函数通常要完成以下几步工作:

定义并调用API函数RegisterClass注册应用程序的窗口类。调用相关API函数创建和显示窗口,并进行必要的初始化处理。其中,函数CreateWindow用来创建已注册窗口类的窗口。2.1.1简单的Windows应用程序例Ex_Hel64CreateWindow函数的原型:

HWNDCreateWindow(LPCTSTRlpClassName,//已注册的窗口类名LPCTSTRlpWindowName,//窗口标题DWORD dwStyle,//窗口风格int x,//窗口的水平位置int y,//窗口的垂直位置int nWidth,//窗口宽度int nHeight, //窗口高度HWND hWndParent,//父窗口句柄HMENU hMenu,//菜单句柄或控件标识HINSTANCEhInstance,//应用程序实例句柄LPVOID lpParam//其他窗口创建时的参数数据);CreateWindow函数的原型:HWNDCreat652.1.1简单的Windows应用程序创建和启动应用程序的消息循环。Windows应用程序接受各种不同的消息,Windows系统首先将消息放入消息队列中,应用程序的消息循环就是从应用程序的消息队列中消息,并将消息发送相应的客串过程函数中作进一步处理。API函数GetMessage和DispatchMessage就是起到这样的作用。如果接收到WM_QUIT消息,则退出应用程序。2.1.1简单的Windows应用程序创建和启动应用程序66

Windows应用程序的基本流程:Windows应用程序的基本流程:672.1.2Windows编程特点一个完整的Windows应用程序除了WinMain函数外,还包含用于处理用户动作和窗口消息的窗口函数。Windows应用程序具有的一些特性:消息驱动机制图形设备接口(GDI)基于资源的程序设计动态链接库2.1.2Windows编程特点一个完681.消息驱动机制 Windows程序和控制台应用程序之间一个最根本区别,在于控制台应用程序是通过调用系统函数来获得用户输入,而Windows程序则是通过系统发送的消息来处理用户输入。2.图形设备接口(GDI) Windows提供了一个抽象的接口,称为图形设备接口(GraphicalDeviceInterface,GDI),使得用户直接利用系统的GDI函数就能方便实现图形和文本的输出,而不必关心与系统相连的外部设备的类型。2.1.2Windows编程特点1.消息驱动机制2.1.2Windows编程特点692.1.2Windows编程特点3.基于资源的程序设计Windows应用程序包含众多图形元素,如光标、菜单、工具栏、位图、对话框等,每一个这样的资源都用相应的标识符来区分,而且Windows内部也有预定义的资源。在Windows环境下,每一个资源元素都作为一种可以装入应用程序的资源来存放,这些资源可以被编辑、修改,也可以被其他应用程序所共享。4.动态链接库动态链接库提供了一些特定结构的函数,能被应用程序在运行过程中装入和连接。多个程序可以共享同一个动态链接库,动态链接库可以提高程序模块的灵活性。2.1.2Windows编程特点3.基于资源的程序设70Windows提供了丰富的应用程序可调用的函数,大多数用于实现其用户界面和在屏幕显示的文本和图形,都是通过动态链接库来实现的。在Windows操作系统中,最主要的DLL有KERNEL32.DLL、GDI32.DLL和USER32.DLL。

KERNEL32.DLL用来处理存储器低层功能、任务和资源管理等Windows核心服务;GDI32.DLL提供图形设备接口,管理用户界面和图形绘制,包括Windows元文件、位图、设备描述表和字体等;USER32.DLL负责窗口的管理,包括消息、菜单、光标、计时器及其它与控制窗口显示相关的一些功能。2.1.2Windows编程特点Windows提供了丰富的应用程序可调用的函数,大多712.1.3Windows常用的基本数据类型Windows所数据类型对应的基本数据类型说明BOOLbool布尔值BSTRunsignedshort*32位字符指针BYTEunsignedchar8位无符号整数COLORREFunsignedlong用作颜色值的32位值DWORDunsignedlong32位无符号整数,段地址和相关的偏移地址LONGlong32位带符号整数LPARAMlong作为参数传递给窗口过程或回调函数的32位值LPCSTRconstchar*指向字符串常量的32位指针LPSTRchar*指向字符串的32位指针LPVOIDvoid*指向未定义类型的32位指针LRESULTlong来自窗口过程或回调函数的32位返回值UINTunsignedint32位无符号整数WORDunsignedshort16位无符号整数WPARAMunsignedint当作参数传递给窗口过程或回调函数的32位值2.1.3Windows常用的基本数据类型Window722.1.3Windows基本数据类型说明:这些基本数据类型都是用大写字符来表示,以与一般C++基本数据类型相区别。数据类型的前缀是P或LP,表示是一个指针或长指针数据类型。前缀是U,表示无符号数据类型,等等。Windows还提供一些宏来处理上述基本数据类型。2.1.3Windows基本数据类型说明:732.2Windows简单编程22.2Windows简单编程2742.2.1绘制文本Windows窗口通常有标题栏和边框,其中默认背景色为白色区域称为窗口的客户区。当客户区内容发生变化时,此时客户区变成了“无效区域”或“更新区域”,Windows就会将WM_PAINT消息放在应用程序的消息队列中,通过在窗口过程函数中对WM_PAINT消息的判断处理,就可对客户区进行图形和文本的绘制。[例Ex_WinText]文本绘制2.2.1绘制文本Windows窗口通常有标题752.2.1绘制文本TextOut函数是用来显示文本的最常用的GDI函数,有下列原型:

caseWM_PAINT:

hdc=BeginPaint(hwnd,&ps); TextOut(hdc,10,10,str,strlen(str)); EndPaint(hwnd,&ps); return0;

绘制文本时需要先调用BeginPaint函数,用来返回指定窗口句柄的设备描述表句柄,设备描述表用来将程序与计算机外部输出设备连接起来。hdc定义的是句柄HDC变量,TextOut等GDI函数都要通过这样的HDC句柄来绘制图形和文本。EndPaint用来释放设备描述表句柄,并使先前无效区域变为有效,从而使Windows不再发送WM_PAINT消息。2.2.1绘制文本TextOut函数是用来显示文本的最762.2.1绘制文本PAINTSTRUCT是“绘图信息结构”,BeginPaint和EndPaint函数都需要PAINTSTRUCT结构变量作为自己的参数。BeginPaint和EndPaint函数必须成对出现,所有GDI函数的调用也应在这两个函数之间进行。TextOut函数是用来显示文本的最常用的GDI函数,原型如下:BOOLTextOut(HDChdc,//设备描述表句柄int nXStart,//文本显示的水平起始位置int nYStart,//文本显示的垂直起始位置LPCTSTRlpString,//要显示的文本int cbString//要显示的文本长度2.2.1绘制文本PAINTSTRUCT是“772.2.2使用控件控件是在系统内部定义的用于和用户交互的基本单元,它常用于对话框中。在Win32应用程序中,可在窗口基础上通过CreateWindow函数来创建一个控件窗口。

例Ex_WinControl]控件的使用(P38)2.2.2使用控件控件是在系统内部定义的用782.3MFC编程基础32.3MFC编程基础3792.3.1MFC概述为了帮助用户处理那些经常使用且复杂繁琐的各种Windows操作,VisualC++设计了一套基础类库MFC(MicrosoftFoundationLibrary)。MFC把传统的Windows编程规范中的大多数内容封装成为各种类,提高了编程和代码效率。2.3.1MFC概述为了帮助用户处理那些80MFC类的基本层次结构CCmdTargetCWndCDocumentCFrameWndCObjectCWinTreadCWinAppCViewCDialog及控件CMDIChildWndCMDIFrameWndCMiniFrameWndMFC类的基本层次结构CCmdTargetCWndCDocu812.3.2设计一个MFC程序例Ex_HelloMFC]一个MFC应用程序。(1)创建一个“Anemptyproject”类型的Win32Application(Win32应用程序)项目Ex_HelloMFC。(2)选择“文件”“新建”。(3)建立C++SourceFile文件,并输入代码。(4)选择“工程”“设置”菜单命令,在出现的对话框中选择“General”标签。然后在“MicrosoftFoundationClasses”组合框中,选择“UseMFCinaSharedDLL”。单击[OK]按钮。(5)程序运行后,单击鼠标左键,就会弹出一个对话框,结果同Ex_HelloWin。2.3.2设计一个MFC程序例Ex_HelloMFC]822.3.3理解程序代码1.程序运行机制MFC是使用afxwin.h来代替头文件windows.h,在Ex_HelloMFC程序中看不到Windows应用程序所必须的程序入口函数WinMain,因为MFC将它隐藏在应用程序框架内部了。当用户运行应用程序时,Windows会自动调用应用程序框架内部的WinMain函数,并自动查找该应用程序类CHelloApp的全局变量theApp,然后自动调用CHelloApp的虚函数InitInstance,该函数会进一步调用相应的函数来完成主窗口的构造和显示工作。2.3.3理解程序代码1.程序运行机制83首先执行的是:m_pMainWnd=newCMainFrame();该语句用来创建从CFrameWnd类派生而来的用户框架窗口CMainFrame类对象,继而调用该类的构造函数,使得Create函数被调用,完成窗口的创建工作。然后执行后面两句,用作窗口的显示和更新。m_pMainWnd->ShowWindow(m_nCmdShow);m_pMainWnd->UpdateWindow();最后返回TRUE,表示窗口创建成功。InitInstance的执行过程:首先执行的是:InitInstance的执行过程:842.3.3理解程序代码应用程序类CWinApp是用来调用WinMain以及进行实例的初始化,在每个MFC应用程序中有且只能有一个这样的应用程序类,且需要一个全局的对象实例,如theApp。InitInstance完成初始化工作后,接下来调用基类CWinApp的成员函数Run,执行应用程序的消息循环,即重复执行接收消息并转发消息的工作。当Run检查到消息队列为空时,将调用基类CWinApp的成员函数OnIdle进行空闲时的后台处理工作。若消息队列为空且又没有后台工作要处理时,则应用程序一直处理等待状态,一直等到有消息为止。当程序结束时,调用基类CWinApp的成员函数ExitInstance,完成终止应用程序的收尾工作。2.3.3理解程序代码应用程序类CWinApp是用来调852.3.3理解程序代码2.消息映射(MessageMap)在MFC中,一个消息的处理往往是通过独特的MFC映射机制来进行的。消息映射机制指MFC类中将消息与消息处理函数联系起来,一一对应的机制。这种机制使得应用程序处理消息变得更方便、更直接、更紧凑。在MFC中,任何一个从CCmdTarget类派生的类理论上均可处理消息,且都有相应的消息映射函数。2.3.3理解程序代码2.消息映射(Message862.3.3理解程序代码映射一个消息的过程是由三个部分组成的: (1)在处理消息的类中,使用消息宏DECLARE_MESSAGE_MAP()声明对消息映射的支持,并在该宏之前声明消息处理函数。如:protected:Afx_msgvoidOnLButtonDown(UINTnFlags,CPointpoint);DECLARE_MESSAGE_MAP()2.3.3理解程序代码映射一个消息的过程是由三个部87(2)使用BEGIN_MESSAGE_MAP和END_MESSAGE_MAP宏在类声明之后的地方定义该类支持的消息映射入口点,所有消息映射宏都添加在这里,当然不同的消息MFC都会有不同的消息映射宏。如:BEGIN_MESSAGE_MAP(CMainFrame,CFrameWnd)…END_MESSAGE_MAP2.3.3理解程序代码(2)使用BEGIN_MESSAGE_MAP和END88(3)定义消息处理函数。例如:voidCMainFrame::OnLButtonDown(UINTnFlags,CPointpoint){ MessageBox("你好,我的VisualC++世界!","问候",0); CFrameWnd::OnLButtonDown(nFlags,point);}注:为了使消息能被其他对象接收并处理,在函数中常常需要调用基类中的相关消息处理函数。2.3.3理解程序代码(3)定义消息处理函数。例如:2.3.3理解程序代892.3.4使用MFCAppWizard

表2.2MFCAppWizard创建的应用程序类型

称项

目ATLCOMMFCAppWizard创建ATL(ActiveTemplateLibrary)应用模块工程ClusterResourceTypeWizard创建ClusterResource(用于WindowsNT服务器)CustomMFCAppWizard创建自己的应用程序向导DatabaseProject创建数据库应用程序DevStudioAdd-inWizard创建ActiveX组件或VBScript宏ExtendedStoredProcWizard创建基于SQL服务器下的外部存储过程ISAPIExtensionWizard创建InternetServer程序MakeFile创建独立于VisualC++开发环境的应用程序MFCActiveXControlWizard创建ActiveXControl应用程序MFCAppWizard(dll)MFC的动态链接库MFCAppWizard(exe)一般MFC的Windows应用程序UtilityProject创建简单实用的应用程序Win32Application其他Win32的Windows应用程序Win32ConsoleApplicationWin32的控制台应用程序Win32Dynamic-LinkLibraryWin32的动态链接库Win32StaticLibraryWin32的静态链接库2.3.4使用MFCAppWizard表2.290MFCAppWinzard(exe)应用程序类型单文档应用程序:类似于Windows记事本的程序,功能比较简单,复杂程序适中,每次只能打开和处理一个文档。大多数应用程序的编制都是从单文档程序框架开始的。对话框应用程序:最简单、最紧凑,没有菜单、工具栏和状态栏,也不能处理文档,但速度快,代码少。多文档应用程序:能允许同时打开和处理多个文档,相对于单文档,增加了许多功能,因而也需要大量额外的编程工作,如不仅需要跟踪所有打开文档的路径,还需要管理各文档窗口的显示和更新等。MFCAppWinzard(exe)应用程序类型单文档应用91其它其它92项目和项目工作区—目录结构在VC中,项目中所有的源文件都是采用文件夹的方式进行管理的将项目名作为文件夹名,在此文件夹下包含源程序代码文件(.cpp,.h)、项目文件(.dsp)以及项目工作区文件(.dsw)等下面列出了其他一些文件类型的的含义:.opt关于开发环境的参数文件如工具条位置等信息.aps(AppStudioFile)资源辅助文件,二进制格式.clw ClassWizard信息文件.dsp(DeveloperStudioProject) 项目文件.plg 编译信息文件.hpj(HelpProject) 帮助文件项目项目和项目工作区—目录结构在VC中,项目中所有的源文件都是93项目和项目工作区—目录结构.mdp(MicrosoftDevStudioProject) 旧版本的项目文件.bsc 用于浏览项目信息.map 执行文件的映像信息纪录文件.pch(Pre-CompiledFile) 预编译文件,可以加快编译速度,但是文件非常大.pdb(ProgramDatabase) 记录程序有关的一些数据和调试信息.exp 记录DLL文件中的一些信息,只有在编译DLL才会生成.ncb 无编译浏览文件(nocompilebrowser)项目和项目工作区—目录结构.mdp(MicrosoftD94项目和项目工作区—目录结构还有相应的Debug或Release、Res等子文件夹VC应用程序向导创建项目时,系统会自动为项目创建Win32Debug的运行程序,并使用相应的缺省配置Win32Release版本的区别在于Debug版本的运行程序有相应的调试信息码Release版本的运行程序没有Release版本的运行程序经过代码的优化,其程序的运行速度被最大加速项目和项目工作区—目录结构还有相应的Debug或Releas95项目和项目工作区在开发环境中,VC是通过左边的项目工作区窗口来对项目进行各种管理项目工作区窗口包含三个页面ClassView页ResourceView页FileView页项目和项目工作区在开发环境中,VC是通过左边的项目工作区窗口96项目和项目工作区ClassView页用以显示项目中的所有的类信息假设打开的项目名为Ex_Sdi,单击项目区窗口底部的ClassView,则显示出“Ex_Sdiclasses”的树状结点。在它的前面是一个图标和一个套在方框中的符号“+”,单击符号“+”或双击图标,Ex_Sdi中的所有类名将被显示。如CMainFrame、CEx_SdiApp、CEx_

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论