第05章 Windows操作系统中的窗口类

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

1第5章Windows操作系统中的窗口类•本章对窗口类作了介绍和分析,例举了多种形式的窗口类,对窗口类和窗口类结构在概念上的联系和区别作了介绍,这是学生和自学人员容易搞错的。•对填写窗口类条款所经常要遇到的四个函数作了介绍.在对窗口类条款作深入介绍的基础上.对应用程序的其他部分,如窗口的风格,窗口的显示,消息循环等,在第四章的基础上本章也都作了补充。25.1窗口类概述•不管建立窗口的方法如何,建立窗口之前,都要准备好窗口类•系统窗口类:应用程序可以用操作系统为用户准备好的现成的窗口类•用户定制窗口类:也可以是系统为用户准备好的窗口类的结构,由用户填写窗口类结构的各项数据再注册而形成的窗口类–用户定制的窗口类,必须先要向Windows操作系统注册才能使用35.1窗口类概述1、系统预定义窗口类——系统全局窗口类–BUTTON–COMBOBOX组合框控件–EDIT编辑框–LISTBOX–SCROLLBAR滚动条–STATIC静态文本•要使用这些窗窗口,直接用CreateWindow创建相应对象就是了。CreateWindow(BUTTON,Click,WS_CHILD,20,20,100,35,hwnd,0,0,NULL);Click45.1窗口类概述2、用户定制窗口类形成过程:–声明一个窗口类结构变量•WNDCLASSwndclass;–给窗口类变量各数据项(元素)赋值wndclass.hIcon=LoadIcon(NULL,IDI_APPLICATION);//载入图标wndclass.hCursor=LoadCursor(NULL,IDC_ARROW);//载入鼠标–调用函数RegisterClass()注册窗口类RegisterClass(&wndclass));55.2几种窗口类结构介绍5.1.1、Windows95中的窗口类结构structWNDCLASSEX{UINTcbSize;//扩展窗口类变量的大小UINTstyle;//窗口类的式样,式样决定窗口的行为WNDPROClpfnWndProc;//指向依此窗口类所建窗口的窗口函数的指针intcbClsExtra;//附加项intcbWndExtra;//附加项HINSTANCEhInstance;//指向应用程序实例的代号HICONhIcon;//指向依此窗口类所建窗口中要引入的图标HCURSORhCursor;//指向依此窗口类所建窗口中要引入的鼠标光标HBRUSHhbrBackground;//指向依此窗口类所建窗口的底色LPCSTRlpszMenuName;//指向依此窗口类所建窗口相关联的菜单名称LPCSTRlpszClassName;//窗口类名称HICONhIconSM;//指向依此窗口类所建窗口要引入的小图标};65.2几种窗口类结构介绍5.1.2、窗口类条款的补充说明1、UINTcbSize;–扩展窗口类变量的大小2、WNDPROClpfnWndProc;–指向依此窗口类所建窗口的窗口函数的指针–LRESULTCALLBACKWndProc(HWNDhwnd,UINTmessage,WPARAMwParam,LPARAMlParam)•#defineLRESULTLONG•#defineCALLBACKWINAPI75.2几种窗口类结构介绍5.1.2、窗口类条款的补充说明3、LPCSTRlpszClassName;–用户的应用程序使用的窗口类名称–是一个指向字符串的指针,或者说它的值是字符串在内存的地址,这个字符串就是窗口类的名字–给该变量进行赋值的方式为:wndclass.lpszClassName=MyGod!;或charszClsNm[]=MyGod!;wndclass.lpszClassName=szClsNm;85.2几种窗口类结构介绍5.1.2、窗口类条款的补充说明4、HINSTANCEhInstance;–存放应用程序实例其本身的句柄(代号)一般来说,程序在调用函数时如果会返回一个句柄(代号),我们都应该将它们保存起来(放入某一变量里),以备后用。5、图标HICONhIcon;//指向依此窗口类所建窗口中要引入的图标HICONhIconSM;//指向依此窗口类所建窗口要引入的小图标95.2几种窗口类结构介绍5.2.3WindowsNT中的窗口类结构•WNDCLASSA和WNDCLASSW是定义在WINUSER.H头文件中的窗口类结构,•第一种是ASCII版的窗口类结构,称为WNDCLASSA(A表示ASCII码)•另一个是Unicode版的窗口类结构。105.2几种窗口类结构介绍5.2.3WindowsNT中的窗口类结构structWNDCLASSEX{UINTstyle;WNDPROClpfnWndProc;intcbClsExtra;intcbWndExtra;HINSTANCEhInstance;HICONhIcon;HCURSORhCursor;HBRUSHhbrBackground;LPCTSTRlpszMenuName;LPCTSTRlpszClassName;};115.3几个与窗口类有关的函数5.3.1LoadIcon函数此函数的用法如下:#includewinuser.hHICONWINAPILoadIcon(HINSTANCEhInstance,LPCSTRlpIconName){...}•HINSTANCEhInstance–指向用户定义图标所在的位置,即用户定义图标在哪个实例中,当它为NULL时,那么,这是系统预定义的图标•LPCSTRlpIconName–图标名,也称图标上的标签。•HICON–返回值的类型,是指向图标的指针。•返回值–LoadIcon返回的是一个指向图标的指针–如果失败,返回NULL(==0)125.3.1LoadIcon函数•LoadIcon的功能是把实例中定义的图标载入内存。LoadIcon的第一个参数是图标所在的实例代号,第二个参数是实例中指向图标的指针,即图标指针。定义值说明IDI_APPLICATION32512WINDOWS徽标IDI_HAND32513“无访问”符号IDI_QUESTION32514蓝色园上的一个问号IDI_EXCLAMATION32515黄色园上的一个黑色感叹号IDI_ASTERISK32516信息点IDI_WINLOGO32517WINDOWS徽标如果要装载自己添加的图标资源,要1、在文件中添加头文件#includeresource.h2、注意下面二种写法:LoadIcon(hInstance,MAKEINTRESOURCE(IDI_ICON1))LoadIcon(hInstance,(TCHAR*)IDI_ICON1)135.3.3LoadCursor()函数载入光标的函数如同载入图标的函数,HCURSORWINAPILoadCursor(HINSTANCEhInstance,LPCTSTRlpCursorName){......}•HINSTANCEhInstance–包含光标所在的位置,即使用的光标在哪个实例中,当它为NULL时,那么,这是系统预定义的光标•LPCTSTRlpCursorName–光标的ID名•返回–指向光标的代号–若调用失败,返回NULL。145.3.3LoadCursor()函数•Windows预定义一系列鼠标游标位图,如下所示光标值说明IDC_ARROWMAKEINTRESOURCE(32512)传统的箭头指针IDC_IBEAMMAKEINTRESOURCE(32513)I型游标IDC_WAITMAKEINTRESOURCE(32514)沙漏IDC_CROSSMAKEINTRESOURCE(32515)十字游标IDC_UPARROWMAKEINTRESOURCE(32516)垂直游标IDC_SIZEMAKEINTRESOURCE(32640)四方向箭头IDC_ICONMAKEINTRESOURCE(32641)带有白色边框的小黑方块IDC_SIZENWSEMAKEINTRESOURCE(32642)指向西北和东南的双向箭头IDC_SIZENESWMAKEINTRESOURCE(32643)指向东北和西南的双向箭头IDC_SIZEWEMAKEINTRESOURCE(32644)指向西方和东方的双向箭头IDC_SIZENSMAKEINTRESOURCE(32645)指向北方和南方的双向箭头IDC_SIZEALLMAKEINTRESOURCE(32646)四方向箭头IDC_NOMAKEINTRESOURCE(32648)斜线园IDC_APPSTARTINGMAKEINTRESOURCE(32650)标准箭头和沙漏155.3.3LoadCursor()函数如果要装载自己添加的图标资源,要1、在文件中添加头文件#includeresource.h2、注意下面二种写法:LoadIcon(hInstance,MAKEINTRESOURCE(IDI_CURSOR1))LoadIcon(hInstance,(TCHAR*)IDI_CURSOR1)165.3.4CreateSolidBrush()函数1、HBRUSHhbrBackground;•hbrBackground是指向窗口底色的指针。Windows利用代号指出属于这个窗口类的窗口的背景颜色。•Windows系统提供了几个画刷代号,每个画刷指向一种特定的颜色。画刷值说明WHITE_BRUSH0白色背景LTGRAY_BRUSH1谈灰色背景GRAY_BRUSH2灰色背景DKGRAY_BRUSH3深灰色背景BLACK_BRUSH4黑色背景NULL_BRUSH5没有背景HOLLOW_BRUSHNULL_BRUSH透明背景wndclass.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH);//背景画刷缺点:颜色品种十分有限!175.3.4CreateSolidBrush()函数2、CreateSolidBrush()函数:#includewingdi.hHBRUSHWINAPICreateSolidBrush(COLORREFcol){......}参数说明•HBRUSH新画刷的代号,如函数调用失败,返回NULL。•COLORREF颜色一个32位二进制数字,对应,红,绿,兰的组合。COLORREF颜色参考值是一个32位的数值,它由函数RGB来得到,RGB(r,g,b);CreateSolidBrush(RGB(0,255,0));//创建一个纯绿色的画刷185.3.4CreateSolidBrush()函数RGB(r,g,b);•三种基本色(红,绿,兰)中,每种颜色的浓度是通过0---255之间的一个数值来度量的•例如,要绿色窗口,窗口类数据项(条款)可以这样设置,(wcex是窗口类变量)wcex.hbrbackground=CreateSolidBrush(RGB(0,255,0));•与RGB有关的其余三个宏分别取得红色,绿色,兰色的浓度。•假如你对红色的窗口有意思,那么利用CreateSolidBrush()便可以组成红色。如下所示:wcex.hbrbackground=CreateSolidBrush(RGB(255,0,0));•CreateSolidBrush(RGB(255,0,0))是指向红色背景的指针。195.3.4CreateSolidBrush()函数RGB(r,g,b);•实用中,依据三原色利用CreateSolidBrush()函数来创造新背景颜色用户是不会感兴趣的•系统为窗口上的各种组件提供各种不同的颜色。•背景颜色可以直接借用组件的颜色,窗口的组件有:标题拦,菜单拦,滚动条,按钮类等颜色值说明COLOR_SCROLLBAR0滚动条颜色COLOR_DESKTOP1COLOR_ACTIVECAPTION2COLOR_INACTIVECAPTION3COLOR_MENU4COLOR_WINDOW5例如:Cr

1 / 20
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功