您好,欢迎访问三七文档
1第14章标准库Windows程序设计1、Windows编程的基本概念2、Windows中的数据类型3、消息驱动与消息循环4、资源与资源文件C++程序设计313.2界面编程►人机界面HCI(human-computerinterface)又称用户界面UI(userinterface),是人与计算机之间传递、交换信息的媒介和对话接口,是计算机系统的重要组成部分。由于大多数应用程序是以用户界面为框架的,因此界面编程是软件开发的核心编程之一。413.2界面编程►用户界面的设计与操作系统平台有关,操作系统界面一般有两种:►①命令行界面CLI(commandlineuserinterface),例如DOS;►②图形用户界面GUI(graphicaluserinterface),例如Windows。513.2界面编程►早期的计算机普遍使用命令行界面,人机操作的特点是文本显示和命令输入。时至今日,命令行界面主要用在系统管理、远程维护、语言处理等系统软件中,因而命令行界面也称为控制台界面,本书前面章节的程序都是命令行程序。►图形用户界面是目前操作系统广泛使用的人机界面。人机操作的特点是图形显示和交互图形化,与命令行界面相比,图形用户界面对于使用者来说在视觉上更易于接受,操作上更简便。►本节介绍Windows系统下的图形用户界面编程技术。613.2.1Windows编程的基本概念►Windows应用程序的一个突出特点是它有一个美观的图形用户界面——窗口。窗口中可以包含标题栏、菜单、工具条、状态栏、滚动条等,对话框中还包含类型不同的子控件,例如按钮、复选框、列表框、组合框、编辑框等。窗口、对话框、图形元素与键盘和鼠标的配合,方便了用户对应用程序的操作。713.2.1Windows编程的基本概念►Windows应用程序的界面编程,即是设计满足要求的窗口程序。简单的Windows应用程序只有一个窗口,而复杂的Windows应用程序有多个窗口。►Windows运行机制的核心是动态链接,应用程序在运行时使用动态链接库,调用Windows提供的系统功能。Windows为程序员提供了几千个函数,称为WindowsAPI函数,用于实现用户界面和显示文字和图形等。813.2.1Windows编程的基本概念►Windows编程有多种技术,其中使用C语言和调用WindowsAPI函数被称作SDK编程方法,它今天依然是编写Windows程序的有效方法。自从出现面向对象程序设计方法以来,Windows程序结构和开发工具发生了巨大的变化,例如MFC(MicrosoftFoundationClasses)、VisualBasic、C#等。由于这些面向对象且可视化的开发工具能大幅提高Windows程序的开发效率,因而得到了广泛应用。但无论如何,掌握SDK编程方法是必要的。913.2.1Windows编程的基本概念►编写Windows程序,需要在程序源文件开始位置包含头文件:►windows.h是主要的包含文件,它包含了其他Windows头文件。这些头文件定义了Windows的函数原型、数据类型、数据结构、宏定义和预定义符号常量,是Windows程序开发文件中的重要组成部分。有兴趣的读者可以阅读这些头文件的细节,对提高Windows编程水平有很大帮助。#includewindows.h//Windows头文件1013.2.1Windows编程的基本概念►Windows编程涉及大量API技术文档信息,可以通过安装MSDN得到联机帮助。初学Windows编程的人面对Windows庞大的知识系统往往茫然不知所措,实际上它是非常有规律的:1113.2.1Windows编程的基本概念►①通过掌握Windows的基本数据定义和数据类型奠定编程基础;►②通过详细分析Windows编程结构了解其编程规律;►③通过构造和使用通用的编程框架形成编程模板,尽快上手;►④通过研究API文档的分类特点学会快速查阅需要的信息;►⑤了解、熟悉和模仿Windows的重要编程习惯,如命名时的“见其名知其意”。1213.2.2数据定义与数据类型►Windows定义了若干实用的宏,例如:#defineTRUE1#defineFALSE0#defineCALLBACK__stdcall#defineWINAPI__stdcall#defineAPIENTRYWINAPI#defineFARfar#defineCONSTconst#defineLOWORD(x)((WORD)(x))#defineHIWORD(x)((WORD)(((DWORD)(x)16)&0xFFFF))1313.2.2数据定义与数据类型►其中__stdcall表示PASCAL调用约定,被调函数采用自右向左的顺序参数入栈,函数自己在退出时清空堆栈;非__stdcall声明为C调用约定,被调函数采用自右向左的顺序参数入栈,由调用者清空堆栈;►CALLBACK表示回调函数,WINAPI表示WindowsAPI函数;far表示32位远指针;►LOWORD(x)取x的低16位值,HIWORD(x)取x的高16位值。1413.2.2数据定义与数据类型►为了提高程序的可读性和兼容性,Windows建立了完整的数据类型体系,称为Win32应用程序接口数据类型。常用的Windows数据类型见表13-3。1513.2.2数据定义与数据类型表13-3常用的Windows数据类型Windows数据类型C语言类型含义BOOLint逻辑类型(取值为TRUE或FALSE)BYTEunsignedchar字节型CHARcharANSI字符COLORREFunsignedlong颜色值,分红、绿、蓝(RGB)字节DWORDunsignedlong无符号长整型INTint32位整型LONGlong32位长整型LPARAMlongLONG型消息参数LPCSTRCONSTCHAR*只读型8位ANSI字符串的指针LPCTSTRLPCWSTR/LPCSTRLPCWSTR或LPCSTRLPCWSTRCONSTWCHAR*只读型16位Unicode字符串的指针1613.2.2数据定义与数据类型续表13-3常用的Windows数据类型Windows数据类型C语言类型含义LPDWORDDWORD*DWORD的指针LPSTRCHAR*8位ANSI字符串的指针LPTSTRLPWSTR/LPSTRLPWSTR或LPSTRLPWSTRWCHAR*16位ANSI字符串的指针LPVOIDvoid*void的指针LRESULTlong消息处理结果值TCHARWCHAR/CHARWCHAR或CHARUINTunsignedint无符号INTVOIDvoidvoidWCHARwchar_t16位Unicode字符WORDunsignedshort16位无符号整型1713.2.2数据定义与数据类型续表13-3常用的Windows数据类型Windows数据类型C语言类型含义WPARAMunsignedintWORD型消息参数1813.2.2数据定义与数据类型►在Windows应用程序中,会有许多诸如窗口、按钮、滚动条、设备、控件或者文件等复杂数据结构的不同对象和同类对象中的不同实例。为了在程序中区分和使用它们,需要对它们进行标识。有别于普通变量的标识,Windows将这些对象的标识称为句柄(handle)。句柄是Windows编程的基础,一个句柄能够唯一区别Windows正在使用的对象或实例。应用程序几乎总是通过调用一个API函数来获得一个句柄,之后其他的API函数就可以使用该句柄,以引用相应的对象的信息。常用的Windows句柄类型见表13-4。1913.2.2数据定义与数据类型表13-4常用的Windows句柄类型Windows句柄类型C语言类型含义HANDLEvoid*通用对象句柄HACCELHACCEL__结构体指针快捷键列表句柄HBITMAPHBITMAP__结构体指针位图句柄HBRUSHHBRUSH__结构体指针画刷句柄HCURSORHICON__结构体指针光标句柄HDCHDC__结构体指针设备场境(DC)句柄HFILEint文件句柄.HFONTHFONT__结构体指针字体句柄HGDIOBJvoidnear*GDI对象句柄HGLOBALvoid*全局内存块句柄2013.2.2数据定义与数据类型续表13-4常用的Windows句柄类型Windows句柄类型C语言类型含义HICONHICON__结构体指针图标句柄HINSTANCEHINSTANCE__结构体指针实例句柄HMENUHMENU__结构体指针菜单句柄HMODULEHINSTANCE__结构体指针模块句柄。HPALETTEHPALETTE__结构体指针调色板句柄HPENHPEN__结构体指针画笔句柄HRGNHRGN__结构体指针区域句柄HRSRCHRSRC__结构体指针资源句柄HWNDHWND__结构体指针窗口句柄2113.2.2数据定义与数据类型►Windows还定义了一些有用的结构体及结构体指针类型,例如点的坐标:typedefstructtagPOINT{LONGx;LONGy;}POINT,*PPOINT,FAR*LPPOINT;2213.2.2数据定义与数据类型►宽度和高度:typedefstructtagSIZE{LONGcx;LONGcy;}SIZE,*PSIZE,*LPSIZE;2313.2.2数据定义与数据类型►矩形框:typedefstructtagRECT{LONGleft;LONGtop;LONGright;LONGbottom;}RECT,*PRECT,FAR*LPRECT;typedefconstRECTFAR*LPCRECT;2413.2.2数据定义与数据类型►一般地,Windows自定义数据类型、句柄类型和宏定义的关键字都是大写。编写Windows应用程序时,程序员偏爱使用“匈牙利表示法”的变量命名约定,即变量名以一个或多个小写字母为前缀,这些字母表示变量的数据类型。表13-5列出了在本书中经常使用的变量前缀。2513.2.2数据定义与数据类型表13-5常用变量前缀前缀数据类型前缀数据类型前缀数据类型ccharnshortiintx,yx和y坐标cx,cyx长度和y长度bBOOLfint,代表flagwWORDlLONGdwDWORDfnfunction函数sstringsz以'\0'结尾的字符串h句柄p,lp指针例如定义C语言字符串,在Windows程序中会这样写:charszMessage[200];2613.2.3消息与消息循环►1.事件与消息►命令行界面程序是过程式的,即程序按顺序调用函数直至运行结束。图形用户界面程序是事件驱动式的,即程序启动并创建程序窗口之后,随即进入一个等待状态(称为消息循环),直到接收到一个事件(称为消息),例如键盘输入、鼠标单击等,程序脱离等待状态对事件进行相应的处理(称为消息处理或响应消息),处理完成后又进入等待状态。2713.2.3消息与消息循环►为了描述事件的各种信息,Windows定义了一个消息(message)类型如下:typedefstructtagMSG{HWNDhwnd;//产生消息的窗口句柄UINTmessage;//消息的标识码WPARAMwParam;//消息附加信息1LPARAMlParam;//消息附加信息2DWORDtime;//消息进入消息队列的时刻POINTpt;//发送该消息时光标的屏幕位置}MSG,*PMSG,FAR*LPMSG;2813.2.3消息与消息循环►当Windows发生某个事件时,Windows系统会把该事件的相关信息填写到MSG结构的各个成员中,并设法把这个消息发送到应用程序中。应用程序根据消息中的窗口句柄hwnd和消息识别码message来确定由哪个窗口中的哪一段消息处理代码响应这个消息。►Windows系统预先定义了绝大多数的消息,例如WM_CREATE、WM_DESTROY等。2913.2.3消息与消息循环
本文标题:界面编程基础知识.
链接地址:https://www.777doc.com/doc-2163462 .html