Windows学习笔记4——窗口与消息<二>

windows最重要的三个子系统(三个DLL):Kernel,User,GDI;

Kernel:处理所有在传统上由操作系统内核处理的事务——内存管理,设备IO,多工管理;

User: 是指使用者界面,实现所有窗口运行机制;

GDI: 实现图形设备界面,允许程序在屏幕或打印机上显示文字和图形。

 

关于WNDCLASS 与WNDCLASSEX

定义:

typedef struct _WNDCLASS

{UINT style; //指定窗口类风格

WNDPROC   lpfnWndProc;//指定窗口过程函数

int                  cbClsExtra;//指定紧随在WNDCLASS数据结构后分配的额外字节数,系统将其初始化为0

int                  cbWndExtra;//指定紧随窗口实例(instance)之后分配的额外字节数,

HANDLE       hInstance;//标识该窗口类的窗口过程所在模块实例的句柄,不能为空。

HICON          hIcon;//标识该窗口类的图标,hIcon必须是一个图标的句柄,若hIcon为NULL,系统将提供一个默认的图标

HCURSOR   hCursor;//标识该窗口类的光标,hCursor必须为一个光标的句柄,若hCursor为NULL,无论何时光标移到

                                   //应用程序时,应用程序必须显式设置光标形状

HBRUSH      hbrBackground;//标识了该窗口的背景画刷,hbrBackground字段必须是用于绘制背景的物理刷子的句柄,或者是一个颜色的值。如果给出一个颜色的值,它必须是下面列出的标准系统颜色之一(系统将对所选颜色加1)。如果给出了颜色值,它必须是转换成对应的HBRUSH类型之一的颜色:当hbrBackground字段为NULL时,每当需要绘制其用户区域时,应用程序必须自己来绘制其背景。应用程序可以通过处理WM_ERASEBKGND 消息或检查由 BeginPaint 函数填写的 PAINTSTRUCT 结构的fErase 字段来确定背景什么时候需要着色

LPCTSTR    lpszMenuName;//指向NULL结束的字符串,该字符串描述菜单的资源名,如同在资源文件里显示的名字一样。若使用一个整数标

                                                     //识菜单,可以使用MAKEINTRESOURCE宏。如果lpszMenuName为NULL,那么该窗口类的窗口将没有默认菜单。

LPCTSTR    lpszClassName;//:指向NULL结束的字符串,或者是一个原型(atom)。若该参数是一个原型,它必须是一个有先前调用

//RegisterClass或者 RegisterClassEx函数产生的类原型。类原型必须作为lpszClassName的低字,高字必须为0.若lpszClassName是一个字符串,它

//描述了窗口类名。这个类名可以是由RegisterClass或RegisterClassEx注册的名字,或者是任何预定义的控件类名。

} WNDCLASS;

 

注册WNDCLASS类型窗口类别,要使用RegisterClass函数;

注册WNDCLASSEX类型的窗口类别,要使用RegisterClassEx函数。

typedef struct _WINCLASSEX

{

UINT cbSize;

UINT style;

WNDPROC lpfnWndProc;

int cbClsExtra;

int cbWndExtra;

HINSTANCE hInstance;

HICON hIcon;

HCURSOR hCursor;

hBRUSH hbrBackground;

LPCTSTR lpszMenuName;

LPCTSTR lpszClassName;

HICON hIconSm;//与窗口类关联的小图标句柄,如果为NULL,系统搜索通过hIcon指定的图标资源的适当大小的图标

、                        //作为小图标。

}WNDCLASSEX, *PWNDCLASSEX;

 

总结:

       1、窗口必须依照某一窗口类别建立,窗口类别标识了一个窗口过程函数。

       2、不同的窗口可以依照同一窗口类别,窗口类别定义了窗口过程和依照此窗口类别建立的窗口的其他特征,在建立窗口时要定义该窗口独有的特征。

       例如:所有的按钮窗口都可以依据同一个窗口类别来建立,与这个窗口类别相关的窗口过程位于windows内部。由窗口类别来负责处理按钮的键盘和鼠标输入,并定义按钮在屏幕上的外观形象。从这一点看,所有的按钮都以同样的方式工作,但是并非所有的按钮都是一样的,它们可以有不同的大小,不同的屏幕位置,以及不同的字串,后面的这些特征是窗口定义的一部分,而不是窗口类别定义的。

       3、一个窗口过程可以处理依据同一个窗口类别建立的多个窗口的消息。

       4、窗口类别最重要的两个参数:lpfnWndProc(标识窗口过程)和lpszClassName(标识窗口类别的名字)。

       5、每种窗口类别只有一个窗口过程函数。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值