第05章 Windows操作系统中的窗口类.ppt_第1页
第05章 Windows操作系统中的窗口类.ppt_第2页
第05章 Windows操作系统中的窗口类.ppt_第3页
第05章 Windows操作系统中的窗口类.ppt_第4页
第05章 Windows操作系统中的窗口类.ppt_第5页
已阅读5页,还剩15页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、1,第 5 章 Windows操作系统中的窗口类,本章对窗口类作了介绍和分析,例举了多种形式的窗口类,对窗口类和窗口类结构在概念上的联系和区别作了介绍,这是学生和自学人员容易搞错的。 对填写窗口类条款所经常要遇到的四 个函数作了介绍.在对窗口类条款作深入介绍的基础上.对应用程序的其他部分,如窗口的风格,窗口的显示,消息循环等,在第四章的基础上本章也都作了补充。,2,5.1 窗口类概述,不管建立窗口的方法如何,建立窗口之前,都要准备好窗口类 系统窗口类:应用程序可以用操作系统为用户准备好的现成的窗口类 用户定制窗口类:也可以是系统为用户准备好的窗口类的结构,由用户填写窗口类结构的各项数据再注册而

2、形成的窗口类 用户定制的窗口类,必须先要向Windows操作系统注册才能使用,3,5.1 窗口类概述,1、系统预定义窗口类系统全局窗口类 BUTTON COMBOBOX 组合框控件 EDIT 编辑框 LISTBOX SCROLLBAR 滚动条 STATIC 静态文本 要使用这些窗窗口,直接用CreateWindow创建相应对象就是了。 CreateWindow( BUTTON, Click, WS_CHILD, 20, 20, 100, 35, hwnd,0,0, NULL);,Click,4,5.1 窗口类概述,2、用户定制窗口类形成过程: 声明一个窗口类结构变量 WNDCLASS wndc

3、lass; 给窗口类变量各数据项(元素)赋值 wndclass.hIcon = LoadIcon (NULL, IDI_APPLICATION) ;/载入图标 wndclass.hCursor= LoadCursor (NULL, IDC_ARROW) ;/载入鼠标 调用函数RegisterClass()注册窗口类 RegisterClass (,5,5.2 几种窗口类结构介绍,5.1.1、Windows 95 中的窗口类结构 struct WNDCLASSEX UINT cbSize; /扩展窗口类变量的大小 UINT style ; /窗口类的式样,式样决定窗口的行为 WNDPROC lp

4、fnWndProc ; / 指向依此窗口类所建窗口的窗口函数的指针 int cbClsExtra ; /附加项 int cbWndExtra ; /附加项 HINSTANCE hInstance ; / 指向应用程序实例的代号 HICON hIcon ; / 指向依此窗口类所建窗口中要引入的图标 HCURSOR hCursor ; / 指向依此窗口类所建窗口中要引入的鼠标光标 HBRUSH hbrBackground ; / 指向依此窗口类所建窗口的底色 LPCSTR lpszMenuName ; / 指向依此窗口类所建窗口相关联的菜单名称 LPCSTR lpszClassName ; /窗口

5、类名称 HICON hIconSM; / 指向依此窗口类所建窗口要引入的小图标 ;,6,5.2 几种窗口类结构介绍,5.1.2、窗口类条款的补充说明 1、UINT cbSize; 扩展窗口类变量的大小 2、WNDPROC lpfnWndProc ; 指向依此窗口类所建窗口的窗口函数的指针 LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) #define LRESULT LONG #define CALLBACK WINAPI,7,5.2 几种窗口类结构介绍,5.1.2、窗口类条款的补

6、充说明 3、LPCSTR lpszClassName ; 用户的应用程序使用的窗口类名称 是一个指向字符串的指针,或者说它的值是字符串在内存的地址,这个字符串就是窗口类的名字 给该变量进行赋值的方式为: wndclass.lpszClassName=MyGod!; 或 char szClsNm=MyGod!; wndclass.lpszClassName= szClsNm;,8,5.2 几种窗口类结构介绍,5.1.2、窗口类条款的补充说明 4、HINSTANCE hInstance ; 存放应用程序实例其本身的句柄(代号) 一般来说,程序在调用函数时如果会返回一个句柄(代号),我们都应该将它们

7、保存起来(放入某一变量里),以备后用。 5、图标 HICON hIcon; / 指向依此窗口类所建窗口中要引入的图标 HICON hIconSM; / 指向依此窗口类所建窗口要引入的小图标,9,5.2 几种窗口类结构介绍,5.2.3 Windows NT 中的窗口类结构 WNDCLASSA和WNDCLASSW是定义在WINUSER.H头文件中的窗口类结构, 第一种是ASCII版的窗口类结构,称为WNDCLASSA(A表示ASCII码) 另一个是Unicode版的窗口类结构。,10,5.2 几种窗口类结构介绍,5.2.3 Windows NT 中的窗口类结构 struct WNDCLASSEX

8、UINT style ; WNDPROC lpfnWndProc ; int cbClsExtra ; int cbWndExtra ; HINSTANCE hInstance ; HICON hIcon ; HCURSOR hCursor ; HBRUSH hbrBackground ; LPCTSTR lpszMenuName ; LPCTSTR lpszClassName ; ;,11,5.3 几个与窗口类有关的函数,5.3.1 LoadIcon函数 此函数的用法如下: #include HICON WINAPI LoadIcon( HINSTANCE hInstance, LPCSTR

9、 lpIconName ) . HINSTANCE hInstance 指向用户定义图标所在的位置,即用户定义图标在哪个实例中,当它为NULL时,那么,这是系统预定义的图标 LPCSTR lpIconName 图标名,也称图标上的标签。 HICON 返回值的类型,是指向图标的指针。 返回值 LoadIcon返回的是一个指向图标的指针 如果失败,返回NULL(0),12,5.3.1 LoadIcon函数,LoadIcon的功能是把实例中定义的图标载入内存。LoadIcon的第一个参数是图标所在的实例代号,第二个参数是实例中指向图标的指针,即图标指针。,如果要装载自己添加的图标资源,要 1、在文件

10、中添加头文件 #include resource.h 2、注意下面二种写法: LoadIcon (hInstance, MAKEINTRESOURCE(IDI_ICON1) LoadIcon (hInstance, (TCHAR *)IDI_ICON1),13,5.3.3 LoadCursor()函数,载入光标的函数如同载入图标的函数, HCURSOR WINAPI LoadCursor (HINSTANCE hInstance, LPCTSTR lpCursorName) . HINSTANCE hInstance 包含光标所在的位置,即使用的光标在哪个实例中,当它为NULL时,那么,这是系

11、统预定义的光标 LPCTSTR lpCursorName 光标的ID名 返回 指向光标的代号 若调用失败,返回NULL。,14,5.3.3 LoadCursor()函数,Windows预定义一系列鼠标游标位图,如下所示,15,5.3.3 LoadCursor()函数,如果要装载自己添加的图标资源,要 1、在文件中添加头文件 #include resource.h 2、注意下面二种写法: LoadIcon (hInstance, MAKEINTRESOURCE(IDI_CURSOR1) LoadIcon (hInstance, (TCHAR *) IDI_CURSOR1),16,5.3.4 Cr

12、eateSolidBrush()函数,1、HBRUSH hbrBackground ; hbrBackground 是指向窗口底色的指针。Windows利用代号指出属于这个窗口类的窗口的背景颜色。 Windows系统提供了几个画刷代号,每个画刷指向一种特定的颜色。,wndclass.hbrBackground= (HBRUSH) GetStockObject (WHITE_BRUSH ) ;/背景画刷 缺点:颜色品种十分有限!,17,5.3.4 CreateSolidBrush()函数,2、CreateSolidBrush()函数: #include HBRUSH WINAPI CreateS

13、olidBrush(COLORREF col) . 参数说明 HBRUSH 新画刷的代号,如函数调用失败,返回NULL。 COLORREF颜色 一个32位二进制数字,对应,红,绿,兰的组合。 COLORREF颜色参考值是一个32位的数值,它由函数RGB来得到,RGB (r,g,b);,CreateSolidBrush( RGB(0,255,0) ); /创建一个纯绿色的画刷,18,5.3.4 CreateSolidBrush()函数,RGB (r,g,b); 三种基本色(红,绿,兰)中,每种颜色的浓度是通过0-255之间的一个数值来度量的 例如,要绿色窗口,窗口类数据项(条款)可以这样设置,(

14、wcex是窗口类变量) wcex.hbrbackground = CreateSolidBrush( RGB(0,255,0) ); 与RGB有关的其余三个宏分别取得红色,绿色,兰色的浓度。 假如你对红色的窗口有意思,那么利用CreateSolidBrush()便可以组成红色。如下所示: wcex.hbrbackground = CreateSolidBrush( RGB(255,0,0) ); CreateSolidBrush(RGB(255,0,0)是指向红色背景的指针。,19,5.3.4 CreateSolidBrush()函数,RGB (r,g,b); 实用中,依据三原色利用Creat

15、eSolidBrush()函数来创造新背景颜色用户是不会感兴趣的 系统为窗口上的各种组件提供各种不同的颜色。 背景颜色可以直接借用组件的颜色,窗口的组件有:标题拦,菜单拦 ,滚动条,按钮类等,例如:CreateSolidBrush( GetSysColor( COLOR_MENU) );,20,练习 5,1. Window应用程序是否一定要用WinMain主函数,WinMain函数的作用是什么? 2. Window应用程序中是否所有的标识符都按照”匈牙利命名惯例”来拼写? 3. 解释系统全局窗口类,应用全局窗口类,应用专用窗口类? 4. WinMain()的语法在16位Windows和32位Windows里是完全一致的,但是两者之间内在的差别是很大的,差别是什么? 5. 32位Windows支持哪三种窗口类?讲述每种窗口类的用法 6. 为什么要设计窗口类? 7.请你解释一下下面三个窗口类条款 WNDPROC lpfnWndProc LPCSTR lpszClassNam

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论