VC++教材
- 格式:doc
- 大小:1.31 MB
- 文档页数:83
《Visual C++与面向对象程序设计》教学大纲课程编号:课程类型:计算机科学学时:48(其中讲课32,机时16)学分:3适用对象:计算机及理科的全部或部分专业先修课程:计算机文化基础使用教材及参考书:《Visual C++与面向对象程序设计(第二版)》,吕军等,高教出版社,2003年8月《Visual C++与面向对象程序设计》,刘路放,高教出版社一、课程的性质、目的及任务“Visual C++程序设计”是面向计算机类各专业的必修计算机类专业基础课程。
该课程介绍基本的程序设计技术,包括结构化程序设计方法(SP)、面向对象的程序设计方法(OOP)以及使用Visual C++和MFC开发WINDOWS应用程序的技术。
通过本课程的学习,使学生掌握现代程序设计的基本理论和方法,能用Visual C++进行基本的WINDOWS应用程序设计。
本课程的重点在培养学生的实际应用软件开发能力.二、教学基本要求通过本课程的学习,在结构化程序设计方法和面向对象的程序设计方法的基本理论研究WINDOWS应用程序开发和MFC编程能力方面达到以下基本要求:1. 熟悉计算机程序的基本组成要素,包括数据类型、程序流程、函数和指针等基本概念;2. 理解结构化程序设计方法(SP)的理论,掌握“自顶向下,逐步求精”的程序设计技术,可设计含有分支、循环和模块(函数)的程序;3. 掌握C++的基本流程控制;4. 理解类、对象、封装、继承和多态性等面向对象程序设计(OOP)概念,掌握基本的面向对象程序设计方法;5. 理解WINDOWS的消息机制和WINDOWS应用程序的基本结构;6. 掌握MFC的基本概念,窗口、资源、图形设备接口、文档/视图结构、对话框和控件等对象的程序设计方法,Visual Studio中的AppWizard、ClassWizard、资源编辑器和调试器等工具的方法,可用Visual C++开发基本的WINDOWS应用程序。
v c 课程设计一、课程目标知识目标:1. 学生能够掌握维生素C的基本概念,了解其在人体健康中的作用及其食物来源。
2. 学生能够描述维生素C的化学性质,理解其在储存和烹饪过程中的变化。
3. 学生能够对比不同食物中维生素C含量的差异,并解释相关因素。
技能目标:1. 学生能够运用批判性思维,分析日常饮食中维生素C的摄入情况,提出合理搭配建议。
2. 学生通过实验操作,掌握测定食物中维生素C含量的基本方法,培养实验操作能力。
3. 学生能够运用所学知识,设计健康饮食宣传资料,提升信息整合与传达能力。
情感态度价值观目标:1. 学生培养对健康饮食的关注,认识到合理摄入维生素C的重要性,形成良好的饮食习惯。
2. 学生在小组合作中,学会倾听他人意见,尊重团队成果,培养合作精神。
3. 学生通过课程学习,增强关爱自己及他人健康的责任感,树立正确的健康观念。
本课程针对五年级学生设计,结合学科特点,以生活实际为切入点,注重知识与实践的结合。
通过课程学习,使学生不仅掌握维生素C的相关知识,还能将所学应用于实际生活中,提高学生的健康素养。
同时,关注学生个体差异,激发学习兴趣,培养科学精神和团队合作能力。
二、教学内容1. 维生素C的基本概念及其生理功能- 维生素C的化学性质与结构- 维生素C在人体内的作用机理- 维生素C的食物来源及其生物利用率2. 维生素C的食物含量与储存烹饪变化- 不同食物中维生素C含量的比较- 维生素C在储存和烹饪过程中的变化及影响因素- 如何减少维生素C的损失,保持食物营养价值3. 维生素C的摄入与评估- 评估学生日常饮食中维生素C的摄入情况- 提出合理搭配建议,优化饮食结构- 实验教学:测定食物中维生素C含量的基本方法4. 健康饮食宣传与教育- 设计健康饮食宣传资料,传播维生素C相关知识- 课堂讨论:如何提高公众对维生素C的认识和重视- 案例分析:探讨不良饮食习惯对健康的影响教学内容依据课程目标,结合教材相关章节进行编排。
VC++程序设计实验指导体系计算机教学实验中心2002目录第一部分基本实验 (4)实验一、Visual Studio集成环境及C++程序的输入、调试和运行 (4)实验二、面向对象程序设计(4学时,分2次完成) (5)实验三、基本WINDOWS应用程序编程(6学时,分3次完成) (5)第二部分综合实验 (7)实验四、文档/视图结构程序设计(6学时,分3次完成) (7)实验五、对话框应用程序设计(2学时,分2完成) (7)第三部分选作实验 (8)1.图示排序过程(冒泡排序法) (8)2.改进的人事管理系统 (8)3.编写一个公司产量图示程序。
(9)4.简单翻译程序 (9)5.编写一个绘图程序 (10)6.编写一个机械机构的运动仿真程序。
(10)7.编写一个赛车游戏程序。
(11)8.编写一个金鱼游戏程序。
(11)9.编写一个模拟录像机的程序。
(12)10.编写一个模拟时钟程序。
(12)11.设计一个壁球程序。
(13)12.编写一个接金子游戏程序。
(13)13.编写一个爆破人游戏程序。
(13)14.编写一个五子棋游戏程序。
(14)15.编写一个单项选择题的考试系统程序。
(14)16.编写一个猫捉老鼠游戏程序。
(15)17.编写一个改进的吹泡泡程序 (16)18.编写打字练习游戏 (16)19.编写一个赛马游戏程序。
(17)20.编写一个背单词程序。
(17)21.编写一个走迷宫游戏程序。
(18)22.编写一个苹果棋游戏程序。
(18)23.编写一个飞碟射击游戏程序。
(19)24.编写一个飞碟射击游戏程序。
(19)25.编写文本阅读器程序,可以显示文本文件(后缀名为TXT)的内容。
(20)26.编写一个简易俄罗斯方块游戏程序。
(20)27.贪吃的蛇(L V J UN) (21)28.图示梵塔过程 (21)29.人事管理 (22)30.编写简易C程序编辑器 (23)31.加减法判卷程序 (23)《程序设计》实验指导书使用说明教材《VC+ +面向对象与程序设计》的一个特色就是包含了实验指导书,其中每章的调试技术、程序设计举例、上机练习题目即为实验指导书的内容;调试技术:介绍Developer Studio集成开发环境的使用方法,以及如何调试、连接和运行Visual C++应用程序项目。
vc程序设计十三五教材VC程序设计是指使用Visual C++(VC++)编写程序的过程。
在十三五教材中,VC程序设计通常是以教授计算机科学和编程基础知识为主要目标。
本文将从教学目标、教学内容和教学方法等方面,对十三五教材中的VC程序设计进行探讨。
一、教学目标十三五教材中的VC程序设计教学目标主要包括以下几个方面:1. 理解计算机科学和编程的基本概念:学生应该了解计算机科学和编程的基本概念,如变量、数据类型、算法等。
2. 掌握VC++编程语言:学生应该学会使用VC++编程语言进行程序设计,并能够熟练掌握其语法和常用函数。
3. 学会解决实际问题:学生应该学会将所学的VC++编程知识应用到实际问题的解决中,提高问题解决能力。
4. 培养编程思维和创新能力:学生应该培养编程思维和创新能力,能够独立设计和实现简单的程序。
二、教学内容十三五教材中的VC程序设计主要包括以下几个方面的内容:1. VC++开发环境:学生应该了解VC++的开发环境,包括工程管理、源代码编辑和调试等功能。
2. VC++语法基础:学生应该掌握VC++的语法基础,如变量的定义和使用、流程控制语句、函数的定义和调用等。
3. VC++常用函数:学生应该掌握VC++中常用的函数,如输入输出函数、数学函数、字符串处理函数等。
4. VC++图形界面编程:学生应该学会使用VC++进行图形界面编程,包括窗口的创建、控件的设计和事件处理等。
5. 实例应用:学生应该通过一些实例应用来巩固所学的知识,如简单的计算器、学生成绩管理系统等。
三、教学方法十三五教材中的VC程序设计教学方法主要包括以下几个方面:1. 理论教学:通过讲解VC++的基本概念和语法规则,使学生对VC++有一个整体的了解。
2. 实例教学:通过一些实例的讲解和演示,使学生能够更好地理解和掌握VC++的编程方法。
3. 实践操作:学生应该通过实践操作来巩固所学的知识,编写简单的程序并进行调试。
4. 项目实践:学生可以通过一些小项目的实践来应用所学的VC++知识,提高问题解决能力和创新能力。
vc 课程设计指针一、教学目标本章节的教学目标是让学生掌握指针的基本概念、运算和应用。
具体包括:1.知识目标:学生能够理解指针的定义、特点和作用,掌握指针的赋值、解引用和指针运算。
2.技能目标:学生能够运用指针解决实际问题,如通过指针访问数组元素、修改内存数据等。
3.情感态度价值观目标:学生能够认识到指针在编程中的重要性,培养对指针操作的兴趣和自信心。
二、教学内容本章节的教学内容主要包括以下几个部分:1.指针的概念:介绍指针的定义、特点和作用,使学生理解指针的基本概念。
2.指针的运算:讲解指针的赋值、解引用和指针运算,让学生掌握指针的基本操作。
3.指针与数组:通过实例展示如何使用指针访问数组元素,修改数组数据,使学生学会指针与数组的结合应用。
4.指针与函数:介绍指针作为函数参数的使用,让学生理解指针在函数调用过程中的作用。
三、教学方法为了达到本章节的教学目标,将采用以下教学方法:1.讲授法:通过讲解指针的概念、运算和应用,让学生掌握指针的基本知识。
2.案例分析法:通过分析实际案例,让学生学会指针在解决问题中的具体运用。
3.实验法:安排课堂实验,让学生亲自动手操作,加深对指针的理解和记忆。
四、教学资源为了支持本章节的教学内容和教学方法,将准备以下教学资源:1.教材:选择合适的编程教材,提供指针相关知识的学习支持。
2.参考书:推荐一些关于指针操作的参考书籍,供学生课后深入学习。
3.多媒体资料:制作PPT、视频等多媒体资料,帮助学生更直观地理解指针的概念和操作。
4.实验设备:准备计算机、编程环境等实验设备,让学生能够进行指针操作的实践。
五、教学评估本章节的评估方式将包括以下几个方面:1.平时表现:通过学生在课堂上的参与度、提问回答和小组讨论等表现进行评估。
2.作业:布置相关的指针操作练习题,评估学生的理解和应用能力。
3.考试:安排一次针对本章节内容的考试,包括选择题、填空题和编程题,全面测试学生的掌握程度。
《Visual C++ 2010入门教程》写在前面在我还在上学的时候,我选择了C++,最初我用VC6作为我的IDE,我看过很多本C++的教材,有的适合我,有的不适合我,其中有一本叫《Visual C++ 2005入门经典》的书帮了我不少的忙。
因为通常的C++教材都只会介绍C++的语法什么的,很少会告诉我们如何去编译、运行,告诉我们什么是控制台程序,什么事Win 程序,什么是GUI程序,C++能干什么,VC和C++的区别是什么。
现在有很多的朋友应该也有这些问题吧?学C++用C++也有几年了,算不上熟悉,算是初窥门径吧,我想我应该做点什么帮助一下那些和曾经的我一样困惑的朋友,特别是学生朋友,告诉他们他们所困惑的问题的答案。
记得我学C++的时候,没有人教,有的时候也走了不少弯路,甚至连调试也不会,也不知道可以通过看调用堆栈看调用次序,还自己慢慢的去搜索,好傻啊。
接下来我会做一个《Visual C++ 2010入门教程》系列,用来帮助初学者。
刚开始学的时候是很痛苦的,这个我深有体会,特别是身边还没有人能够指导一二的。
内容主要涵盖在Windows下面使用C++进行开发的常见内容,Visual Studio 2010的使用,如何创建新项目,如何调试,如果配置项目属性等等,另外还会介绍Visual C++ 2010中新加如的一些内容,包括一些新的STL组建,一些新的语法支持等等。
由于本人水平有限,其中难免有错误,希望大家谅解,如果大家有发现问题还请务必及时指出来,否则误导了他人我就罪不容恕了。
注意,本教程非C++教程,不会教你C++,只会教你如何使用 Visual C++ 2010去练习去学习其它C++教材上面的程序。
因此建议大家认真的去看其他的C++教程,在使用Visual C++ 2010实践的时候如果遇到问题可以到这里来参考。
推荐《C++ Primer》、《C++程序设计语言》《Visual C++ 2008入门经典》。
VC++MFC类库基础(55讲全)视频保存在播⾳员⽹盘中内容简介:本部分是您成为VC++软件⼯程师必备的阶段,如果您没有任何基础,学习C++能快速让您进⼊编程领域,建议配合书籍《C++⼊门经典》关键词:VC++、VS2008、MFC、Office Fluent UI、CAD系统、结构化存储、⾃定义窗⼝、消息映射机制、多线程、CxImage库、Lua脚本引擎、MDI、对话框、软件设计、光栅图、⽮量图等。
本培训将实现的CAD系统介绍:本培训视频中要带领学员实现的CAD系统是⼀个简单的基于2D图形的CAD系统,拥有以下基本功能: 基本的⼏何图形(点、线、矩形、圆、位图等)绘制的功能;具有基本图像处理能⼒(依托CxImage库); 拥有基于脚本编程语⾔Lua脚本的命令输⼊环境;⾃定义格式的CAD⽮量图形⽂件;具有简单2D⽮量动画功能; 具有⾼可扩展性可作为较复杂的CAD系统的基本框架,学员可以以此为基础开发⼀些较实⽤的CAD 系统。
培训的主要⽬标:学员通过本次培训后,可以达到熟练使⽤VS2008环境及使⽤MFC进⾏编程的基本能⼒。
同时学员将具备建⽴较复杂软件开发框架的能⼒和基础。
课程学习完毕后学员还将具备基本的软件分析、设计、实现能⼒,并能够独⽴承担⼀些基于MFC的应⽤程序开发实现的任务;学员将牢固的掌握MFC窗⼝类、绘图类、集合类、调试类等的设计、使⽤⽅法;同时掌握使⽤VS2008调试程序、跟踪程序错误的技能;掌握使⽤VS2008性能分析⼯具分析分析软件性能瓶颈的⽅法;具备使⽤VS2008 MFC从事软件开发⼯作的能⼒。
达到⼀般公司VC++软件开发⼈员的基本能⼒要求。
本培训的主要任务:本次培训将通过带领学员⾃⼰动⼿实现⼀个简单的CAD系统(TinyCAD)的⽅式,达到上述的培训⽬标。
培训过程中学员将跟随讲师⼀步步实现⼀个基于MFC 及最新Office Fluent UI界⾯开发库的简单CAD系统(TinyCAD)。
《Visual C++程序设计》授课专业:计算机科学技术授课年级:2002级本科授课方式:课堂讲授;实验课教学方式:多媒体教学课程教学总学时数:48 学分数 3课时分配:课堂讲授 32 学时;实验课 16 学时教材:《Visual C++与面向对象程序设计(第二版)》,吕军等,高教出版社,2003年8月参考书目:《C++程序设计教程》,钱能,清华大学出版社《Visual C++程序设计与软件技术基础》,马建红沈西挺,中国水利水电出版社《Visual C++图形用户界面开发指南》,李博轩,清华大学出版社《新编Visual C++6.0 教程》,北京科海培训中心编著《C++ PRIMER (3RD)中文版》Stanley .Lippman,Josee Lajoie,中国电力出版社《C++程序设计语言(特别版)》(美)Bjarne Stroustrup,机械工业出版社常用网址:1.2./subject_c.asp3.目录第一章C++入门1.1 软件开发与C++语言1.2 算法与程序1.3 输入、编译、调试和运行一个C++程序1.4 C++语言的输入与输出命令1.5 程序设计语言的发展1.6 C++程序的基本要素1.6.1 标识符、关键词和标点符号1.6.2 注释1.6.3 源程序1.7 编译预处理1.7.1 宏定义1.7.2 文件包含1.8 Visual C++的集成开发环境1.8.1 菜单和工具栏1.8.2 Developer Studio窗口1.8.3用Developer Studio编写和调试简单C++程序1.8.4 菜单选项、快捷键和工具栏第二章控制结构2.1 程序的基本控制结构2.2 C++的控制结构2.2.1 顺序结构2.2.2 选择结构2.2.3 循环结构2.3 结构化程序设计2.4 伪代码2.5 结构化程序设计方法简介2.6 C++的其他控制转移语句2.6.1 switch语句2.6.2 goto语句和语句标号2.6.3 break语句和continue语句2.6.4 exit()函数和abort()函数2.7 Developer Studio的文本编辑器第三章基本数据类型3.1 数据类型3.1.1 整型数据的表示方法3.1.2 实型数据的表示方法3.2 常量3.2.1 整型常量3.2.2 实型常量3.2.3 字符常量3.2.4 字符串常量3.3 变量3.3.1 变量的声明3.3.2 变量的初始化3.4 数组3.5 字符型数组和字符串处理库函数3.6 类型修饰符和常量修饰符3.7 枚举类型3.8 typedef语句3.9 Develper Studio的文件处理功能3.10 Visual C++程序的编译、链接和运行3.11 查看和修改编译、链接错误第四章表达式4.1 算术运算符和算术表达式4.2 逻辑运算符和逻辑表达式4.3 赋值运算符和赋值表达式4.4 自增运算符4.5 表达式中各运算符的运算顺序4.6 其他具有副作用的运算符4.7 问号表达式和逗号表达式4.8 类型不同数据之间的混合算术运算4.9 运行错误的判断与调试4.10 基本调试手段4.11 注释号在调试中的作用4.12 条件编译第五章函数5.1 函数的定义5.2 函数的调用5.3 函数原型5.4 函数间的参数传递5.4.1 值调用5.4.2 引用调用5.5 函数重载5.6 局部变量和全局变量5.7 内联函数5.8 带有默认参数的函数5.9 C++的库函数5.10 函数模板5.11 变量的存储类别5.12 Develooper Studio的跟踪调试功能第六章指针6.1 指针与地址6.1.1 地址6.1.2 指针6.2 指针运算6.3 指针与数组6.4 动态存储分配6.5 指针与函数6.5.1 指针作为函数的参数6.5.2 返回指针的函数6.5.3 指向函数的指针6.6 指针的数组6.7 指针的初始化6.8 Visual C++的帮助功能第七章类和对象7.1 面向对象的思想7.2 面向对象程序设计的特点7.3 类与对象7.3.1 类的定义7.3.2 成员函数的定义7.3.3 内联成员函数7.3.4 对象7.4 构造函数与析构函数7.5 数据成员的初始化7.6 对象与指针7.7 const修饰符7.8 MFC的CString类7.9 MFC的CTime类和CTimeSpan类7.9.1 CTime类7.9.2 CTimeSpan类7.9.3 CTime类和CTimeSpan类的运算7.10 类的嵌套7.11 如何在程序中使用MFC类库7.12 使用FileView标签第八章继承与派生8.1 继承与派生8.1.1 为什么使用继承8.1.2 派生类的定义8.1.3 派生类中的变化8.2 派生类的继承方式8.2.1 公有继承8.2.2 私有继承8.2.3 保护继承8.3 派生类的构造函数和析构函数8.3.1 构造函数8.3.2 析构函数8.4 显式访问基类成员8.5 静态成员8.6 类模板8.7 使用Class View标签第九章多态性9.1 多态性概述9.2 派生类对象替换基类对象9.3 虚函数9.3.1 虚函数定义9.3.2 虚函数的使用限制9.4 抽象类9.5 运算符重载9.6 文件处理9.7 异常处理机制第一章C++入门教学目的:了解C++程序的基本特点, 熟悉Visual C++集成开发环境的基本使用方法。
第一章Windows程序设计初步一、学习目标:⏹了解Windows窗体的基本结构⏹了解WinMain函数的参数意义⏹了解句柄的概念⏹熟悉Windows窗口类成员⏹熟练掌握Windows消息机制⏹了解窗口回调函数的调用过程⏹熟悉最常见的Windows消息⏹了解消息队列⏹熟练使用Windows定时器⏹了解程序发送消息二、学习重点:⏹理解消息循环机制⏹理解句柄的概念⏹熟练运用窗口回调函数三、学习难点:⏹理解消息循环机制⏹熟练运用窗口回调函数§1.1 图形用户接口1.1.1图形化的用户界面在个人计算机上进行图形处理,过去认为是一项困难的工作,因为过去的计算机操作系统都使用字符形式的用户界面,计算机用户通过在键盘上键入各种命令来操作计算机,这个时候的操作系统给用户提供的接口称作“命令接口”。
在这种状况下,用户必须记住大量的命令语句才能熟练操作计算机,如在纯粹的MS-DOS环境,使用起来显得很困难。
软件公司总是在用户需求事件的驱动下运作,不少软件公司希望能在“命令接口”的操作系统上挂接一个Shell层,使其具有图形化的用户操作界面。
有不少软件公司在这方面作出了努力,也的确产生了很多成就,其中最有成就的就是MicroSoft公司的Windows系统,最初就是一个工作于DOS之上的图形Shell层,大大简化了用户操作计算机的难度。
在MS-Windows中,使用各种形象化的图标以及按钮等简化用户操作,俗称图形用户接口(GUI,Graphics User Interface)。
当然,Windows的主要成就在于它的名字——Windows,即窗口。
一个窗口通常是由一个略具立体感的边框圈起来的一个方方的盒子,而且通常还具有一个标题栏,在标题栏上一般都具有最大化(还原)、最小化和关闭按钮。
在标题栏的左边通常还有一个图标,用鼠标双击此图标可以关闭该窗口,如果是单击,则会弹出一个菜单,这个菜单通常称为系统菜单。
当然,如果右击标题栏,也可以得到系统菜单。
下面就是一个典型的Windows窗口:窗口内部通常可以画上一些精美的图形来美化程序的界面,也可以放置按钮,滑动条等称之为“控件”的东西供用户使用鼠标点击或者拖动。
在后面的章节中,我们会认识到这些“控件”其实也是隶属于其他窗口的一个小窗口。
如果一个窗口隶属于另外一个窗口,那么我们就称这个窗口为另外一个窗口的子窗口,与子窗口对应的就是父窗口。
Windows允许一个窗口中有任意多个子窗口。
在Windows中,窗口有“当前窗口”和“非当前窗口”之分,一个当前窗口一般都是显示在屏幕的最前面,而且通常具有高亮显示的标题栏。
控件作为一个窗口,如果它是当前窗口,则我们称它“具有焦点”,比如一个按钮如果具有焦点,则它看起来比其他按钮要“厚实”一些,而且还有一个虚线的方框。
1.1.2过程驱动和事件驱动迄今为止,我们使用C语言编写的程序(所有前面那些小的示例程序和我们编写的练习程序)都是过程驱动的编程方式。
代码决定了程序中下一步会发生什么,而且指令的执行序列也是可以预测的。
这种处理类型称为同步方式。
程序中的事件必须一个接一个的发生。
当程序需要从键盘读取字符的时候,就停下等待用户在键盘上输入,等用户输入完成,程序才会继续执行后面的代码。
程序接下来会执行什么可以有一个明确的预测。
这样在程序上控制用户如何操作的方式,我们就称作过程驱动方式。
如果所有的程序都这样,会大量浪费CPU资源,在多任务的操作系统中是不适合的。
我们可能已经编写过某些程序,比如在键盘上按下“1”,则程序执行某一段代码,按下“2”则程序又执行另外一段代码。
这时,程序就由用户决定接下来如何运行了。
为了实现这种功能,我们往往是等待用户的输入,对接收来的输入作一个判断,然后再判断这个输入是否合法,作出相应的响应。
在Windows环境,用户可以同时使用鼠标或键盘来控制程序的运行,用户在键盘上按下不同的键或者用鼠标点击不同的按钮都作为一个用户事件,程序受这些事件的控制来执行相应的代码,作出相应的响应,程序的这种运行方式我们称作事件驱动方式。
程序在事件驱动的方式下被动地运行,这是事件驱动的一大特点。
在Windows环境,由操作系统负责接收用户的所有输入,通常包括来自键盘、鼠标或者游戏手柄等外部设备的输入,然后判断这个输入应该属于哪个窗口,就将这个输入作为一个事件发送给相应的窗口(DOS环境的过程驱动模型,程序运行时主动接管了用户输入,基本上不受操作系统的控制),窗口根据发送来的事件作出相应的响应。
§1.2 最简单的Windows程序现在我们已经知道,一个Widnows程序一般都具有一个窗口,微软之所以将他们的操作系统叫做Windows,也是因为他们认为运行于他们的操作系统之上的程序都具有一个窗口。
通常创建一个窗口需要比较多的代码,但是如果仅仅是只想创建一个简单的窗口,那么就很简单了。
例 1.1 最简单的Windows程序我们看如下程序:#include <windows.h>int _stdcall WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow){MessageBox(NULL,"This is my first Win32 programme","Hello, world!",MB_OK);return 0;}在Visual C++的环境编译并运行这个程序,则会显示一个消息窗口,如下图:程序中调用了Windows API函数MessageBox。
Windows为我们提供了许多可以被调用的函数,使我们可以请求Windows提供服务,这些函数也称作应用程序接口(Application Programming Interface),即API。
在这个程序的第一行,我们包含了Windows.h头文件,这个头文件中具有所有常用的Windows API函数的声明。
分析API函数MessageBox的调用,在MSDN中,我们可以看到它的声明形式如下:int MessageBox(HWND hWnd, // 主窗口句柄LPCTSTR lpText, // 需要在窗口中间显示的字符串LPCTSTR lpCaption, // 需要显示在窗口标题栏上的字符串UINT uType // 窗口的样式);它具有四个参数,其中第二、第三个参数都是字符串,它们分别是我们需要在消息窗口中显示的内容和消息窗口的标题。
第三个参数是一个无符号整数(UINT,即unsigned int),传入不同的值会导致消息窗口上显示不同的按钮,在本程序中,我们传入预先定义的宏MB_OK,表示消息窗口仅仅具有一个“确定”按钮,如果我们将MB_OK换为MB_YESNO,则将会同时出现“是”与“否”两个按钮。
如果参阅MSDN,我们会发现它还可以取诸如MB_ICONERROR 值,如果我们把这个参数写成MB_OK | MB_ICONQUESTION,则会同时显示一个“确定”按钮和一个漂亮的问号图标,如图:我们需要详细讨论的是第一个参数。
第一个参数是一个HWND类型的“句柄”。
所谓句柄,我们在这里可以理解为:Windows可以同时在屏幕上显示很多窗口,这些窗口可以有相同的外表,相同的窗口标题。
为了方便管理和区分这些窗口,Windows必须为每一个窗口赋予一个唯一的ID值,来唯一标志一个窗口,HWND则是这个ID值的类型。
如果深入了解这些情况,那么我们就会知道,对于HWND 其实它是一个结构体类型的指针,它的形式大约就是:typedef struct HWND__{int unused;}*HWND;在以后的章节中,我们会见识到很多句柄,它们通常都是指针类型,来作为某种ID值唯一标志某种Windows元素,比如HDC,用来标志一个窗口的绘图设备上下文(Handle of Device Context),它的形式就是:typedef struct HDC__{int unused;}*HDC;我们可能还会注意到这个程序没有main函数,仅有一个WinMain函数,它的声明形式如下:int _stdcall WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow)用C语言编写基于Windows窗口的应用程序,是不需要main函数的(事实上是不能要main函数的)。
基于Windows窗口的应用程序入口点是WinMain。
主函数WinMain不同于传统的main函数,它有固定的声明形式,必须是上面样子,具有四个参数和一个整型的返回值,而且调用协议必须是_stdcall。
主函数WinMain的第一个参数hInstance是一个HINSTANCE类型的句柄,它表示的是一个应用程序实例,即一个应用程序的一次运行活动。
对于Windows程序,我们不能仅仅使用窗口句柄来标志它,因为很多Windows程序运行起来都不止打开一个窗口。
由于Windows 允许我们同时运行多个程序,因此,为了标志这些正在内存中运行着的程序,Windows也为它们赋予了唯一的一个ID值,称为应用程序实例。
同一个程序可能会被用户同时运行两遍(比如说我们同时打开两个记事本程序),即这个程序可能在内存中有两份拷贝,Windows将为这两份拷贝赋予各自不同的ID值,就是HINSTANCE句柄。
应用程序实例句柄唯一标志一个正在运行中的程序。
WinMain的第二个参数hPrevInstance也是一个HINSTANCE类型的句柄,在Windows95及以上的版本中,这个参数的值总是0,它是为了和以前的Win16(Windows3.2及其以下的版本)应用程序在源代码级上兼容而保留的,现在已经没有什么用途了,我们不去深入钻研它。
特别提示在Win16系统中,如果用户将一个程序同时运行两遍,则在第二遍运行时,WinMain的第二个参数hPrevInstance的值将和第一遍运行的实例相等。
到了Windows95之后,这个参数被废弃。
WinMain的第三个参数lpCmdLine是一个字符串,它是用户运行这个程序是输入的命令行参数,和传统C语言的main命令行参数意义相同。
如果我们改写上面的程序,将MessageBox的调用写成下面的样子:MessageBox(NULL, lpCmdLine, "Hello, world!",MB_OK);编译好程序,将会得到一个后缀名为.EXE的应用程序,比如如果是HELLO.EXE,我们可以在Windows控制台的命令行中运行这个程序,在控制台键入HELLO.EXE ABC DEF GHI JKL <回车>那么,程序将弹出消息框如下:我们可以充分看出关于参数lpCmdLine的意义。