|
|
翻译说明: 以前一直没有很在意窗口类的使用,我近期在用vc做一些界面时遇到窗口类定义的概念,这次翻MSDN的时候看到了一篇文章,讲到窗口类的一些基本概念,匆匆看完,翻译出来当学习笔记,可能有一些细节上的谬误,请包涵。放在网上,如果大家觉得值得参考,就看看。
在MFC编程里,窗口类的概念接触的已经比较少了,在SDK编程的时候则至少还需要声明一个WNDCLASS(EX)类RegisterClass(Ex)一下。但是窗口类在windows中是无所不在的,虽然不是很深奥的东西,了解一下其中细节,个人觉得对编程应该是有好处的。
vcbear翻译 vcbear@163.com
<正文>
探索Win32系统之窗口类(Window Classes in Win32)
Kyle Marsh
Microsoft Developer Network Technology Group
MSDN技术组
本文主要介绍win32系统里窗口类的运做和使用机制,探索一些细节问题,使win32窗口类的信息更加明朗化。
在本文中,"类","窗口类"这两个术语等同,都不是指C++类,而是指和窗口相关的一组信息的集合。
窗口类的风格决定了窗口的外观和风格。所有的窗口都会属于某一个窗口类。在创建一个窗口之前,必须注册(register)一个相应的窗口类。32位Windows操作系统类可以注册被系统里所有的程序所使用的窗口类。
大部分开发人员认为窗口类是个麻烦的东西,他们顶多就是从例子或其他代码中拷贝一个RegisterClass函数,修改一下部分参数而已。这仿佛有些轻视了,没有发挥窗口类的作用。本文将对此进行探索,并且描述窗口类如何的使应用程序得到优化。
我们的将讨论的题目包括:
一:窗口类的类型
window系统提供了三种类型的窗口类
1.系统全局窗口类(System Global Classes)
windows 本身注册了几个系统全局类供全部的应用程序使用,这些类包括了以下的常用标准窗口控件
以及其他不那么常用的控件如TabCtrl等.
还有:
WindowsNT为DDEML(Dynamic Data Exchange Management Library)增加了DDEMLEvent类,因为DDEML功能已经结合到USER里去了。
Windows 95/98不注册类 #32772,因为它不使用题头带图标风格的窗口(由于我用的是win2k操作系统,这一点没有尝试)
所有的win32应用程序都可以使用系统全局类,但不能增加或删除一个这样的类。
应用程序可以通过“子类化”(SubClassing)这些类来改变系统全局类的属性。在Win32里,应用程序子类化某个系统全局类只会影响本进程内窗口的表现,而不会影响另外一个进程或应用程序。比起相应的操作会影响其他窗口的win16时代,这是一个进步。
在Win32里,Ms鼓励“子类化”系统类的行为。因为这个技术可以非常有效和方便的改变窗口的表现。例如:如果应用程序希望限制edit控件的输入和编辑行为,可以通过子类化edit类并设置一个新的窗口过程(WindowProc)来自己处理处理键盘操作来实现。子类化以后,此应用程序里创建的edit控件将使用新的窗口过程,以代替标准的edit控件窗口过程。
系统全局窗口类实现
现在的win32平台使系统类和各32位进程互不相干,系统类如何实现的并不会直接影响应用程序。本节将描述系统类的实现,当然,跳过此节并不妨碍全文的阅读和理解。
系统全局类在win9x和win3.1的实现使相当相象的。在系统启动时,USER模块创建了系统类。win9x和win3.1不同的是:当发现一个应用程序子类化了某个系统类的时候,win9x将进行如下工作:
网友评论:(评论内容只代表网友观点,与本站立场无关!) |
阅读排行
|