WINDOWS程序设计教程(上)ppt.ppt_第1页
WINDOWS程序设计教程(上)ppt.ppt_第2页
WINDOWS程序设计教程(上)ppt.ppt_第3页
WINDOWS程序设计教程(上)ppt.ppt_第4页
WINDOWS程序设计教程(上)ppt.ppt_第5页
已阅读5页,还剩145页未读 继续免费阅读

下载本文档

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

文档简介

WINDOWS程序设计教程 上 杨祥金杨丹李永新编著 本书的基本内容与特点 本书介绍在MicrosoftWindows98 NT4 0和NT5 0环境下应用C语言 API编程接口编写应用程序的方法 讲解Windows应用程序的组成和工作原理 使用C语言和原始的API编写Windows应用程序是最基本 最重要的方法 应用这种方法开发出的应用程序却具有最佳的性能 最强大的功能和最大的灵活性 熟悉API会使您对Windows操作系统的内部活动有更深入的理解 本书是一本教科书 内容按照教学的要求而组织 在教学过程中我们遵循 从简单到复杂 循序渐进 理论联系实际 用例程导引课文学习 的原则 每章末尾附有大量习题 可供学习参考 本书是一本自学课本 本书的起点低 只要熟悉C语言 有一定使用Windows操作系统经历的读者都能读懂 本书提供了大量的例程 很多基本概念 编程方法与技巧都通过例程进行解释 例程来源于CharlesPetzold著的 ProgrammingWindows 一书 例程具有经典性 典型性 通过本书的学习将使你对MicrosoftVisualC 6 0开发工具的理解更上一个层次 使得读者应用开发工具生成应用程序的感觉不再仅仅是步骤 而是从理念上理解 第1章概述 本章简要地介绍了Windows操作系统的发展历史 基本性质和用途 介绍了对Windows编程最有用的API及其发展历程 介绍了Win16和Win32API的特点和异同 为了便于从过程式C语言编程过渡到多任务的Windows编程 我们用一个简短又简单的大家易于熟悉的字符模式程序和一个具有同样功能的Windows程序进行比较 本章还回顾了字符编码的发展过程 讲述了与字符编码有关系的字符数据类型 宽字符数据类型以及处理宽字符数据的库函数 本章最后还介绍了应用程序实现Unicode和ASCII混合编码的原理 1 1WINDOWS的发展历史 上世纪60年代就开始从事系统软件的研究与开发 但直到1981年MS DOS才正真成为PC上的主流操作系统 MS DOS是一个小型 个人 单任务操作系统 它提供给用户的是一种命令介面 它为编程人员提供输入输出 I O 函数供编程人员调用 为了将文字或图形写到显示器上 应用程序可以直接存取PC机的硬件 图形操作环境的作用 有了图形操作环境计算机才能从专业人员手中走进寻常百姓家 有了图形操作环境才能使用户做到 所见即所得 使用户对计算机的操作成为规范化的图形操作 有了图形操作环境才能使计算机成为电脑 图形操作环境的发展历程 由於存贮器和硬件的限制 直到1983年1月 苹果计算机公司才发表Lisa计算机 在Lisa计算机中提出了不同於字符模式环境的另一种环境 图形操作环境 并在1984年1月成为Macintosh上图形环境的一种标准 对Windows图形环境的研究工作有杰出功献的是XeroxPaloAltoResearchCenter PARC 是它们在70年代中期所作的开拓性研究工作 下表记录了Windows图形操作环境的发表历史 反映了软件的发展 发行日期编码API应用程序Windows1 01985年11月16位Win1616位Windows 3861987年9月16位 32位Win1616位Windows2 x1987年12月16位Win1616位Windows3 01990年5月16位 32位Win1616位Windows3 11992年4月16位 32位Win1616位WindowsforWorkgroup3 11992年11月16位 32位Win1616位WindowsforWorkgroup3 111993年11月16位 32位Win1616位Windows3 111993年12月16位 32位Win1616位WindowsNT3 11993年8月32位Win3232位 16位WindowsNTAS3 11993年8月32位Win3232位 16位WindowsNTworkstation3 51994年10月32位Win3232位 16位WindowsNTsever3 51994年10月32位Win3232位 16位WindowsNTworkstation3 511995年7月32位Win3232位 16位WindowsNTsever3 511995年7月32位Win3232位 16位Windows951995年8月32位 16位Win3232位 16位Windows981998年6月32位Win3232位 16位Windows20002000年xx月32位Win3232位 16位本表中的编码 16位 32位 API Win16 Win32 应用程序的位数 32位 16位这三个项目的意义由下面各节介绍 1 232位Windows操作系统的基本性质和用途 32位优先权式多工 多线程图形操作系统 所见即所得 的图形信息显示 以及格式化的内容输出 屏幕显示器被称作 显示多个程序的桌面 为了实现多工必须对存贮器进行管理 不要求应用程序自行开发驱动程序 1 3API的基本特征及其发展历程 什么是API API是 应用程序接口 的缩写 ApplicationProgrammingInterface API包含了所有应用程序能够使用 操作系统能够执行的函数调用 API的特点 发展保持一致和兼容 API的最大发展是16位变成32位 API的分类 Win16API Win32API 1 4编程工具及集成开发环境 VisualBasic编程工具简介 VisualC 编程工具简介 MFC编程简介 BorlandDelphi编程工具简介 集成开发环境简介 1 6C程序和windows程序的比较 用C语言编出的hello world程序 教材程序 1 1 1helloworld doc 同样效果的Windows程序HelloMsg c 教材程序 1 1 2HelloMsg doc 1 7HelloMsg C的三个组成部分 本节介绍 1 7 1 include申明和包含文件1 7 2程序进入点和WINAPI识别字1 7 3MessageBox函数 1 7 1 include申明和包含文件 包含文件的作用 用于前置处理 定义了Windows程序中的数据类型 函数原型 数据结构和常数 include的解释 最重要最基本的包含文件是 WINDEF h文件中有基本数据类型定义 WINNT h文件中有支援Unicode的类型定义 WINBASE h文件中有Kernel函数的有关定义 WINUSER h文件中有用户介面函数的有关定义 WINGDI h文件中有图形介面函数的有关定义 1 7 2程序进入点 Windows程序的进入点是WinMain 解释WinMain函数 IntWINAPIWinMain HINSTANCEhInstance HINSTANCEhPrevInstance LPSTRlpCmdLine intnShowCmd 解释 IntWINAPI以及WinMain的四个参数 IntWINAPI识别字 Int是WinMain函数返回值的类型 WINAPI识别字是函数调用规范 定义如下 defineWINAPI stdcall stdcall是指示编译工作的识别字 它告诉编译系统如何产生机器码 函数调用参数在堆栈中是如何放置的以及函数调用时参数取出的的顺序 故而该识别字指定了一个调用约定 WinMain函数申明为WINAPI 这也是说 Winmain函数的调用也遵循 stdcall约定 WinMain的四个参数 hInstance 操作系统为该应用程序创建的 执行实例 hPrevInstance 控制标识 如果是 null 表示在此之前 此应用程序还没有建立过任何实例 如果非0 说明已经建立过应用程序的实例 lpCmdLine 指向命令序列的长指针 nShowCmd 程序的显示方式 1 7 3MessageBox函数 MessageBox函数用於显示短信息 MessageBox函数的四个参数的解释 参数1指示在那个窗口中显示 参数2是在窗口中显示的字符串 参数3是在窗口标题行上显示的字符串 参数4指示在显示窗口中生成按钮 MB 常数的解释 MB 常数指示在显示窗口中生成按钮 MB 表示此常数是MessageBox函数的专用常数 为函数定义常数在其他函数中也能见到 MB 实际上是表示一个代码 例如MB OK就是0 x00000000L 更多的MB 代码见教材程序 1 MB 常数表 doc 1 8字符编码及Unicode初介 本节介绍 1 8 1字符集编码的发展简史电报码 盲人阅读码 Telex代码 BCDIC码 ASCII 内码表 1 8 2双字节字符集1 8 3Unicode字符集 1 8 2双字节字符集 DBCS DBCS的编码是0到256 它就像内码表一样 前128个代码是ASCII 用1个字节定义 后128个代码 中的 某些用2个字节定义 某些仍然是用1个字节来定义 双字节编码会引起附加的程序设计问题 例如 字符串的长度计算 1 8 3Unicode字符集 Unicode是统一的16位 两个字节 表示一个字符的编码系统 Unicode和DBCS之间的区别是什么 Unicode的优点是什么 缺点是什么 Unicode编码 教材程序 1 Unicode编码 doc 1 9字符的数据类型char和宽字符数据类型wchar 本节介绍 1 9 1操作系统中基本数据类型的确定 1 9 2單字节字符数据类型 char 1 9 3宽字符数据类型 wchar 1 9 4宽字符库函数 1 9 5字符串函数的Unicode版和ASCII版的合一方法 1 9 6TCHAR h头文件的作用 1 9 7编译命令中 UNICODE识别字的引入 1 9 8WINDOWS对宽字符支持 1 9 1操作系统中基本数据类型的确定 int char是最基本的数据类型 int取决于CPU的位数 即操作系统的位数 Char取决于操作系统所采用的编码 如果char用8位二进制进行编码 那就是ASCII码字符集 如果char用16位二进制进行编码 那就是Unicode码字符集 1 9 2單字节字符数据类型 char 字节和字符是两个既有联系又有差别的概念 字节是 字符是 一个字节是8位二进制 解释 charc A char p char p Hello chara 10 chara Hello staticchara Hello 1 9 3宽字符数据类型 wchar 用多个字节存贮一个字符称为宽字符 C中用wchar t表示宽字符数据类型 wchar t和无符号短整数类型相同 定义宽字符数据类型的方法 例如wchar tc A c中存放A的宽字符 wchar t p L Hello L不可少 staticwchar ta L Hello L不可少 1 9 4宽字符串库函数 为什么要设计处理宽字符串的库函数 1 9 5字符串函数的Unicode版和ASCII版的合一方法 最好的解决办法是源文件既能按ASCII编译又能按Unicode编译 见1 10 1 9 6TCHAR h头文件的作用 该头文件不是ANSIC标准的一部分 其中定义的每个函数和宏参数 前面都有一条下底线 TCHAR h为以字符串作为参数的标准库函数提供一系列的替代名称 例如 tprintf是屏幕显示宽字符串的函数 tcslen是计算宽字符串长度计算函数 1 9 7编译命令中 UNICODE识别字的引入 UNICODE是控制程序段中的字符串处理函数是按照宽字符串处理函数对待还是按照常规字符串处理函数对待 如果在程序中包含了TCHAR h头文件 当源程序中 UNICODE识别字有定义时 那么 tcslen就定义为wcslen 宽字符串长度计算函数 如果 UNICODE识别字没有定义 则 tcslen定义为strlen 非宽字符串长度计算函数 1 9 8WINDOWS对宽字符支持 WindowsNT从底层支援Unicode 这意味著WindowsNT内部使用由16位字符组成的字符串 WindowsNT可执行ASCII编码的程序或Unicode编码的程序或者ASCII和Unicode混合编写的程序 1 10应用程序实现Unicode和ASCII混合编码的原理 本节介绍 1 10 1WINNT h是对Unicode支持的头文件 1 10 232位系统中的MessageBox函数 1 10 3Windows的字符串处理函数 1 10 4Windows中的sprintf函数 1 10 1WINNT h是对Unicode支持的头文件 定义了新的数据类型 CHAR和WCHAR 定义了六个字符串指针和四个const字符串指针 WINNT h用于实现UNICODE和ASCII的混合编码 见教材程序 1 实现UNICODE和ASCII混合编码 doc 定义了一些宏参数 教材程序 1 宏参数的定义 doc 1 10 232位系统中的MessageBox函数 16位MessageBox在USER EXE 32位M在USER32 DLL用于支持Unicode编码 32位MessageBox函数有两个函数的进入点 MessageBoxA ASCII版 MessageBoxW 宽字符版 但是 用户仍然只需使用MessageBox 到底选用那个进入点由WINUSER h头文件决定 见教材程序 1 到底进入MessageBoxA还是MessageBoxW doc 1 10 3Windows的字符串处理函数 Windows从c库中复制的字符串处理函数 教材程序 1 Windows使用的字符串处理函数 doc 这些函数在程序段前面设置UNICODE识别字 那么这些函数将接受宽字符串 否则只接受常规字符串 1 10 4Windows中的sprintf函数 Windows程序中不能使用printf 但是 在Windows程序中可以使用fprintf sprintf系列中的其他函数 见教材程序 1 sprintf系列 doc Windows程序中不能使用printf 但是 可以使用fprintf 教材程序 1 printf和sprintf函数的比较 doc 练习1 1 学习本书必须先知道那些知识 2 OS 2 1 1版本中的PM是什么意思 3 讲解Win16和Win32API的特点和异同4 动态链结库 文件中的 常项 是什么 5 开发工具和集成开发环境有何区别 它们有什么联系 6 解释MessageBox函数的应用7 操作系统中基本数据类型是如何确定的 8 双字节字符集和Unicode字符集有何区别 采用双字节字符集有何问题 9 字符 字节有何区别 有何联系 10 什么叫宽字符 什么是Unicode字符 它们有何区别 11 讲述 Unicode识别字 TCHAR H头文件的作用 第2章Windows操作系统的寻址方法与存贮器管理 Windows应用程序的主体结构和传统的C程序的主体结构有很大的差别 造成这种差别的主要原因是 Windows应用程序的运行环境是基于Windows操作系统 而传统C语言运行环境是基于DOS操作系统 Windows操作系统是單人多任务操作环境 16位Windows系统是属于非抢占式 non preemptive 多任务 32位Windows系统是属于抢占式 preemptive 多任务 2 1Windows的芯片 iAPX86模式仿真RAM虚拟内存段 8088实模式无1MB不支持64K8086实模式无1MB不支持64K80286保护模式16位实模式16MB1GB64K80386保护模式32位实模式 保护模式16位4GB64TB4GB80486保护模式32位实模式 保护模式16位4GB64TB4GBPentiun保护模式32位实模式 保护模式16位4GB64TB4GB表中有几个名字必须解释 它们是 实模式 保护模式 RAM 虚拟内存 实模式不支持虚拟内存 只有保护模式支持 2 2Windows的分段寻址方法 什么是寻址方法 什么是分段寻址方法 什么是实模式 什么是保护模式 本节介绍 2 2 116位实模式 2 2 216位保护模式2 2 332位保护模式2 2 4分段寻址方法的缺陷及其消除方法 2 2 116位实模式 实模式的运行框图 请见教材程序 2 实模式的寻址方式 doc 实模式下物理地址 内存空间 偏移空间的计算 实模式不支持虚拟内存 只有保护模式支持 实模式的优点与缺点是什么 2 2 216位保护模式 何谓保护模式 保护模式是如何实现的 请见教材程序 2 16位保护模式的实现 doc 保护机制是如何实现的 保护模式下的段地址 偏移地址的意义 保护模式下物理地址 内存空间 偏移空间 段空间 的计算 2 2 332位保护模式 内存地址空间是怎样算出的 存取字段中的间隔尺寸位有什么用 虚拟地址空间是怎样算出的 以上三个问题清见 32位和16位保护模式描述符的比较 请见教材程序 2 32位和16位保护模式描述符的比较 doc 2 2 4分段寻址方法的缺陷及其消除方法 分段寻址方法的缺陷是什么 为什么要采用 一个段 思想 在 一个段 思想指导下再进行分页是极好的想法 所谓分页就是把4GB内存按照页的大小进行分割 一个页是4096字节 4GB大小的内存 相当于分段技术中的一个段 可以分割成220个页 2 332位分页保护模式及其寻址方法 32位分页保护模式下 因为232 4GB 内存 虚拟内存 物理内存 交换区 文件是以页为单位来存贮的 交换区中的页文件由调度程序控制 只有把它调入物理内存才能进行处理 如何把32位地址进行分割实现分页机制的 请见教材程序 2 分页机制的解释 doc 2 4抢占式多任务 非抢占式多任务 进程和线程的概念 本节介绍 2 4 1进程和线程的概念2 4 2抢占式多任务2 4 3非抢占式多任务2 4 432位抢占式多任务多线程的工作原理 2 4 1进程和线程的概念 一个任务的一次执行过程称为一个进程 能独立执行的程序块的一次执行 进程和线程概念是怎样产生的 2 4 2抢占式多任务 具有最高优先级的线程就是当前正在运行的那个线程 这是抢占式多任务线程的调度规则 进程的通信问题是进程设计的关键 2 4 3非抢占式多任务 Windows3 x以前的版本是一种老式的多任务 它有三个特征 非抢占式 软件实现 协调工作 按照消息来进行调度 一旦这个消息获得执行权 一定要等到这个消息执行结束其他消息才有机会获得执行权 实现非抢占式多任务的关键是应用程序中有一个消息循环 请见教材程序 2 消息循环的基本结构 doc 2 4 4intel处理器的结构对抢占式多任务的支持 Win32中 应用程序的开发背景发生了那几个方面的变化 操作系统结构发生了什么变化 请见教材程序 2 intel处理器的结构 doc 线程是系统调度用的能够执行的最小执行代码段 2 532位Windows应用程序的消息输入方式 以进程作为调度单位有何缺点 为什么要采用多重输入方式 多重输入队列的工作原理 请见教材程序 2 多重输入队列 doc 32位Windows应用程序的特点 多任务 多线程 多重输入 2 632位Windows中虚拟内存空间的划分 Windows95的虚拟内存空间划分WindowsNT的虚拟内存空间划分在这两种系统中 应用程序都可以访问低端的2GB虚拟内存中的大部分内容 操作系统的职责是把虚拟地址映射成真正的物理地址 在RAM的页内 并对页进行分配和管理 2 732位Windows中虚拟内存的管理 何谓内存页与分页文件 各有什么用 内存是以页为单位分配的 4K 不可能预测到一个页在内存的什么地方 分页机制和分段机制对虚拟地址空间的管理机制是不一样的 但是 其目的是一样的 分配内存页的两个阶段 予约与委托 由VirtualAlloc 函数来完成 请见教材程序 2 VirtualAlloc函数的用法 doc VirtualQuery 函数的用法 请见教材程序 2 VirtualQuery的用法 doc 2 7 4异常事件及其处理方法 什么是异常事件寻找与处理异常事件的步骤 请见教材程序 2 寻找与处理异常事件的顺序 doc 异常事件处理程序的编写方法1封装具有潜在危险性的代码2异常事件过滤器的设计3GetExceptionCode 函数的应用4PageExceptionFilter 函数 在内存管理中常用的几个函数 VirtualAlloc 函数 请见教材程序 2 VirtualAlloc函数的用法 doc VirtualQuery 函数 请见教材程序 2 VirtualQuery的用法 doc PMEMORY BASIC INFORMATION结构 请见教材程序 2 PMEMORY BASIC INFORMATION结构 doc VirtualProtect 函数 请见教材程序 2 VirtualProtect函数 doc 内存的释放函数VirtualFree 请见教材程序 2 VirtualFree函数 doc 练习2 1 为什么实模式可以用在单任务环境下 而不能用在多任务环境 2 模式是什么意思 什么是实模式 什么是保护模式 3 实模式是如何寻址的 有什么优缺点 4 介绍16位保护模式的寻址方法 32位保护模式的寻址方法 5 分段有什么缺点 如何解决 什么叫 一个段 思想 6 32位分页保护模式的虚拟内存是多少 7 非抢占式 non preemptive 多任务和抢占式 preemptive 多任务的区别8 32位抢占式 preemptive 多任务多线程的特点是什么 9 Win16和Win32的消息队列有什么不一样 10 多线程和多重输入队列有什么优点 11 什么是异常事件 操作系统寻找一个解决异常事件的顺序如何 12 Win32异常处理程序的编程步骤 第3章开发Windows应用程序的技术基础 本章主要目的是向读者介绍编写Windows应用程序所采用的基本技术 约定和惯例 API的结构与基本用法等作了介绍 对Windows应用程序的各个组成部分也作了初步介绍 并用框图的形式介绍Windows应用程序的工作原理 3 1应用程序的结构与编译 解决多任务的关键是 控制核心应该从程序本身转移到Windows操作系统 应该由Windows操作系统决定那个应用程序可以占用CPU时间 程序的结构也不再是过程式程序中的赋值 循环 分支等C语言中常见的结构 而是消息 处理 为了解决这个问题 应用程序采用一种称为 事件驱动结构 是合适的 所谓非抢占式是指一旦这个应用程序取得了执行权 就一直要把这个程序执行下去 除非遇到新的消息来干预 否则 其他程序没有办法执行 如果把非抢占式和 事件驱动结构相结合 那就是Win16操作系统下的应用程序 3 1 1Windows应用程序的结构和C语言程序结构的比较 请见Windows应用程序的结构和C语言程序结构的比较C语言程序的主体结构是Main 定义函数1定义函数2 定义函数nC语言程序的主体结构是主函数Main和一些函数定义所组成 而Windows应用程序的结构可以用下面的框图来表示 WinMainWindowsFunction图3 1Windows应用程序的结构有两个函数所组成 一个是WinMain函数 另一个称为窗口函数 又称窗口消息处理程序 3 1 2Windows应用程序的编译和C语言程序编译的比较 C语言的编译图示 请见教材程序 3 C语言的编译用图表示如下 docWindows应用程序编译图示 请见教材程序 3 Windows应用程序编译系统 doc Windows应用程序编译系统工作步骤 请见教材程序 3 编译系统的工作过程 doc 编译应用程序所需的六个基本文件 什么资源文件与资源描述文件 RC 在编译中的作用 模块定义文件 DEF 的结构 请见教材程序 3 模块定义文件 doc 和在编译中的作用 头文件 H 的作用 WINDOWS H头文件 请见教材程序 3 WINDOWS H头文件 doc WINDEF H头文件 请见教材程序 3 WINDEF 头文件 doc 项目文件 MAKE 在编译中的作用 3 2Windows应用程序设计接口 API 学习API的重要性 简要介绍两种API 每个API主要有哪三个文件 请见教材程序 3 三个核心API组件 doc 每个文件的作用 3 3标识符的匈牙利命名惯例 为什么此惯例称为匈牙利命名惯例 匈牙利命名惯例的两条约定 要熟悉很多习惯用法 例如WPARAM和LPARAM是习惯用法 按照匈牙利命名惯例常用变量的字首 请见教材程序 3 常用变量的字首 doc 3 4事件驱动程序设计 什么是事件驱动程序设计 它与传统程序设计有什么区别 解释图3 4的工作原理 请见教材程序 3 事件驱动程序的工作原理 doc 消息与消息处理是实现事件驱动的关键 3 5动态链结和动态链结库 静态连接和动态连接的基本概念 如何进行链结 如何建立DLL文件请见其他有关文章和书籍 3 6PASCAL与WINAPI调用规范 什么是C调用规范 Win16中的PASCAL调用规范 cdecl Win32中的PASCAL调用规范 stdcall Win32中的WINAPI调用规范 stdcall 比较C cdecl stdcall三种调用规范 调用规范的同义词 请见教材程序 3 调用规范的同义词 doc 3 7Windows应用程序的工作原理 句柄与代号 單一应用程序情况下输入消息的获得与处理 请见教材程序 3 單一应用程序情况 doc 消息循环程序及其解释 请见教材程序 3 消息循环 doc 应用程序的结束 请见教材程序 3 应用程序的结束 doc 窗口类的作用及其用法初步 3 8窗口类的作用及其用法初步 每个Windows应用程序 或进程 都要有一个窗口 每个窗口代表一个应用程序 窗口类结构与窗口类是不同又有联系的概念 应用程序建立窗口的大概过程 练习3 1 16位和32位Windows操作系统对应用程序的支持有什么不同 2 Windows应用程序的编译和C语言程序编译有什么不同 3 资源描述文件的作用是什么 资源编译器的功能是什么 4 资源文件与资源描述文件 RC 的区别 5 模块定义文件 DEF 在编译中的作用 6 WINDOWS H头文件的作用 WINDEF H中定义了那些东西 WINNT H头文件的作用 7 项目文件的作用 8 简述程序设计接口 API 的组成情况9 讲讲匈牙利命名惯例的约定 还要记住那些习惯用法 10 解释事件驱动程序的原理 并和过程式程序进行比较11 何谓动态连接 何谓静态连接 动态连接库文件的后缀是什么 12 Win32里 微软设计者们又定义了一种新的调用规范 用什么符号表示 13 介绍PASCAL调用规范 C调用规范 用 cdecl表示 stdcall调用规范14 W32中有那些识别字都定义成 stdcall15 消息循环从应用程序消息队列取得窗口消息是怎样送給窗口消息处理程序 第4章应用程序 HELLOWIN c 的分析 本章详细地介绍HELLOWIN C中的窗口类结构以及各个条款的作用和意义并介绍根据窗口类结构创建窗口的方法HELLOWIN C 教材程序 4 4 HELLOWIN C doc 的WinMain函数分成 定义变量 定义窗口类变量 填写窗口类条款 注册窗口类 创建窗口 在屏幕上显示窗口 消息循环等七段 本章对它们进行了解释 并初步介绍与HELLOWIN C密切联系的窗口函数WndProc 使大家对窗口消息的处理有一个基本认识 通过本章的学习使大家对Windows应用程序的整体结构 组成 工作原理有一个粗浅的认识 WinMain函数是应用程序的入口点 其关键作用是为Windows应用程序创建窗口和进行消息循环 4 1HELLOWIN c应用程序 请见教材程序 4 4 HELLOWIN C doc Windows是一个多任务操作系统 每一个作业都需要在屏幕上运行一个窗口 这个窗口用于显示作业运行的情况 显示运行结果 用于运行时和用户交互的界面 相反 屏幕上的每一个窗口都联系着一个作业 所以 每一个应用程序都应包括HELLOWIN C程序中的WinMain函数代码的大部分 4 2WinMain函数的四个参数 Windows程序的进入点是WinMain 它的四个参数介绍 请见教材程序 4 WinMain函数 doc 在32位Windows版本中第二个参数总是NULL 4 3窗口类结构WNDCLASS 窗口类结构与窗口类的联系和区别 窗口类结构是内定的 WNDCLASS结构是如何用软件实现的 请见教材程序 4 WNDCLASS的实现 doc 4 4WNDCLASS各条款介绍 WNDCLASS结构请见教材程序 4 窗口类结构 doc 第1个条款是wndclass style它用CS HREDRAW CS VREDRAW填写 前缀CS 代表classstyle 用前缀CS 定义的识别字请见教材程序 4 以CS 为字首的识别字 doc 其他各条款介绍 4 5 4 6节介绍 4 5与窗口有关的识别字的介绍 请见教材程序 4 与窗口有关的识别字 doc 4 6和窗口有关的几种结构请见教材程序 4 与窗口有关的几种结构 doc 4 7 4 8 4 9节 代号是什么 HELLOWIN c中用的代号请见教材程序 4 代号 doc HELLOWIN至少调用了18个函数调用 请见教材程序 4 函数调用 doc 解释为什么要注册窗口类 如何注册窗口类 4 10 4 11 4 12介绍 用CreateWindows创建窗口 CreateWindows介绍请见教材程序 4 CreateWindows函数 doc 显示窗口用那个函数 解释基本消息循环及SMG结构请见教材程序 4 消息循环与MSG结构 doc 4 13窗口函数 窗口函数是处理消息的函数 窗口函数确定了在窗口显示区域内显示什么以及窗口怎样响应用户的输入 窗口函数的基本结构 使用switch和case结构来确定窗口函数接收的消息并处理它 窗口消息 WM CREATE WM PAINT消息 WM DESTROY消息是什么情况下产生 做些什么事 HELLOWIN C的解释 请见教材程序 4 4 HELLOWIN C doc 1定义应用程序要用的变量 2WNDCLAS是Windows中的窗口类结构名 这一段是定义窗口类变量 3根据窗口类结构填写各条款 形成初始化的窗口类 4进行注册 注册失败则输出信息并返回操作系统 注册成功 则跳过if循环 5根据窗口类建立窗口 6在屏幕上显示窗口 7消息循环 练习4 1 讲解Windows程序的结构 Windows程序的进入点是哪个函数 2 窗口类结构名WNDCLASSA和WNDCLASSW的应用场合 3 解释窗口类结构名与窗口类变量 为什么要填写窗口类条款 注册的作用是什么 4 用哪个函数创建窗口 它有几个参数 请解释每一个参数 5 应用程序中用的窗口类名从那里取得 6 主程序WinMain和WndProc是如何联系的 7 解释消息循环中的几个函数 8 请问 为什么DispatchMessage函数要调用操作系统来完成它所要的工作 而它不直接去完成呢 9 解释下面函数申明中的每一个单词intWINAPIWinMain HINSTANCEhInstance HINSTANCEhPrevInstance LPSTRlpCmdLine intnShowCmd 第5章Windows操作系统中的窗口类 本章对窗口类作了介绍和分析 例举了多种形式的窗口类 对窗口类和窗口类结构在概念上的联系和区别作了介绍 这是学生和自学人员容易搞错的 对填写窗口类条款所经常要遇到的四个函数作了介绍 在对窗口类条款作深入介绍的基础上 对应用程序的其他部分 如窗口的风格 窗口的显示 消息循环等 在第四章的基础上本章也都作了补充 5 1窗口类概述 系统全局窗口类 SystemGlobalClass 是系统内定的窗口类 预先定义好的窗口类共有七种 请见教材程序 5 预先定义窗口类 doc 应用程序局部应用窗口类 ApplicationLocalClass 这是进程注册窗口类 开始于进程的建立终止于进程的结束 应用程序全局应用窗口类 ApplicationGlobalClass 应用程序的第1个进程生成的窗口类 其他进程用不到再注册 可以直接应用 当窗口式样条款中加入CS GLOBALCLASS识别字时 注册的窗口类就是应用程序全局应用窗口类 5 2几种窗口类结构介绍 Win95中的窗口类结构 请见教材程序 5 Win95中的扩展窗口类结构 doc 窗口类条款的补充说明 WindowsNT中的窗口类结构 请见教材程序 5 WindowsNT中的窗口类 doc 几个与窗口类有关的函数 LoadIcon函数请见教材程序 5 LoadIcon函数 docLoadImage 函数请见教材程序 5 LoadImage docLoadCursor 函数请见教材程序 5 LoadCursor docCreateSolidBrush 函数请见教材程序 5 CreateSolidBrush doc 窗口类的式样 表5 6的解释 请见教材程序 5 表5 6 doc 表5 7的解释 请见教材程序 5 表5 7 doc ShowWindow函数的用法 练习5 1 Window应用程序是否一定要用WinMain主函数 WinMain函数的作用是什么 2 Window应用程序中是否所有的标识符都按照 匈牙利命名惯例 来拼写 3 解释系统全局窗口类 应用全局窗口类 应用专用窗口类 4 WinMain 的语法在16位Windows和32位Windows里是完全一致的 但是两者之间内在的差别是很大的 差别是什么 5 32位Windows支持哪三种窗口类 讲述每种窗口类的用法6 为什么要设计窗口类 7 请你解释一下下面三个窗口类条款WNDPROClpfnWndProcLPCSTRlpszClassNameHINSTANCEhInstance8 请你解释窗口类的每个条款9 解释窗口类结构名和窗口类名10 窗口类结构中常用的有那几个载入函数 它们的用法如何 11 为什么不提倡一个应用程序注册两个或两个以上主窗口 12 CreateWindowEx中有两个窗口风格 试介绍它们 13 CreateWindowEx函数有12个参数 它们是否和扩展窗口类中的条款一样 要好好区别它们 14 应用程序中如何做到不用ShowWindow 并解释ShowWindow 第6章输出 在多任务环境下 屏幕 打印机等硬件设备都是许多应用程序共享的 因此 任何一个应用程序都不能任意地进行输出操作 所有的输出 如屏幕 打印机 绘图机等 都必须通过GDI 图形设备接口 GRAPHISCDEVICEINTERFACE 函数来完成输出 本章表面上是讨论的字符串输出 实际上是讨论与设备无关的程序设计基础 本章例举了三个例程来说明应用程序的输出 6 1客户区的绘制和更新 Windows是通过发送WM PAINT消息給窗口函数 使得窗口显示输出 在初始化阶段都要调用函数UpdateWindow 执行这个函数的结果是Windows向窗口函数发送第一个WM PAINT消息 其他还有很多情况 Windows向窗口函数发送WM PAINT消息 使得被覆盖的部分客户区得以重新绘制 有效矩形和无效矩形 6 2GDI简介 所有输出都要通过GDI函数 当执行GDI函数输出时 可得到与设备无关的输出 其实现是源于Windows系统中为每一个设备建立一个数据结构 这个结构记录了设备输出时的详细要求 例如 输出时文字的颜色 线条的宽度 画图的坐标 以及输出时调用的驱动程序等 这个数据结构称为设备描述表 简称DC Windows系统中使用设备就抽象成使用DC 这种把设备抽象成为DC是实现设备无关性的关键 每个输出用的GDI函数其第1个参数就是hdc hdc是指向DC的指针 GDI函数通过设备进行输出就变成通过DC进行输出 同样 要输出都得要考虑在那个窗口上输出 为此要为每个输出窗口建立一个数据结构 绘图信息结构 PAINTSTRUCT 6 2 2获得hDC代号的方法 1 利用GetDC hWnd 取得窗口hDC 2 处理WM PAINT消息期间用BeginPaint获得hDC的方法 3在处理非WM PAINT消息期间获得hDC的方法 6 2 3绘图信息结构 PAINTSTRUCT 绘图信息结构 PAINTSTRUCT 及其应用 请见教材程序 6 绘图信息结构 doc 6 3TextOut函数 TextOut是在屏幕上显示文字的最常用的GDI函数 语法是 TextOut hdc x y psText iLength hdc 屏幕也是设备 1 hDC就是屏幕的设备描述表代号2 x y是客户区内输出字符串的开始地址 x是水平地址 y是垂直地址 3 psText参数是指向需要在窗口显示的字符串的指针 4 iLength是输出字符串中字符的个数 6 4重画区域的设定 WM PAINT窗口消息并非只来源于Windows系统 它们可以使用InvalidateRect或InvalidateRgn函数直接产生并送消息队列 一般是先设定一个重画区 然后再用它们中的一个送WM PAINT消息到消息队列 再排队进入窗口函数并在这个分支中进行重画 InvalidateRect设定的重画区是矩形 InvalidateRgn函数设定的重画区为不规则区域 6 5 3系统字体 字体的基本概念字体参数存贮在TEXTMETRIC类型的结构中 请见教材程序 6 TEXTMETRIC doc 用五个参数表示字体尺寸 请见教材程序 6 用五个参数表示字体尺寸 doc 格式化文字输出 请见教材程序 6 格式化文字输出 doc 6 6字体显示的综合使用SYSMETS1 c 视觉元件信息表 SYSMETS h 请见教材程序 6 SYSMETS H doc SYSMETS1 c程序 教材程序 6 6 2SYSMET1 C doc 阅读SYSMETS1 c SYSMETS1 c窗口函数的分析 SYSMETS1 c程序存在问题 6 8滚动条的使用 滚动条的范围和地址 图6 6的解释 请见教材程序 6 图6 6 doc 滚动条消息WM VSCROLL 供上下移动 和WM HSCROLL 供左右移动 消息 通知码的解释 图6 7的解释 请见教材程序 6 图6 7 doc 在SYSMETS1 C中加入滚动功能 教材程序 6 6 3SYSMETS2 C doc WM VSCROLL消息分支中更新客户区的方法 6 9建立更好的滚动 6 9 132位滚动条函数的应用SCROLLINFO结构 请见教材程序 6 SCROLLINFO结构 doc fMask条款对存取SCROLLINFO结构的控制 SetScrollInfo GetScrollInfo函数的应用 6 9 2滚动范围的计算 新SYSMETS SYSMETS3 c 教材程序 6 6 4SYSMETS3 doc 练习6 请见教材程序 6 练习6 doc 第7章图形程序的编程基础 图形介面 GDI GraphicsDeviceInterface 是Windows系统的一种软件子系统 它按照GDI函数来工作 负责在屏幕显示器和打印机上显示图形 GDI是Windows非常重要的软件接口 非但应用系统要使用GDI在屏幕上显示视觉信息 就连Windows本身也使用GDI来显示用户介面对象 诸如功能表 滚动条 图标和鼠标游标等 无一不用到GDI GDI是软件接口 它按照GDI函数来工作 GDI和GDI函数是有联系又不相同的概念 这里不对GDI进行全面的讲述 只是介绍GDI的基本知识 介绍画线 画图和填入区域的基本知识 7 1基本概念 32位GDI就是GDI32 DLL动态链结库 可以把它理解成GDI函数的解释器并按照解释调用相应的设备驱动程序 不同的设备有不同的设备驱动程序 这就实现了与设备无关的图形输出 GDI在应用程序和不同输出设备之间起着隔离作用 应用程序只要考虑GDI函数不必考虑设备 是实现设备无关性输出的关键措施 GDI也可以看作应用程序和输出设备之间的接口程序 图形输出设备分为两大类 位映射型设备和向量型设备 Windows输出用前者 位映射型设备内定使用像素座标系统 这也是实现设备无关性输出的诀窍 7 1 1GDI函数及其分类 1取得和释放设备描述表代号的函数 2取得字体尺寸信息的函数 GetTextMetrics 3绘图函数 4设定和取得设备描述表中有关属性的函数 5使用GDI对象的函数 7 1 2GDI绘制的基本图形 1直线和曲线 2填入区域 3点阵图 7 1 3图形程序设计的其他问题 1映射模式及其变换 2Metafile 3绘图区域 4路径 5裁剪 6调色盘 7打印 7 2设备描述表 7 2 1取得设备描述表代号的方法7 2 2取得设备描述表中信息的方法7 2 3保存设备描述表7 2 4设备描述表的构成 请见教材程序 7 设备描述表结构 doc 7 2 5设备能力显示程序 DEVCAPS1 教材程序 7 7 1DEVCAPS1 doc 7 2 6解析度 每个度量单位内的像素数目 对打印机 我们经常用 每英寸的点数 dpi 表示解析度 dotperinch 解析度俗称分辨率 显示器的解析度 请见教材程序 7 显示器的解析度 doc 7 2 7色彩 彩色显示器显示图形的色彩数等於表示像素可能取的颜色数 Full Color 屏幕显示器的每个像素用24位二进制表示颜色 共可以表示224种颜色 24位中8位红色 8位绿色以及8位蓝色 这三种颜色称为 三原色 High Color 显示器每个像素用16位二进制表示色彩 其中 5位红色 6位绿色以及5位蓝色 在大多数GDI函数调用中 使用COLORREF值 是一个32位的无正负号长整数 表示色彩 请见教材程序 7 COLORREF doc 7 3画线函数与画笔 处理像素的函数 请见教材程序 7 像素偏差问题 doc 画线函数 请见教材程序 7 画线函数 doc 画图函数 请见教材程序 7 画图函数 doc 正弦曲线程序SINEWAVE 请见教材程序 7 7 2SINEWAVE doc 画线函数与画图函数的关系像素偏差问题 请见教材程序 7 像素偏差问题 doc LINEDEMO画图程序 请见教材程序 7 7 3LINEDEMO doc 7 3 7画笔 1 内定画笔的用法 请见教材程序 7 内定画笔的用法 doc 2 自定义画笔的建立 选择和删除 请见教材程序 7 画笔的建立 选择和删除 doc 3 建立 选择和删除自定义画笔的其他方法 请见教材程序 7 建立 选择 删除自定义画笔的其他方法 doc 背景模式 BkMode 背景颜色 BkColor 及其处理 位布尔运算 与画线模式 请见教材程序 7 表7 2 doc 7 4画图 7 4 1图形函数 请见教材程序 7 画图函数 doc 7 4 2图形的填入 画刷 7 4 3画刷的建立 选择和删除 1建立画刷的五个函数 请见教材程序 7 建立逻辑画刷的五个函数 doc 2画刷的选择和删除 7 5GDI映射方式 7 5 1映射方式概述 教材程序 7 8种映射方式

温馨提示

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

评论

0/150

提交评论