windows窗口程序基础.ppt

上传人:牧羊曲112 文档编号:6523745 上传时间:2023-11-08 格式:PPT 页数:75 大小:586KB
返回 下载 相关 举报
windows窗口程序基础.ppt_第1页
第1页 / 共75页
windows窗口程序基础.ppt_第2页
第2页 / 共75页
windows窗口程序基础.ppt_第3页
第3页 / 共75页
windows窗口程序基础.ppt_第4页
第4页 / 共75页
windows窗口程序基础.ppt_第5页
第5页 / 共75页
点击查看更多>>
资源描述

《windows窗口程序基础.ppt》由会员分享,可在线阅读,更多相关《windows窗口程序基础.ppt(75页珍藏版)》请在三一办公上搜索。

1、Windows 应用程序基础,可视化开发系统集成了一系列系统可用资源和开发工具,一、Windows编程基础,采用交互式方法时,可视化开发平台给出了许多选用的对象,程序员可选择所需对象并确定其属性,由此搭建起应用程序的“大框架”,并可根据需要进一步编写必要的细节代码段,最后构成完整的应用程序,编写Windows程序相当一部分工作是在创建对象和为对象属性赋值,对象特征:具有规范形态和操作模式,API,API函数的功能,利用Windows API函数编写Windows应用程序必须首先了解以下内容:(1)窗口的概念(2)事件驱动的概念(3)句柄(4)消息,其它概念,图形设备接口GDI基于资源的程序设计

2、动态链接库KERNAL32.DLL存储器 任务 资源管理等windows核心功能 GDI32.DLL用户界面和图形绘制,包括位图 元文件 字体 设备描述表等 USER32.DLL窗口管理,包括消息 菜单 光标 计时器 以及其它与控制窗口显示相关的一些功能,一个应用程序的窗口一般包含下列组成部分:,1.窗口,编写一个Windows应用程序首先应创建一个或多个窗口,随后应用程序的运行过程即是窗口内部、窗口与窗口之间、窗口与系统之间进行数据处理与数据交换的过程。,应用程序与用户之间交互的接口环境,系统管理应用程序的基本单位,Win应用程序基本的操作单元,Windows程序设计是针对事件或消息的处理进

3、行。,消息是描述事件发生的信息(如按下鼠标或键盘),事件驱动编程方法对于编写交互式程序很有用处,它避免了死板的操作模式。,Windows程序的执行顺序取决于事件发生的顺序,程序的执行顺序是由顺序产生的消息驱动的,但是消息的产生往往并不要求有次序之分。,2.事件驱动,常用句柄类型及其说明,应用程序通过句柄访问相应的对象信息,HWND窗口句柄HDC设备环境句柄HBITMAP位图句柄HCURSOR光标句柄HICON图标句柄HFONT字体句柄HMENU菜单句柄HPEN画笔句柄HFILE文件句柄HBRUSH画刷句柄HINSTANCE当前实例句柄,3.句柄,Windows应用程序利用Windows消息(M

4、essage)与应用程序及系统进行信息交换。,typedef struct tagMSG HWND hwnd;窗口句柄,为null,则可检索所有驻留在消息队列中的消息 UINT message;消息值,由Windows.h头文件中的宏定义来标识 WPARAM wParam;包含有关消息的附加信息,不同消息其值有所不同 LPARAM lParam;DWORD time;指定消息送至队列的时间 POINT pt;指定消息发送时屏幕光标的位置,其数据类型POINT也是一个结构体MSG;,附加信息与具体消息号的值有关,在Win中消息用结构体MSG表示,typedef struct tagPOINT L

5、ONG x;LONG y;POINT;,4.消息,VC中存在几种系统定义的消息分类,不同的前缀符号经常用于消息宏识别消息附属的分类,系统定义的消息宏前缀如下:,BM表示按钮控制消息CB表示组合框控制消息DM表示默认下压式按钮控制消息EM表示编辑控制消息LB表示列表框控制消息SBM表示滚动条控制消息WM表示窗口消息,窗口管理消息初始化消息输入消息系统消息剪贴板消息控制处理消息控制通知消息滚动条通知消息非用户区消息MDI消息DDE消息应用程序自定义的消息,Windows编程常用消息,windows消息类型,在Windows中,消息有以下三种类型:(1)标准Windows消息:指以WM_为前缀的那些

6、消息(除了WM_COMMAND),如窗口移动消息WM_MOVE,窗口大小改变消息WM_SIZE,此外,如程序启动或退出,窗口创建和关闭等等。,(2)控件通知消息:由编辑框,列表框等控件或子窗口发给其父窗口的通知消息,以WM_COMMAND为消息名,在消息中包含有控件通知代码,以区分具体的控件通知消息。,(3)命令消息:命令消息也以WM_COMMAND为消息名,在消息中包含有命令的标识符(ID),以区分具体的命令。命令消息的来源是以下三种用户接口对象:菜单:用户选择某菜单项,要产生相应的命令消息。工具栏:用户按下某工具栏按钮产生相应的命令消息。加速键:用户在键盘上按下了定义的加速键也将产生相应的

7、命令消息。,其它自定义消息,其它自定义消息如网络消息,文件读写消息,其它外部设备状态消息等,Windows的消息系统是由3个部分组成的:消息队列。Windows能够为所有的应用程序维护一个消息队列。应用程序必须从消息队列中获取 消息,然后分派给某个窗口。消息循环。通过这个循环机制应用程序从消息队列中检索消息,再把它分派给适当的窗口,然 后继续从消息队列中检索下一条消息,再分派给适当的窗口,依次进行。窗口过程。每个窗口都有一个窗口过程来接收传递给窗口的消息,它的任务就是获取消息然后 响应它。窗口过程是一个回调函数;处理了一个消息后,它通常要返回一个值给Windows。,消息从产生响应的5个步骤,

8、1)系统中发生了某个事件。2)Windows把这个事件翻译为消息,然后把它放到消息队列中。3)应用程序从消息队列中接收到这个消息,把它存放在TMsg记录中。4)应用程序把消息传递给一个适当的窗口的窗口过程。5)窗口过程响应这个消息并进行处理。步骤3和4构成了应用程序的消息循环,Windows消息控制中心一般是三层结构,其顶端就是Windows内核。Windows内核维护着一个消息队列,第二级控制中心从这个消息队列中获取属于自己管辖的消息,后做出处理,有些消息直接处理掉,有些还要发送给下一级窗体(Window)或控件(Control)。第二级控制中心一般是各Windows应用程序的Applica

9、tion对象。第三级控制中心就是Windows窗体对象,每一个窗体都有一个默认的窗体过程,这个过程负责处理各种接收到的消息。,此外,相似的消息还有:WM_LBUTTONUP:放开鼠标左键时产生;WM_RBUTTONDOWN:单击鼠标右键时产生;WM_RBUTTONUP:放开鼠标右键时产生;WM_LBUTTONDBLCLK:双击鼠标左键时产生;WM_RBUTTONDBLCLK:双击鼠标右键时产生。,二、Windows应用程序常用消息1.WM_LBUTTONDOWN:产生单击鼠标左键的消息,系统键是指实现系统操作的组合键,例如Alt与某个功能键的组合以实现系统菜单操作等。,wParam 为按键的A

10、SCII码1Param 与WM_KEYDOWN的相同,wParam:按下键的虚拟键码,用以标识按下或释放的键1Param:记录了按键的重复次数、扫描码、转移代码、先前键的状态等信息。,相似的消息还有WM_KEYUP,在放开非系统键时产生,如F1的虚拟键码在Windows.h文件中定义为VK_F1,2.WM_KEYDOWN:按下一个非系统键时产生的消息3.WM_ CHAR:按下一个非系统键时产生的消息,wParam:未用1Param:包含一个指向CREATESTRUCT数据结构的指针,wParam和1Param均未用。,wParam和1Param均未用。,4.WM_CREATE:由CreateW

11、indow函数发出的消息5.WM_CLOSE:关闭窗口时产生的消息6.WM_DESTROY:由DestroyWiodow函数发出的消息,7.WM_QUIT:由PostQuitMessage函数发出的消息退出应用程序时发出的消息wParam:含退出代码,标识程序退出运行时的有关信息1Param:未用8.WM_PAINT,过程驱动方法计算平均成绩,事件驱动方法计算平均成绩,三、Windows中的事件驱动程序设计,Windows句柄,系统中对象的唯一标识,系统动态分配和维护,一个对象使用一个句柄,销毁后这个句柄值可能用来标识其它完全不同的一个句柄句柄类型有很多,如HWND,HBRUSH,HICON等

12、。,一个完整的Windows应用程序通常由五种类型的文件组成。,1.C语言源程序文件2.头文件3.模块定义文件4.资源描述文件5.项目文件,四、Windows应用程序组成及编程步骤 1.应用程序的组成,1.所有应用程序的入口,类似Main函数,2.完成一系列的定义和初始化,并产生消息循环,WinMain和WndProc是Windows应用程序的主体,2.源程序组成结构,(1)WinMain函数,三个基本的组成部分:函数说明、初始化和消息循环,WinMain函数,注意!Win是多任务管理的,同一应用程序的多个窗口可能会同时存,Win系统对每个窗口的执行称为一个实例,并用一个实例句柄来唯一标识,(

13、2)初始化,i.窗口类定义,通过给窗口类数据结构WNDCLASS赋值完成,该数据结构中包含窗口类的各种属性。窗口类定义常用以下函数:,WNDCLASS定义,typedef struct _WNDCLASS UINT style;WNDPROC lpfnWndProc;int cbClsExtra;int cbWndExtra;HINSTANCE hInstance;HICON hIcon;HCURSOR hCursor;HBRUSH hbrBackground;LPCTSTR lpszMenuName;LPCTSTR lpszClassName;WNDCLASS,*LPWNDCLASS,WND

14、CLASS结构,WNDCLASS是一个由系统支持的结构,用来储存某一类窗口的信息,如ClassStyle,消息处理函数,Icon,Cursor,背景Brush等。也就是说,CreateWindow只是将某个WNDCLASS定义的窗体变成实例。要得到某一窗口的WNDCLASS数据,可以用GetClassLong();RegisterClass()就是在系统注册某一类型的窗体。也就是将你提供的WNDCLASS数据注册为一个窗口类,在WNDCLASS.lpszClassName中定义该WNDCLASS的标识,无论CreateWindow或CreateWindowEx创建的窗口都必须对应一个WNDCL

15、ASS,但一个WNDCLASS可以有多个窗口对象。,WNDCLASS,有一些系统预定义的窗口类,如:ClassName=_T(BUTTON or COMBOBOX or EDIT or LISTBOX or MDICLIENT or SCROLLBAR or STATIC)要用这些窗体,直接用CreateWindow创建相应对象就是了。要得到某一窗口的窗口类,可以用GetClassName();WNDCLASS中的回调函数是窗体的消息处理函数:LRESULT CALLBACK WndProc(HWND hwnd,UINT msg,WPARAM wParam,LPARAM lParam),分量解

16、释-style,style:指定类风格。这些风格可通过按位或操作组合起来。风格如下:CS_BYTEALIGNCLIENT:在字节边界上(在x方向上)定位窗口的用户区域的位置 CS_BYTEALIGNWINDOW:在字节边界上(在x方向上)定位窗口的位置 CS_CLASSDC:该窗口类的所有窗口实例都共享一个窗口类DC CS_DBLCLKS:允许向窗口发送双击鼠标键的消息 CS_GLOBALCLASS:当调用CreateWindow 或 CreateWindowEx 函数来创建窗口时允许它的hInstance参数和注册窗口类时传递给RegisterClass 的 hInstance参数不同。如果

17、不指定该风格,则这两个 hInstance 必须相同。CS_HREDRAW:当水平长度改变或移动窗口时,重画整个窗口 CS_NOCLOSE:禁止系统菜单的关闭选项 CS_OWNDC:给予每个窗口实例它本身的DC。注意,尽管这样是很方便,但它必须慎重使用,因为每个DC大约要占800个字节的内存。CS_PARENTDC:将子窗口的裁剪区域设置到父窗口的DC中去,这样子窗口便可以在父窗口上绘制自身。注意,这是子窗口还是从系统缓存中获取DC,而不是使用父窗口的DC。使用该风格可以提高系统性能。CS_SAVEBITS:以位图形式保存被该窗口遮挡的屏幕部分,这样当给窗口移动以后,系统便可以用该保存的位图恢

18、复屏幕移动的相应部分,从而系统不用向被该窗口遮挡的窗口发送 WM_PAINT 消息。该特性对于菜单类型的窗口比较合适,因为它通常是简短的显示一下之后便消失。设置该特性将增加显示该窗口的时间,因为它通常要先分配保存位图的内存。CS_VREDRAW:当垂直长度改变或移动窗口时,重画整个窗口,分量解释,lpfnWndProc:指向窗口过程 cbClsExtra:指定紧随在 WNDCLASS 数据结构后分配的字节数。系统将其初始化为零。cbWndExtra:指定紧随在窗口实例之后分配的字节数,系统将其初始化为零。如果应用程序正在用WNDCLASS结构注册一个在RC 资源描述文件中用CLASS指令创建的

19、对话框时,它必须设置这个字段为 DLGWINDOWEXTRA。hInstance:标识了该窗口类的窗口过程所在的模块实例的句柄,不能为NULL。hIcon:标识了该窗口类的图标。hIcon字段必须是一个图标的句柄;若hIcon字段为NULL,那么系统将提供一个默认的图标。hCursor:标识该窗口类的光标,hCursor必须是一个光标资源的句柄。若hCursor字段为NULL,则无论何时鼠标移到应用程序窗口时,应用程序必须显式设置光标形状。,LoadCursor的作用是在应用程序中加载一个窗口光标HCURSOR LoadCursor(HINSTANCE hInstance,LPCTSTR lp

20、CursorName),光标资源所在的模块句柄,NULL则使用系统预定义光标,光标资源名或系统预定义光标标识名,应用程序调用函数GetStockObject获取系统提供的背景刷HBRUSH GetStockObject(int nBrush);,hbrBackground:标识了该窗口类的背景画刷。hbrBackground字段必须是用于绘制背景的物理刷子的句柄,或者是一个颜色的值。如果给出一个颜色的值,它必须是下面列出的标准系统颜色之一(系统将对所选颜色加1)。如果给出了颜色值,它必须是转换成下列的HBRUSH类型之一的颜色:(备注)当hbrBackground字段为NULL时,每当需要绘制

21、其用户区域时,应用程序必须自己来绘制其背景。应用程序可以通过处理WM_ERASEBKGND 消息或检查由 BeginPaint 函数填写的 PAINTSTRUCT 结构的fErase 字段来确定背景什么时候需要着色。,分量解释,lpszMenuName:指向NULL结束的字符串,该字符串描述菜单的资源名,如同在资源文件里显示的名字一样。若使用一个整数标识菜单,可以使用MAKEINTRESOURCE宏。如果lpszMenuName为NULL,那么该窗口类的窗口将没有默认菜单。lpszClassName:指向NULL结束的字符串,或者是一个原型(atom)。若该参数是一个原型,它必须是一个有先前调

22、用RegisterClass或者 RegisterClassEx函数产生的类原型。类原型必须作为lpszClassName的低字,高字必须为0.若lpszClassName是一个字符串,它描述了窗口类名。这个类名可以是由RegisterClass或RegisterClassEx注册的名字,或者是任何预定义的控件类名。,ii.注册窗口类,Win系统本身提供部分预定义的窗口类,程序员也可以自定义窗口类,窗口类必须先注册后使用。窗口类的注册由函数RegisterClass()实现。RegisterClass(/wndclass为窗口类结构 RegisterClass函数的返回为布尔值,注册成功则返回

23、真,iii.创建窗口实例,创建一个窗口类的实例由函数CreateWindow()实现函数原型如下:HWND Create Window(LPCTSTR lpszClassName,窗口类名 LPCTSTR lpszTitle,窗口标题名 DWORD dwStyle,创建窗口的样式 int x,y,窗口左上角坐标 int nWidth,nHeight,窗口宽度和度高 HWND hwndParent,该窗口的父窗口句柄 HWENU hMenu,窗口主菜单句柄 HINSTANCE hInstance,创建窗口的应用程序当前句柄 LPVOID lpParam 指向一个传递给窗口的参数值的指针),iv显

24、示窗口,窗口类的显示由ShowWindow和UpdateWindow函数实现。应用程序调用ShowWindow函数在屏幕上显示窗口ShowWindow(hwnd,nCmdshow);/nCmdshow为窗口显示形式标识,显示窗口后,应用程序调用UpdateWindow更新并绘制用户区,并发出WM_PAINT消息。UpdateWindow(hwnd);,(3)消息循环,消息循环的常见格式如下:MSG Msg;while(GetMessage(,将消息的虚拟键转换为字符信息,将消息传送到指定窗口函数,将消息传递给窗口函数的相应过程处理,Windows将产生的消息,WinMain函数,WndProc

25、函数由一个或多个switch语句组成。每一条case语句对应一种消息,当应用程序接收到一个消息时,相应的case语句被激活并执行相应的响应程序模块。,3 窗口函数WndProc,窗口函数的一般形式如下:LRESULT CALLBACK WndProc(HWND hwnd,UINT messgae,WPARAM wParam,LPARAM lParam)switch(message)message为标识的消息 case break;case WM_DESTROY:PostQuitMessage(0);default:return DefWindowProc(hwnd,message,wParam

26、,lParam);return(0);,在消息处理程序段中一般都有对WM_DESTROY的处理,该消息是关闭窗口时发出的。它向应用程序发出WM_QUIT消息,请求退出处理函数:void PostQuitMessage(int nExitCode)/nExitCode为应用程序的退出代码,为未定义处理过程的消息提供默认的处理,在Windows.h中定义了Windows 应用程序中包含种类繁多的数据类型,4数据类型,MSG:包含一个消息的全部信息,是消息发送的格式,WINDCLASS:包含一个窗口类的全部信息及属性,POINT:定义了屏幕上或窗口中的一个点的X和 Y坐标,RECT:定义了一个矩形区

27、域及其左上角和右下角的坐标,几种重要的结构,5.一些重要的数据结构,MSG结构体,typedef struct tagMSG HWND hwnd;UINT message;WPARAM wParam;LPARAM lParam;DWORD time;POINT pt;MSG;,成员说明,第一个成员变量hwnd表示消息所属的窗口。我们通常开发的程序都是窗口应用程序,一个消息一般都是与某个窗口相关联的。例如,在某个活动窗口中按下鼠标左键,产生的按键消息就是发给该窗口的。在Windows程序中,用HWND类型的变量来标识窗口。第二个成员变量message指定了消息的标识符。在Windows中,消息是

28、由一个数值来表示的,不同的消息对应不同的数值。但是由于数值不便于记忆,所以Windows将消息对应的数值定义为WM_XXX宏(WM是Window Message的缩写)的形式,XXX对应某种消息的英文拼写的大写形式。例如,鼠标左键按下消息是WM_LBUTTONDOWN,键盘按下消息是WM_KEYDOWN,字符消息是WM_CHAR,等等。在程序中我们通常都是以WM_XXX宏的形式来使用消息的。,分量说明,第三、第四个成员变量wParam和lParam,用于指定消息的附加信息。例如,当我们收到一个字符消息的时候,message成员变量的值就是WM_CHAR,但用户到底输入的是什么字符,那么就由wP

29、aram和lParam来说明。wParam、lParam表示的信息随消息的不同而不同。如果想知道这两个成员变量具体表示的信息,可以在MSDN中关于某个具体消息的说明文档查看到。读者可以在VC+的开发环境中通过goto definition查看一下WPARAM和LPARAM这两种类型的定义,可以发现这两种类型实际上就是unsigned int和long。最后两个变量分别表示消息投递到消息队列中的时间和鼠标的当前位置。,模块定义(.def)文件,模块定义(.def)文件为链接器提供有关被链接程序的导出、属性及其他方面的信息。生成 DLL 时,.def 文件最有用。由于存在可代替模块定义语句使用的链

30、接器选项,通常不需要.def 文件。也可以将 _declspec(dllexport)用作指定导出函数的手段。在链接器阶段可以使用/DEF(指定模块定义文件)链接器选项调用.def 文件。如果生成的.exe 文件没有导出,使用.def 文件将使输出文件较大并降低加载速度。,资源描述文件,Windows应用程序中,图标、菜单、畏途、图标、工具条、对话框等是以资源的形式存在的。开发人员也可以自定义资源类型。如果一个程序使用了资源,那么它在构建时需要对资源进行编译。程序所使用的资源会在资源脚本文件(*.rc)中进行描述编写,编译时,资源编译器会将*.rc文件编译为可链接的.res文件。(资源中可以包

31、括字符串),【例3-1】创建应用程序框架。本例的目的在于说明创建Windows应用程序的方法及过程,#include/包含应用程序中所需的数据类型和数据结构的定义LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);/窗口函数说明/-以下初始化窗口类-int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInst,LPSTR lpszCmdLine,int nCmdShow)HWND hwnd;MSG Msg;WNDCLASS wndclass;char lpszClassName=窗口;/窗口

32、类名 char lpszTitle=My_Windows;/窗口标题名,五、应用程序举例,/窗口类的定义wndclass.style=0;/窗口类型为默认类型wndclass.lpfnWndProc=WndProc;/定义窗口处理函数wndclass.cbClsExtra=0;/窗口类无扩展wndclass.cbWndExtra=0;/窗口实例无扩展wndclass.hInstance=hInstance;/当前实例句柄wndclass.hIcon=LoadIcon(NULL,IDI_APPLICATION);/窗口的最小化图标为默认图标wndclass.hCursor=LoadCursor(

33、NULL,IDC_ARROW);/窗口采用箭头光标wndclass.hbrBackground=GetStockObject(WHITE_BRUSH);/窗口背景为白色wndclass.lpszMenuName=NULL;/窗口中无菜单wndclass.lpszClassName=lpszClassName;/窗口类名为窗口,/-以下进行窗口类的注册-if(!RegisterClass(,/-创建窗口-hwnd=CreateWindow(lpszClassName,/窗口类名lpszTitle,/窗口实例的标题名WS_OVERLAPPEDWINDOW,/窗口的风格CW_USEDEFAULT,C

34、W_USEDEFAULT,/窗口左上角坐标为默认值CW_USEDEFAULT,CW_USEDEFAULT,/窗口的高和宽为默认值NULL,/此窗口无父窗口NULL,/此窗口无主菜单hInstance,/创建此窗口的应用程序的当前句柄NULL/不使用该值);,/-显示窗口-ShowWindow(hwnd,nCmdShow);,/-绘制用户区-UpdateWindow(hwnd);,/-消 息 循 环-while(GetMessage(/消息循环结束即程序终止时将信息返回系统,/窗口函数LRESULT CALLBACK WndProc(HWND hwnd,UINT message,WPARAM w

35、Param,LPARAM lParam)switch(message)case WM_DESTROY:PostQuitMessage(0);default:/默认时采用系统消息默认处理函数return DefWindowProc(hwnd,message,wParam,lParam);return(0);,调用PostQuitMessage发出WM_QUIT消息,补充,WM_DESTROY是窗口函数必须处理的消息,客户端程序需求,界面:创建输入编辑框创建发送按钮将结果内容在一个区域显示,更好的方法,可视化创建对话框资源,DialobBox函数显示对话框,DialogBox(hInstance,

36、MAKEINTRESOURCE(IDD_DIALOG1),NULL,Main_Proc);/显示IDD_DIALOG1对话框 参数:hlnstance:标识一个模块的事例该模块的可执行文件含有对话框模板。IpTemplate:标识对话框模板。此参数可以是指向一个以NULL结尾的字符串的指针,该字符串指定对话框模板名,或是指定对话框模板的资源标识符中的一个整型值。如果此参数指定了一个资源标识符则它的高位字一定为零,且低位字一定含有标识符。一定用MAKEINTRESOURDE宏指令创建此值。hWndParent:指定拥有对话框的窗口。IpDialogFunc:指向对话框过程的指针(类似于WINPR

37、OC一样,一个回调函数,用来处理各类消息的),,DialogBoxParam实现,int DialogBoxParam(HINSTANCE hInstance,/handle to application instance LPCTSTR lpTemplateName,/identifies dialog box template HWND hWndParent,/handle to owner window DLGPROC lpDialogFunc,/pointer to dialog box procedure LPARAM dwInitParam/initialization value

38、);,非模态对话框,HWND CreateDialog(HINSTANCE hInstance,/handle to application instance LPCTSTR lpTemplate,/identifies dialog box template name HWND hWndParent,/handle to owner window DLGPROC lpDialogFunc/pointer to dialog box procedure);,CreateDialogParam,HWND CreateDialogParam(HINSTANCE hInstance,/handle

39、to application instance LPCTSTR lpTemplateName,/identifies dialog box template HWND hWndParent,/handle to owner window DLGPROC lpDialogFunc,/pointer to dialog box procedure LPARAM dwInitParam/initialization value);,备注:,DialogBox宏用CreateWindowEx函数创建对话框。DialogBox函数然后把一个WM_INITDIALOG消息(和一个WM-SETFONT消息,

40、如果模板指定DS_SETFONT类型)传递到对话框过程。不管模板是否指定WS_VISIBLE类型,函数显示对话框,并且使拥有该对话框的窗口(也称属主窗口)失效,且为对话框启动它本身的消息循环来检索和传递消息。当对话框应用程序调用EndDialog函数时,DialogBox函数清除对话框户止消息循环,使宿主窗口生效,且返回函数EndDialog调用中的nReSult参数。,BOOL WINAPI Main_Proc(HWND hWnd,UINT uMsg,WPARAM wParam,LPARAM lParam)switch(uMsg)case WM_INITDIALOG:return TRUE;

41、/消息已处理,不需要再调用真正的内部对话框消息处理函数case WM_COMMAND:switch(LOWORD(wParam)case IDOK:EndDialog(hWnd,1);return true;return false;/其他未处理过的消息,调用内部的消息处理函数,VC资源脚本 资源脚本,它是一个简单的文本文件,可以手工编辑,也可以让Visual C自动编辑,或者你用其它的自动编辑器编辑。无论如何,资源脚本文件要有一个.rc的扩展名。大多数的脚本文件都从定义资源行开始,最简单的资源行通常要用到资源类型,就像这样:identifier resource type filename【

42、标识符】【资源类型】【文件名称】标识符可以用两种方式表示:一种是能表示资源意思的字符串,另一种是在资源相对应的头文件中用#define定义过的数字常量。如果你选择数字常量,这通常是一个好主意,别忘了把相应的头文件加入到你的资源脚本,对话框资源模板的实例,在这个资源脚本文件中,对话框的定义分成如下几个部分:对话框模板名称或者标识符:IDD_ABOUTDLG为对话框标识符。DIALOGEX关键字。对话框的位置及外型尺寸:30,30,210,125,分别为对话框显示时,其左上角在程序窗口中的位置(30,30)和对话框的尺寸(210,125)。样式属性选项:设计对话框时使用的属性对话框,包含了这些样式

43、的设定,如WS_POPUP,WS_CAPTION等。对话框标题:“关于程序.”。字体属性:对话框中所有文本使用的字体为“华文隶书”,其大小为12磅。控件属性设置:关键字BEGIN和END之间是对话框包含的控件。每个控件前三个字段分别是控件类型标识符、控件相关的文本和控件标识符,对话框中常用的控件及说明:,控件标识符说 明控件标识符说 明CHECKBOX复选框控件LISTBOX列表框控件COMBOBOX组合框控件LTEXT文本左对齐的静态控件CTEXT文本居中的静态控件PUBSHBUTTON按钮控件DEFPUSHBUTTON默认按钮控件RADIOBUTTON单选按钮控件EDITTEXT编辑框控件

44、RTEXT文本右对齐的静态控件GROUPBOX组控件SCROLLBAR滚动条控件ICON图标,属静态控件,资源与资源标识,资源是Windows编程中不可缺少的重要组成部分。Visual C+6.0将Windows应用程序中经常用到的菜单、加速键、工具栏、对话框、图标、光标、字符串等都视为“资源”,并将其单独存放在一个资源文件中。每个资源都由相应的标识符来区分,并且可以象变量一样进行赋值。资源的分类资源的分类资源的分类资源的分类 建一个单文档应用程序名为:对话框,然后将项目工作区切换到“ResourceView”页面,展开所有的节点。,一个单文档应用程序所使用的资源可分为以下7类:(1)快捷键列

45、表(Accelerator):快捷键列表为一系列组合键的集合,被应用程序用于引发一个动作。该列表一般与菜单命令相关联,用于代替鼠标操作。(2)对话框(Dialog):为含有按钮、列表框、编辑框等各种控件的窗口。(3)图标(Icon):图标是代表应用程序显示在Windows桌面上的位图,它同时有32*32像素和16*16像素2种规格。(4)菜单(Menu):用户通过菜单可以完成应用程序的大部分操作。(5)字串表(String Table):是应用程序使用的全局字符串或其它标识符。(6)工具栏按钮(Toolbar):是由一系列具有相同尺寸的位图组成的,它通常与一些菜单命令相对应,用于提高用户的工作

46、效率。(7)版本信息(Version):版本信息包含应用程序的版本、用户注册码等相关信息。,除了这些常用资源类别外,Visual C+6.0应用程序中还可有鼠标、HTML等,也可以自己添加新的资源类别。,ID资源标识符资源标识符资源标识符资源标识符。一个资源类别都有 一个或多个相关资源,每一个资源均是由标 识符来定义的。当添加或创建一个新的资源 或资源对象时,系统会为其提供默认的名称 并赋值,如:IDR_MAINFRAME等,该定义 保存在Resource.h文件中;当然,用户也可 重新为标识符命名。在Visual C+6.0中,源 程序引用资源和其他用户定义的对象是通过 标识符来进行的。资源

47、标识符的名称规则和其 他标识符相同,但要注意,资源标识符不区分 大小写字母,字符个数不得超过247个。一般 情况下,不同的资源使用不同的资源标识符 前缀。,资源标识符定义的常用前缀,资源标识符aw2s,资源标识符都有一个整数与之对应,取值范围为065535。系统为创建的标识符自动赋值,用户也可以修改这些值。在同一个程序项目中,资源标识符名称不能一样,不同的标识符的值也不能一样/Resource.h/Used by 模态对话框.rc#define IDD_ABOUTBOX 100#define IDR_MAINFRAME 128#define IDR_MYTYPE 129#define IDD_MYDIALOG 130/是新设置的模态对话框的ID值#define ID_MENUITEM32771 32771#define ID_PUPDIALOG 32773 选中顶层菜单的ViewResource Symbols可以打开“Resource Symbols”对话框,

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号