




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、WINDOWS 程序设计程序设计本课程特点: 实用性强 难度较大 需要前序课程的基础(C/C+、数据结构、操作系统、数据库系统等) 信息量大 课时少如何学好这门课程:一定不要忽视Windows的基本概念:消息驱动、消息循环、代号(句柄)、设备环境(DC)等。1. 打好C/C+基础。正所谓“磨刀不误砍柴工”,最开始接触VC时不要急于开始Windows程序开发,而是应该进行一些字符界面程序的编写。这样做的目的主要是增加对语言的熟悉程度,同时也训练自己的思维和熟悉一些在编程中常犯的错误。更重要的是理解并能运用C+的各种特性,这些在以后的开发中都会有很大的帮助。面对庞大Win32 API函数,不要初学
2、就去记忆函数的参数,而应该重在函数的用途。多看书,多看例程。 对于初学者:应该选择一些内容比较全面的书籍,并且书籍中的内容应该以合理的方式安排,在使用该书时可以达到循序渐进的效果,书中的代码要有详细的讲解。尽量买翻译的书,因为这些书一般都比较易懂,而且语言比较轻松。买书前一定要慎重如果买到不好用的书可能会对自己的学习积极性产生打击。Windows程序设计微软出版社MFC Windows程序设计微软出版社Visual C+6.0类参考详解清华大学出版社 或MSDN(微软开发者网络)光盘深入浅出MFC华中理工大学出版社Windows核心编程微软出版社(初学可暂时不 看)参考资料学习中的常见问题:觉
3、得迷茫,无从入手办法:看书的同时要多练手,对照书上的步骤一步一步进行操作和输入函数太多,不知道该用什么办法:准备个小册子,遇到新函数就记录下函数名和出处,平时拿出来多看,如此积累函数你能够使用的函数(不考虑第三方) C语言运行时刻库函数如strcpy() Win32 API函数如StrCpy() 本课程内容: Windows操作系统的基本原理 Windows程序的基本框架 使用Visual C+ 6.0进行Windows程序设计1.1 WINDOWS的发展历史的发展历史 上世纪60年代就开始从事系统软件的研究与开发,但直到1981年MS-DOS才正真成为PC上的主流操作系统。MS-DOS是一个
4、单用户单任务操作系统,它提供给用户的是一种命令界面,它为编程人员提供输入输出(I/O )函数供编程人员调用 。为了将文字或图形写到显示器上,应用程序可以直接存取PC机的硬件。第 1 章 概述图形操作环境的发展历程图形操作环境的发展历程 由于存贮器和硬件的限制,直到1983年1月,苹果计算机公司才发表Lisa计算机,在Lisa计算机中提出了不同于字符模式环境的另一种环境图形操作环境。并在1984年1月成为Macintosh上图形环境的一种标准。Windows图形操作环境的发展历史。 发行日期发行日期 编码编码 API 应用程序应用程序Windows 1.0 1985年年11月月 16位位 Win
5、16 16 位位Windows /386 1987年年9月月 16位位/32位位 Win16 16 位位Windows 2.x 1987年年12月月 16位位 Win16 16 位位Windows 3.0 1990年年5月月 16位位/32位位 Win16 16 位位Windows 3.1 1992年年4月月 16位位/32位位 Win16 16 位位Windows for Workgroup 3.1 1992年年11月月 16位位/32位位 Win16 16 位位 Windows for Workgroup 3.11 1993年年11月月 16位位/32位位 Win16 16 位位Windo
6、ws 3.11 1993年年12月月 16位位/32位位 Win16 16 位位Windows NT 3.1 1993年年8月月 32位位 Win32 32 位位/16位位Windows NT AS 3.1 1993年年8月月 32位位 Win32 32 位位/16位位Windows NT workstation 3.5 1994年年10月月 32位位 Win32 32 位位/16位位Windows NT sever 3.5 1994年年10月月 32位位 Win32 32 位位/16位位Windows NT workstation 3.51 1995年年7月月 32位位 Win32 32 位
7、位/16位位Windows NT sever 3.51 1995年年7月月 32位位 Win32 32 位位/16位位Windows 95 1995年年8月月 32位位/16位位 Win32 32 位位/16位位Windows 98 1998年年6月月 32位位 Win32 32 位位/16位位Windows 2000 2000年年xx月月 32位位 Win32 32 位位/16位位Windows XP 2002年年xx月月 32位位 Win32 32 位位/16位位本表中的编码本表中的编码 16位位/32位位 ,API Win16/Win32,应用程序的位数应用程序的位数 32 位位/16位
8、这三个项目位这三个项目的意义由下面各节介绍。的意义由下面各节介绍。1.2 32位位Windows操作系统的基本操作系统的基本性质和用途性质和用途 32位优先权式多工多线程图形操作系统。 “所见即所得所见即所得”的图形信息显示,以及格式化的内容输出。 屏幕显示器被称作“显示多个程序的桌面”。 为了实现多工必须对存贮器进行管理。 不要求应用程序自行开发驱动程序 。1.3 API的基本特征及其发展历程的基本特征及其发展历程 什么是API?API是”应用程序接口”的缩写( Application Programming Interface) , API包含了所有应用程序能够使用,操作系统能够执行的函数
9、调用 。 API的特点:发展保持一致和兼容 。 API的最大发展是16位变成32位。 API的分类:Win16 API ,Win32 API 。1.4 编程工具编程工具 Visual Basic编程工具简介。 Visual C+编程工具简介。 , MFC编程简介。 , Borland Delphi编程工具简介。 1.5 集成开发环境集成开发环境1.6 C程序和程序和windows程序的比较程序的比较用用 C语言编出的语言编出的 hello, world程序程序#include int main () printf (hello, worldn) ; return 0 ;1.6 C程序和程序和w
10、indows程序的比较程序的比较同样效果的同样效果的Windows程序程序 HelloMsg.c #include int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow)MessageBox (NULL, TEXT (Hello, Windows 98!), TEXT (HelloMsg), 0);return 0 ;1.7.1 #include申明和包含文件包含文件 包含文件的作用:用于前置处理 。定义了Windows程序中的数据类型、函数原型、数据结构和常
11、数数据类型、函数原型、数据结构和常数, #include 中最重要最基本的包含文件是: WINDEF.h 文件中有基本数据类型定义。 WINNT.h 文件中有支援Unicode的类型定义。 WINBASE.h 文件中有Kernel函数的有关定义。 WINUSER.h 文件中有用户界面函数的有关定义。 WINGDI.h 文件中有图形界面函数的有关定义。 1.7 HelloMsg.C的三个组成部分的三个组成部分1.7.2 程序进入点进入点 Windows程序的进入点是WinMain 。 WinMain函数如下: int WINAPI WinMain( HINSTANCE hInstance, HI
12、NSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd);匈牙利命名方法 int WINAPI 识别字 int 是WinMain函数返回值的类型。 WINAPI 识别字是函数调用规范,定义如下: #define WINAPI _stdcall。_stdcall是指示编译工作的识别字,它告诉编译系统如何产生机器码,函数调用参数在堆栈中是如何放置的以及函数调用时参数取出的的顺序。故而该识别字指定了一个调用约定。WinMain函数申明为WINAPI,这也是说,WinMain函数的调用也遵循_stdcall约定。WinMain的四个参数 hInstan
13、ce :操作系统为该应用程序创建的“执行实例 。 hPrevInstance:控制标识。如果是(null),表示在此之前,此应用程序还没有建立过任何实例,如果非0,说明已经建立过应用程序的实例。在win32中总是为空。 lpCmdLine:指向命令序列的长指针。 nShowCmd:程序的显示方式 。1.7.3 MessageBox函数函数 MessageBox函数用于显示短信息。 MessageBoxW( HWND hWnd , LPCWSTR lpText, LPCWSTR lpCaption, UINT uType); MessageBox函数的四个参数的解释 : 参数1指示在那个窗口中显
14、示。 参数2是在窗口中显示的字符串。 参数3是在窗口标题行上显示的字符串。 参数4指示在显示窗口中生成按钮 MB_常数的解释 MB_常数指示在显示窗口中生成按钮。 MB_表示此常数是MessageBox函数的专用常数(为函数定义常数在其他函数中也能见到)。 MB_实际上是表示一个代码。 例如MB_OK 就是 0 x00000000L。 更多的MB_ 代码查看MSDN 返回值 : IDABORT Abort button was selected. IDCANCEL Cancel button was selected. IDIGNORE Ignore button was selected.
15、IDNO No button was selected. IDOK OK button was selected. IDRETRY Retry button was selected. IDYES Yes button was selected. 1.8 字符编码及字符编码及Unicode初介初介 1.8.1 字符集编码的发展简史字符集编码的发展简史 电报码电报码 ,盲人阅读码盲人阅读码 ,Telex代码代码 , BCDIC码码 ,ASCII ,内码表内码表 。. 1.8.2 双字节字符集(双字节字符集(DBCS ) DBCS中的0到256编码,它就像内码表一样,前128个代码是ASCII,用
16、1个字节定义。后128个代码“中的”某些用2个字节定义,某些仍然是用1个字节来定义。 虽然中文汉字、日文和韩文共享许多相同的象形文字,但显然这些语言是不同的,往往同样的象形文字在三种语言中代表着不同的东西。Windows支持四种不同的双字节字符集:代码页932(日文)、936(简体中文)、949(韩文)以及950(繁体中文)。DBCS只有在为这些国家制造的Windows版本上才被支持。 双字节编码会引起附加的程序设计问题,例如,字符串的长度计算。 1.8.3 Unicode字符集字符集 Unicode是统一的是统一的16位位(两个字节两个字节)表示一个字符的编码系表示一个字符的编码系统统。 U
17、nicode编码:编码: 前前128个个Unicode字符(字符(16位代码从位代码从0 x0000到到0 x007F)就是)就是ASCII字符,而接下来的字符,而接下来的128个字符(代码个字符(代码从从0 x0080到到0 x00FF)是)是ISO 8859-1对对ASCII的扩展。的扩展。 希腊字母表使用从希腊字母表使用从0 x0370到到0 x03FF的代码,的代码, 斯拉夫语使用从斯拉夫语使用从0 x0400到到0 x04FF的代码,的代码, 美国使用从美国使用从0 x0530到到0 x058F的代码,的代码, 希伯来语使用从希伯来语使用从0 x0590到到0 x05FF的代码。的代
18、码。 中国、日本和韩国的象形文字(总称为中国、日本和韩国的象形文字(总称为CJK)占用了从)占用了从0 x3000到到0 x9FFF的代码。的代码。1.9.1 操作系统中基本数据类型的确定操作系统中基本数据类型的确定 int,char是最基本的数据类型。int取决于CPU的位数,即操作系统的位数。Char取决于操作系统所采用的编码。 如果char用8位二进制进行编码,那就是ASCII码字符集 。 如果char用16位二进制进行编码,那就是 Unicode 码字符集。1.9 字符的数据类型字符的数据类型char和宽字符和宽字符数据类型数据类型wchar 1.9.2 单字节字符数据类型单字节字符数
19、据类型(char)。 字节和字符是两个既有联系又有差别的概字节和字符是两个既有联系又有差别的概念念 。字节是,字符是。 一个字节是8位二进制。 解释:char c = A ; char * p ; char * p = Hello! ; char a10 ; char a = Hello! ; static char a = Hello! ; 1.9.3 宽字符数据类型宽字符数据类型(wchar)。 用多个字节存贮一个字符称为宽字符,C中用wchar_t表示宽字符数据类型 。 wchar_t和无符号短整数类型相同无符号短整数类型相同 。 #typedef unsigned short wcha
20、r_t 定义宽字符数据类型的方法:例如 wchar_t c = A ; /c中存放A的宽字符。 wchar_t * p = L“Hello!” /L不可少。 static wchar_t a = LHello! ; /L不可少。 1.9.4 宽字符串库函数宽字符串库函数 wchar_t *pc=L”sssss”; int iLeng=0; iLeng=strlen(pc);/错误 见P16 iLeng=wcslen(pc);/正确1.9.5 字符串函数的字符串函数的Unicode版和版和ASCII版的合一方法版的合一方法 最好的解决办法是源文件既能按ASCII编译又能按Unicode编译。 1
21、.9.6 TCHAR.h头文件的作用头文件的作用 该头文件不是该头文件不是ANSI C标准的一部分,其中标准的一部分,其中定义的每个函数和宏参数,前面都有一条定义的每个函数和宏参数,前面都有一条下底线。下底线。TCHAR.h为以字符串作为参数的为以字符串作为参数的标准库函数提供一系列的替代名称。标准库函数提供一系列的替代名称。例如,_tprintf是屏幕显示宽字符串的函数 _tcslen是计算宽字符串长度计算函数。1.9.7 编译命令中编译命令中_UNICODE识别字识别字的引入的引入 _UNICODE是控制程序段中的字符串处理函数是按照宽字符串处理函数对待还是按照常规字符串处理函数对待。 如
22、果在程序中包含了TCHAR.h头文件,当源程序中 _UNICODE识别字有定义时,那么_tcslen就定义为wcslen(宽字符串长度计算函数):,如果_UNICODE识别字没有定义,则_tcslen定义为strlen (非宽字符串长度计算函数)。 P181.9.8 WINDOWS对宽字符支持对宽字符支持 Windows NT从底层支援Unicode。这意味著Windows NT内部使用由16位字符组成的字符串。 Windows NT可执行ASCII编码的程序或Unicode 编码的程序 或者 ASCII和Unicode混合编写的程序 。1.10.1 WINNT.h是对是对Unicode支持支
23、持的头文件。的头文件。 定义了新的数据类型:CHAR和WCHAR 。 定义了六个字符串指针和四个const字符串指针。 P191.10 应用程序实现应用程序实现Unicode和和ASCII混合编码的原理混合编码的原理 1.10.1 WINNT.h是对是对Unicode支持支持的头文件。的头文件。 WINNT.h用于用于实现UNICODE 和ASCII的混合编码。 用用UNICODE识别字来控制程序段按照识别字来控制程序段按照UNICODE编码进编码进行编译还是按照行编译还是按照ASCII编码来进行编译,如下所示:编码来进行编译,如下所示: P19 #ifdef UNICODE /下面按照下面按
24、照UNICODE编码进行编码进行编译编译 typedef WCHAR TCHAR, * PTCHAR ;typedef LPWSTR LPTCH, PTCH, PTSTR, LPTSTR ;typedef LPCWSTR LPCTSTR ;#else /下面按照下面按照ASCII编码进行编译编码进行编译typedef char TCHAR, * PTCHAR ;typedef LPSTR LPTCH, PTCH, PTSTR, LPTSTR ;typedef LPCSTR LPCTSTR ;#endif。1.10.1 WINNT.h是对是对Unicode支持支持的头文件。的头文件。 定义了一些
25、宏参数。 WINNT.h头文件还定义了一个宏参数,该宏参数将头文件还定义了一个宏参数,该宏参数将L添加添加到字符串的前面。到字符串的前面。如果UNICODE识别字有定义,则 _TEXT的宏参数定义如下:#define _TEXT(quote) L#quote /*_TEXT(quote)是宏参数定义的函数,它表示在自变元quote的前面并上一个L,#是并置运算符。*/如果识别字UNICODE没有定义,则_TEXT宏参数定义如下:#define _TEXT(quote) quote/_TEXT(quote)的结果就是quote此外, TCHAR.h中定义中定义_TEXT宏参数为宏参数为TEXT,
26、不必操心底线。本书,不必操心底线。本书中使用中使用TEXT版本版本。TEXT宏参数在TCHAR.h中是中是这样定义的:#define TEXT(quote) _TEXT(quote)/ _TEXT(quote)和TEXT(quote)等价 1.10.2 32位系统中的位系统中的MessageBox函数函数 。 16位MessageBox在USER.EXE,32位MessageBox在USER32.DLL用于支持用于支持Unicode 编码。 32位MessageBox函数有两个函数的进入点:MessageBoxA(ASCII版), MessageBoxW(宽字符版)。1.10.2 32位系统中
27、的位系统中的MessageBox函数函数 。到底进入MessageBoxA还是MessageBoxW,其处理方法如下: MessageBoxA在WINUSER.h中定义的方法与MessageBox早期的定义很相似: int WINAPI MessageBoxA ( HWND hWnd, LPCSTR lpText,LPCSTR lpCaption, UINT uType) ; MessageBoxW的定义为: int WINAPI MessageBoxW (HWND hWnd, LPCWSTR lpText,LPCWSTR lpCaption, UINT uType) ; 注意,Message
28、BoxW函数的第二个和第三个参数是指向宽字符的指针。 如果在程序中需要同时使用ASCII和宽字符函数调用,那么您可在Windows程序中明确地使用MessageBoxA和MessageBoxW函数。但大多数程序编程人员将继续使用MessageBox。处理方法是:根据UNICODE识别字是否定义,MessageBox将与MessageBoxA或MessageBoxW中的一个相同。在WINUSER.h中完成这一技巧,程序相当简单,如下所示: #ifdef UNICODE #define MessageBox MessageBoxW #else #define MessageBox MessageB
29、oxA #endif1.10.3 Windows的字符串处理函数的字符串处理函数 Windows从c库中复制的字符串处理函数ILength = lstrlen (pString) ;pString = lstrcpy (pString1, pString2) ;pString = lstrcpyn (pString1, pString2, iCount) ;pString = lstrcat (pString1, pString2) ;iComp = lstrcmp (pString1, pString2) ;iComp = lstrcmpi (pString1, pString2)这些函数在
30、程序段前面设置UNICODE识别字,识别字,那么这些函数将接受宽字符串,否则只接那么这些函数将接受宽字符串,否则只接受常规字符串。受常规字符串。 1.10.4 Windows中的中的sprintf函数函数Windows程序中不能使用printf ,但是,在Windows程序中可以使用fprintf。 由于许多由于许多Windows早期程序使用了早期程序使用了sprintf和和vsprintf,最终导致,最终导致Microsoft向向Windows API中增添了两个相似的函数。中增添了两个相似的函数。Windows的的wsprintf和和wvsprintf函数是在功能上与函数是在功能上与sprintf和和vsprintf相同的函数,相同的函数,但它们不能处理浮点格式。但它们不能处理浮点格式。当然,随著宽字符的发表,当然,随著宽字符的发表,sprintf类型的函数增加了许多,使得函数类型的函数增加了许多,使得函数名称变得极为混乱。下面表名称变得极为混乱。下面表1-1列出列出Microsoft的的C运行函数库和运行函数库和Windows所支持的所有所支持的所有sprintf函数。函数。 ASCII ASCII 宽字符宽字符 常规常规 参数的变量个数参数的变量个数 标准版sprintfswprintf_stprintf最大长度版_snprintf_snwpr
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 威海蓝色经济区建设总体规划
- 节约用水剧本
- 2025年制造业企业信息化项目经理招聘考试指南模拟题与答案详解
- 2025年城市环卫工程垃圾处理工招聘面试指南及模拟题集
- 2025年运动营养师中级考试重点题目及解析
- 合作研究与开发技术协议说明
- 2025年国际贸易实务操作指南与模拟题集初级版
- 2026届甘肃省武威一中高三化学第一学期期中综合测试模拟试题含解析
- 2025年船舶驾驶员二类适任考试复习指南
- 护理诊断措施及评价
- 学校食堂员工薪资方案
- 2025-2030中国冷冻榴莲行业供需现状究及未来销售渠道趋势报告
- DBJ41T 137-2014 防渗墙质量无损检测技术规程
- 百岁居区域+乐活内外勤宣导材料
- 内蒙古职工考勤管理制度
- GB/T 21220-2024软磁金属材料
- 《数字媒体技术导论》全套教学课件
- 吉林大学介绍
- 卫浴设备安装技能的培训与认证
- 废气处理工程协议
- SH/T 3158-2024 石油化工管壳式余热锅炉(正式版)
评论
0/150
提交评论