- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
WTL 技巧
WTL 技巧
WTL是建立在ATL windowing的基础之上的,而ATL又是建立在Win32 SDK基础之上的。在探索WTL之前,回顾在Windows操作系统家族里windowing是如何工作的是很重要的,这就是我们章要探讨的问题。如果能清晰地理解一些重要的Win32概念的话,我们在来看ATL和WTL的结构就会轻松得多。
窗口的类型
从最基本的说起,一台运行着Windows操作系统的PC的屏幕上的任何东西要么是一个窗口,要么是一个窗口上的原始绘画。Win32 API提供了创建、管理和销毁窗口以及表现窗口内的图形的概念。每一个用户界面元素(控件)都存在与一个独立的窗口中,最终用户可能认为存在许多类型的窗口-图形输出窗口、用户界面标准控件、(按钮,单选框等)、通用控件(ListView,TreeView)和ActiveX控件(ActiveX的一个特例是“无窗口”,可以没有自己的窗口,而是存在于他的容器窗口中),其实它们都是遵循同一套规则的窗口的实例而已。
窗口的层次
窗口在屏幕上是按层次排放的。最顶层的是桌面窗口,一个大图标模式的listview控件。应用程序的顶级窗口和它们的子窗口组成了这个有OS维护的窗口层次树的节点。
当你创建窗口时,你必须指定它的父窗口,新的窗口将位于它的父窗口所在的节点之下,当一个窗口被销毁时它的子窗口自动被销毁。
窗口类
一个窗口类是对一个窗口如何工作的重要方面的描述。你创建的每一个窗口必须有一个窗口类。操作系统为标准控件提供了窗口类,比如Button,Edit和ListBox以及通用控件ListView,TreeView,CalenderPicker
窗口类是用RegisterClassEx函数注册,用UnregisterClass取消的。
ATOM RegisterClass( //返回一个标识该窗口类的ATOM
CONST WNDCLASS *lpWndClass // IN:窗口类结构指针
);
BOOL UnregisterClass( /
LPCTSTR lpClassName, // WNDCLASS中的lpszClassName
HINSTANCE hInstance // 窗口基本
);
有时一个窗口类也被叫做窗口“模板”,用编程的术语来说,一个窗口类是一个Win32结构(并非一个C++结构)。窗口类中的最重要部分是窗口过程(window procedure),还包含一个用于程序最小化时显示的图标、背景刷子、默认鼠标指针和拥有者的hInstance(包含WndProc的Exe或Dll)。一个进程可以创建一个窗口类,然后基于它实例化窗口。
typedef struct _WNDCLASS {
UINT style; // 包含更多设置的掩码
// (比如 CS_NOCLOSE – 不在控制菜单中显示关闭
WNDPROC lpfnWndProc;//窗口过程
int cbClsExtra; //窗口类的附加字节
int cbWndExtra; //每个窗口的附加字节
HINSTANCE hInstance;// 包含窗口过程的EXE/DLL 的实例句柄
HICON hIcon; // 窗口类的图标
HCURSOR hCursor; // 窗口类的鼠标指针
HBRUSH hbrBackground; // 背景如何画
LPCTSTR lpszMenuName; //菜单资源名称
LPCTSTR lpszClassName; // 类名
} WNDCLASS, *PWNDCLASS;
重要的Style包括
CS_SAVEBITS,CS_NOCLOSE,CS_CLASSDC,CS_OWNDC,CS_PARENTDC(译者注:具体解释省略,参看MSDN)
附加的字节可以存储在窗口类中和该类的每个窗口中。类名在以后窗口窗口时有用-作为CreateWindowx[Ex]的一个参数
窗口过程
窗口消息不断地发送到窗口上,窗口通过窗口过程来处理它们。窗口过程是一个程序和一个窗口类的特定函数,这个函数检测到一个特定的消息就进行相应的处理(通常要调用另外的函数来处理),对不感兴趣的消息直接转交默认的处理函数(DefWindowProc)。很正常,多个窗可能是基于同一个窗口类的,也就是说多个窗口使用一个窗口过程来处理消息(通过一个HWND类型的参数区分是属于哪个窗口的消息)。
窗口
窗口是通过调用 CreateWindowEx 创建出来的,创建时必须指定一个已经注册过的窗口类名(这个参数不能为NULL)
HWND CreateWindow(
LPCTSTR lpClassName, // 窗口类名
LPCTSTR lpWindowName, // 窗口名称,显示在标题栏
DWORD dwStyle, //
原创力文档


文档评论(0)