- 1、本文档共18页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
win32内核编程_02
win32_02.txt
==================
第二课 窗口与消息
==================
一、窗口类及其注册方法
1. 窗口类是包含窗口各种参数信息的结构体(WNDCLASS)。
每个窗口都属于特定的窗口类,
且该窗口类必须注册到操作系统中(RegisterClass)。
每个窗口类必须都有唯一的名称(WNDCLASS::lpszClassName)。
2. 系统窗口类:系统预定义的窗口类,
应用程序可以直接使用。如:
按钮(BUTTON)、编辑框(EDIT)等。
范例:WinButton
3. 应用程序全局窗口类:用户自己定义,
可在当前进程的所有模块(exe及其所加载的各dll)中使用。
易导致类名冲突,谨慎使用。
4. 应用程序局部窗口类:用户自己定义,
只 在当前进程的本模块(exe/dll)中使用。
不同模块即使定义并注册了同名的窗口类,亦无妨,
自己用自己的。
注意:一个进程可以包含多个模块(exe/dll),
每个模块都拥有独立的实例句柄(内存映像)。
5. RegisterClass和RegisterClassEx函数:
将窗口类注册到操作系统中。带Ex是不带Ex的增强版。
ATOM RegisterClassEx (CONST WNDCLASSEX* lpwcx);
ATOM即unsigned short,成功返回所注册窗口类的唯一标识码(非0),
失败返回0。
typedef struct {
UINT cbSize; // 结构体字节数*
UINT style; // 窗口类风格
WNDPROC lpfnWndProc; // 窗口过程函数指针
int cbClsExtra; // 窗口类附加数据缓冲区字节数
int cbWndExtra; // 窗口附加数据缓冲区字节数
HINSTANCE hInstance; // 当前应用程序实例句柄
HICON hIcon; // 大图标句柄(Alt+Tab)
HICON hIconSm; // 小图标句柄(标题栏左上角)*
HCURSOR hCursor; // 光标句柄
HBRUSH hbrBackground; // 刷子句柄
LPCTSTR lpszMenuName; // 菜单资源名
LPCTSTR lpszClassName; // 窗口类名
} WNDCLASSEX, *PWNDCLASSEX;
(*) 相对于WNDCLASS结构增加的成员。
6. 若WNDCLASSEX::style成员中包含CS_GLOBALCLASS位,
1 页
win32_02.txt
则为应用程序全局窗口类,否则为应用程序局部窗口类。
7. 更多窗口类风格
CS_GLOBALCLASS - 应用程序全局窗口类
CS_BYTEALIGNCLIENT - 窗口客户区水平位置按8像素对齐
CS_BYTEALIGNWINDOW - 窗口水平位置按8像素对齐
CS_HREDRAW - 窗口水平变化时重绘
CS_VREDRAW - 窗口垂直变化时重绘
CS_CLASSDC - 同窗口类窗口共享同一个设备上下文
CS_PARENTDC - 使用父窗口的设备上下文
CS_OWNDC - 使用自己的设备上下文
CS_SAVEBITS - 允许窗口被保存为位图,提高窗口绘图效率,
但是耗费内存资源
CS_DBLCLKS - 允许窗口
文档评论(0)