本文主要是介绍窗口子类化和超类化,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
目录
窗口子类化
窗口超类化
窗口子类化
窗口子类化的目的是在不修改现有代码的前提下,扩展现有窗口、控件的功能。它的思路很简单,就是将窗口过程地址修改为一个新函数地址,新的窗口过程函数处理自己感兴趣的消息,将不感兴趣的消息丢给原窗口过程处理。
窗口子类化步骤:
(1)正常创建系统控件/窗口,得到控件/窗口的句柄。
(2)调用GetWindowLong()得到原来的系统的窗口函数OldWndProc。
(3)调用SetWindowLong()设置控件新的窗口函数为我们的NewWndProc。
(4)在NewWndProc处理感兴趣的消息
(5)不感兴趣的消息调用CallWindowProc()传递给原来的OldWndProc处理
注意:在调用旧的窗口函数时,不能直接调用OldWndProc(..),而必须用函数CallWndProc调用,否则会出现堆栈错误。
窗口超类化
虽然可以通过子类化可以改变一个空间的窗口过程函数,但是如果量级较大,子类化代码复用率就会非常低。
窗口超类化是在窗口类——WNDCLASS或者WNDCLASSEX级别改变窗口类的特征,是所有的使用这个窗口类创建的窗口都受影响。
窗口超类化步骤:
1)调用GetClassInfo()获得一个已存在的窗口类信息
2)更改窗口类的窗口处理函数及其他
3)RegisterClass注册新窗口类
4)将不感兴趣的消息调用CallWindowProc()传递给OldWndProc处理
5)创建控件
这篇关于窗口子类化和超类化的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!