栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

窗口子类化和超类化

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

窗口子类化和超类化

目录

窗口子类化        

窗口超类化


窗口子类化        

        窗口子类化的目的是在不修改现有代码的前提下,扩展现有窗口、控件的功能。它的思路很简单,就是将窗口过程地址修改为一个新函数地址,新的窗口过程函数处理自己感兴趣的消息,将不感兴趣的消息丢给原窗口过程处理。

窗口子类化步骤:

        (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)创建控件

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/690330.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号