WTL 技巧.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 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)

htfyzc + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档