界面编程基础知识.pptx
《界面编程基础知识.pptx》由会员分享,可在线阅读,更多相关《界面编程基础知识.pptx(86页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、Windows程序设计1、Windows编程的基本概念2、Windows中的数据类型3、消息驱动与消息循环4、资源与资源文件C+C+程序设计程序设计程序设计程序设计第1页/共86页213.2 界面编程人机界面HCI(human-computer interface)又称用户界面UI(user interface),是人与计算机之间传递、交换信息的媒介和对话接口,是计算机系统的重要组成部分。由于大多数应用程序是以用户界面为框架的,因此界面编程是软件开发的核心编程之一。第2页/共86页313.2 界面编程用户界面的设计与操作系统平台有关,操作系统界面一般有两种:命令行界面CLI(command l
2、ine user interface),例如DOS;图形用户界面GUI(graphical user interface),例如Windows。第3页/共86页413.2 界面编程早期的计算机普遍使用命令行界面,人机操作的特点是文本显示和命令输入。时至今日,命令行界面主要用在系统管理、远程维护、语言处理等系统软件中,因而命令行界面也称为控制台界面,本书前面章节的程序都是命令行程序。图形用户界面是目前操作系统广泛使用的人机界面。人机操作的特点是图形显示和交互图形化,与命令行界面相比,图形用户界面对于使用者来说在视觉上更易于接受,操作上更简便。本节介绍Windows系统下的图形用户界面编程技术。第
3、4页/共86页5编程的基本概念Windows应用程序的一个突出特点是它有一个美观的图形用户界面窗口。窗口中可以包含标题栏、菜单、工具条、状态栏、滚动条等,对话框中还包含类型不同的子控件,例如按钮、复选框、列表框、组合框、编辑框等。窗口、对话框、图形元素与键盘和鼠标的配合,方便了用户对应用程序的操作。第5页/共86页6编程的基本概念Windows应用程序的界面编程,即是设计满足要求的窗口程序。简单的Windows应用程序只有一个窗口,而复杂的Windows应用程序有多个窗口。Windows运行机制的核心是动态链接,应用程序在运行时使用动态链接库,调用Windows提供的系统功能。Windows为
4、程序员提供了几千个函数,称为Windows API函数,用于实现用户界面和显示文字和图形等。第6页/共86页7编程的基本概念Windows编程有多种技术,其中使用C语言和调用Windows API函数被称作SDK编程方法,它今天依然是编写Windows程序的有效方法。自从出现面向对象程序设计方法以来,Windows程序结构和开发工具发生了巨大的变化,例如MFC(Microsoft Foundation Classes)、Visual Basic、C#等。由于这些面向对象且可视化的开发工具能大幅提高Windows程序的开发效率,因而得到了广泛应用。但无论如何,掌握SDK编程方法是必要的。第7页/
5、共86页8编程的基本概念编写Windows程序,需要在程序源文件开始位置包含头文件:windows.h是主要的包含文件,它包含了其他Windows头文件。这些头文件定义了Windows的函数原型、数据类型、数据结构、宏定义和预定义符号常量,是Windows程序开发文件中的重要组成部分。有兴趣的读者可以阅读这些头文件的细节,对提高Windows编程水平有很大帮助。#include /Windows头文件头文件第8页/共86页9编程的基本概念Windows编程涉及大量API技术文档信息,可以通过安装MSDN得到联机帮助。初学Windows编程的人面对Windows庞大的知识系统往往茫然不知所措,实
6、际上它是非常有规律的:第9页/共86页10编程的基本概念通过掌握Windows的基本数据定义和数据类型奠定编程基础;通过详细分析Windows编程结构了解其编程规律;通过构造和使用通用的编程框架形成编程模板,尽快上手;通过研究API文档的分类特点学会快速查阅需要的信息;了解、熟悉和模仿Windows的重要编程习惯,如命名时的“见其名知其意”。第10页/共86页11数据定义与数据类型Windows定义了若干实用的宏,例如:#define TRUE 1#define FALSE 0#define CALLBACK _stdcall#define WINAPI _stdcall#define API
7、ENTRY WINAPI#define FAR far#define CONST const#define LOWORD(x)(WORD)(x)#define HIWORD(x)(WORD)(DWORD)(x)16)&0 xFFFF)第11页/共86页12数据定义与数据类型其中_stdcall表示PASCAL调用约定,被调函数采用自右向左的顺序参数入栈,函数自己在退出时清空堆栈;非_stdcall声明为C调用约定,被调函数采用自右向左的顺序参数入栈,由调用者清空堆栈;CALLBACK表示回调函数,WINAPI表示Windows API函数;far表示32位远指针;LOWORD(x)取x的低16
8、位值,HIWORD(x)取x的高16位值。第12页/共86页13数据定义与数据类型为了提高程序的可读性和兼容性,Windows建立了完整的数据类型体系,称为Win32应用程序接口数据类型。常用的Windows数据类型见表13-3。第13页/共86页14数据定义与数据类型表13-3 常用的Windows数据类型Windows数据类型数据类型C语言类型语言类型含义含义BOOLint逻辑类型(取值为逻辑类型(取值为TRUE或或FALSE)BYTEunsigned char字节型字节型CHARcharANSI字符字符COLORREFunsigned long颜色值,分红、绿、蓝(颜色值,分红、绿、蓝(
9、RGB)字节)字节DWORDunsigned long无符号长整型无符号长整型INTint32位整型位整型LONGlong32位长整型位长整型LPARAMlongLONG型消息参数型消息参数LPCSTRCONST CHAR*只读型只读型8位位ANSI字符串的指针字符串的指针LPCTSTRLPCWSTR/LPCSTRLPCWSTR或或LPCSTRLPCWSTRCONST WCHAR*只读型只读型16位位Unicode字符串的指针字符串的指针第14页/共86页15数据定义与数据类型续表13-3 常用的Windows数据类型Windows数据类型数据类型C语言类型语言类型含义含义LPDWORDDWO
10、RD*DWORD的指针的指针LPSTRCHAR*8位位ANSI字符串的指针字符串的指针LPTSTRLPWSTR/LPSTRLPWSTR或或LPSTRLPWSTRWCHAR*16位位ANSI字符串的指针字符串的指针LPVOIDvoid*void的指针的指针LRESULTlong消息处理结果值消息处理结果值TCHARWCHAR/CHARWCHAR或或CHARUINTunsigned int无符号无符号INTVOIDvoidvoidWCHARwchar_t16位位Unicode字符字符WORDunsigned short16位无符号整型位无符号整型第15页/共86页16数据定义与数据类型续表13-3
11、 常用的Windows数据类型Windows数据类型数据类型C语言类型语言类型含义含义WPARAMunsigned intWORD型消息参数型消息参数第16页/共86页17数据定义与数据类型在Windows应用程序中,会有许多诸如窗口、按钮、滚动条、设备、控件或者文件等复杂数据结构的不同对象和同类对象中的不同实例。为了在程序中区分和使用它们,需要对它们进行标识。有别于普通变量的标识,Windows将这些对象的标识称为句柄(handle)。句柄是Windows编程的基础,一个句柄能够唯一区别Windows正在使用的对象或实例。应用程序几乎总是通过调用一个API函数来获得一个句柄,之后其他的API
12、函数就可以使用该句柄,以引用相应的对象的信息。常用的Windows句柄类型见表13-4。第17页/共86页18数据定义与数据类型表13-4 常用的Windows句柄类型Windows句柄类型句柄类型 C语言类型语言类型含义含义HANDLEvoid*通用对象句柄通用对象句柄HACCELHACCEL_结构体指针结构体指针快捷键列表句柄快捷键列表句柄HBITMAPHBITMAP_结构体指针结构体指针位图句柄位图句柄HBRUSHHBRUSH_结构体指针结构体指针画刷句柄画刷句柄HCURSORHICON_结构体指针结构体指针光标句柄光标句柄HDCHDC_结构体指针结构体指针设备场境(设备场境(DC)句柄
13、)句柄HFILEint文件句柄文件句柄.HFONTHFONT_结构体指针结构体指针字体句柄字体句柄HGDIOBJvoid near*GDI对象句柄对象句柄HGLOBALvoid*全局内存块句柄全局内存块句柄第18页/共86页19数据定义与数据类型续表13-4 常用的Windows句柄类型Windows句柄类句柄类型型C语言类型语言类型含义含义HICONHICON_结构体指针结构体指针图标句柄图标句柄HINSTANCEHINSTANCE_结构体指针结构体指针实例句柄实例句柄HMENUHMENU_结构体指针结构体指针菜单句柄菜单句柄HMODULEHINSTANCE_结构体指针结构体指针模块句柄。模
14、块句柄。HPALETTEHPALETTE_结构体指针结构体指针调色板句柄调色板句柄HPENHPEN_结构体指针结构体指针画笔句柄画笔句柄HRGNHRGN_结构体指针结构体指针区域句柄区域句柄HRSRCHRSRC_结构体指针结构体指针资源句柄资源句柄HWNDHWND_结构体指针结构体指针窗口句柄窗口句柄第19页/共86页20数据定义与数据类型Windows还定义了一些有用的结构体及结构体指针类型,例如点的坐标:typedef struct tagPOINT LONG x;LONG y;POINT,*PPOINT,FAR*LPPOINT;第20页/共86页21数据定义与数据类型宽度和高度:type
15、def struct tagSIZE LONG cx;LONG cy;SIZE,*PSIZE,*LPSIZE;第21页/共86页22数据定义与数据类型矩形框:typedef struct tagRECT LONG left;LONG top;LONG right;LONG bottom;RECT,*PRECT,FAR*LPRECT;typedef const RECT FAR*LPCRECT;第22页/共86页23数据定义与数据类型一般地,Windows自定义数据类型、句柄类型和宏定义的关键字都是大写。编写Windows应用程序时,程序员偏爱使用“匈牙利表示法”的变量命名约定,即变量名以一个或
16、多个小写字母为前缀,这些字母表示变量的数据类型。表13-5列出了在本书中经常使用的变量前缀。第23页/共86页24数据定义与数据类型表13-5 常用变量前缀前缀前缀数据类型数据类型前缀前缀数据类型数据类型前缀前缀数据类型数据类型ccharnshortiintx,yx和和y坐标坐标cx,cyx长度和长度和y长度长度bBOOLfint,代表,代表flagwWORDlLONGdwDWORDfnfunction函数函数sstringsz以以0结尾的字符串结尾的字符串 h句柄句柄p,lp指针指针例如定义C语言字符串,在Windows程序中会这样写:char szMessage200;第24页/共86页2
17、5消息与消息循环1事件与消息命令行界面程序是过程式的,即程序按顺序调用函数直至运行结束。图形用户界面程序是事件驱动式的,即程序启动并创建程序窗口之后,随即进入一个等待状态(称为消息循环),直到接收到一个事件(称为消息),例如键盘输入、鼠标单击等,程序脱离等待状态对事件进行相应的处理(称为消息处理或响应消息),处理完成后又进入等待状态。第25页/共86页26消息与消息循环为了描述事件的各种信息,Windows定义了一个消息(message)类型如下:typedef struct tagMSG HWND hwnd;/产生消息的窗口句柄产生消息的窗口句柄 UINT message;/消息的标识码消息
18、的标识码 WPARAM wParam;/消息附加信息消息附加信息1 LPARAM lParam;/消息附加信息消息附加信息2 DWORD time;/消息进入消息队列的时刻消息进入消息队列的时刻 POINT pt;/发送该消息时光标的屏幕位置发送该消息时光标的屏幕位置 MSG,*PMSG,FAR*LPMSG;第26页/共86页27消息与消息循环当Windows发生某个事件时,Windows系统会把该事件的相关信息填写到MSG结构的各个成员中,并设法把这个消息发送到应用程序中。应用程序根据消息中的窗口句柄hwnd和消息识别码message来确定由哪个窗口中的哪一段消息处理代码响应这个消息。Win
19、dows系统预先定义了绝大多数的消息,例如WM_CREATE、WM_DESTROY等。第27页/共86页28消息与消息循环2消息循环处理机制Windows系统为每个应用程序都建立了一个消息队列(message queues)。在程序运行过程中如果发生了一个事件,Windows会把这个事件所对应的消息送入消息队列等待使用。应用程序通过GetMessage函数从消息队列中获取消息,并利用GetMessage函数的返回值形成一个消息循环,从而可以不断从消息队列中获取消息。第28页/共86页29消息与消息循环 Windows系统会根据消息中的hwnd找到应该接收消息的程序窗口,并根据窗口句柄找到该窗口
20、的窗口过程WndProc(window procedure),以消息作为参数调用该函数。在WndProc函数中,根据消息标识message执行该消息所对应的代码,对消息进行处理。处理完成后,只要该消息不是终止应用程序消息,就会立即返回到消息循环,以等待获取下一个消息。Windows应用程序就是这样周而复始进行消息循环,直到发出终止应用程序的WM_QUIT消息为止,例如单击窗口的关闭按钮。第29页/共86页30消息与消息循环从上述消息处理机制可以看到,Windows程序分为两部分:一个是以消息循环为主的获取和发送消息,另一个是专门处理消息的WndProc函数。Windows消息处理流程如图所示。
21、由于Windows是多任务操作系统,因此Windows会根据实际的消息性质来调度消息究竟发送到哪个程序进程的哪个窗口上。第30页/共86页31消息与消息循环图13.6 Windows消息处理流程第31页/共86页32消息与消息循环3消息源Windows程序的消息来源有四种。(1)硬件事件:包括键盘和鼠标的输入。这类消息首先放在系统消息队列中,然后由Windows将它们送入应用程序消息队列中,由应用程序来处理消息。第32页/共86页33消息与消息循环(2)控件消息:用来与Windows的控件对象,例如列表框、按钮、复选框等进行双向通信,当用户在列表框中改动当前选择或改变了复选框的状态时发出此类消
22、息。这类消息一般不经过应用程序消息队列,而是直接发送到控件对象上去。(3)系统消息:对程序化的事件或系统时钟中断作出反应。一些系统消息,象DDE消息(动态数据交换消息)要通过Windows的系统消息队列,而有的则不通过系统消息队列而直接送入应用程序消息队列,例如创建窗口WM_CREATE消息。第33页/共86页34消息与消息循环(4)用户消息:程序员使用RegisterWindowMessage函数自定义并在应用程序中主动发出的消息,一般由应用程序的某一部分内部处理。第34页/共86页35消息与消息循环图13.7 Windows消息源第35页/共86页36消息与消息循环进程发送消息有两个API
23、函数:PostMessage和SendMessage。PostMessage函数将消息存放在消息队列中,该消息不一定立刻处理;SendMessage直接发送消息到消息循环中并及时处理。第36页/共86页37资源与资源文件在Windows应用程序中有一些特殊数据,例如用户界面上的菜单、图标、位图等。这些数据具有一定的独立性,程序不是在任何时候都要用到它们;它们存放在可执行文件中,能够避免程序拥有大量分散文件。Windows将这些数据称为资源。第37页/共86页38资源与资源文件简单地说,资源就是一种可供Windows应用程序使用,可单独编辑并动态加载的数据。所谓单独编辑是指利用软件工具可以直接编
24、辑可执行文件里面的资源数据,无需重新编译程序就能够修改程序用到的诸如菜单之类的内容;所谓动态加载是指资源不像程序中的静态数据(如全局变量)那样在程序刚开始运行即装入到内存中,而是在必需时才加载到内存中。第38页/共86页39资源与资源文件Windows资源有菜单、图标、位图、光标、对话框、工具栏、快捷键、字符串、自定义资源等类型。资源是由RC资源描述文件定义的,经编译后转换成二进制数据存储在可执行文件中。应用程序通过API函数将其动态加载,通过资源标识区分不同的资源。第39页/共86页40资源与资源文件1资源头文件为了区分不同的资源,一个应用程序中相同类型的资源必须有唯一的标识。这些标识实际上
25、是符号常量,其定义形式为:例如1000可以同时作为菜单、图标的资源标识值,但两个菜单的资源标识值不能相同。#define 资源标识符资源标识符 资源标识值资源标识值第40页/共86页41资源与资源文件由于资源标识既出现在资源描述文件中(定义资源必须有标识),又出现在程序文件中(加载资源必须指明标识),因此在程序的工程项目中一般将所有资源标识定义在资源头文件resource.h中,凡是用到资源标识的地方都包含这个头文件。第41页/共86页42资源与资源文件表13-6 资源标识符前缀标识前缀标识前缀用途用途标识前缀标识前缀用途用途IDM_菜单命令菜单命令IDB_位图位图ID_或或IDC_ 对话框中
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 界面 编程 基础知识
限制150内