窗口子类化和超类化

2023-11-02

目录

窗口子类化        

窗口超类化


窗口子类化        

QQ截图20200908082019.bmp

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

窗口子类化步骤:

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

窗口子类化和超类化 的相关文章

  • vs2019创建win32控制台应用程序

  • 常见 win32.com 操作

    import win32com client from win32api import RGB xlapp 61 win32com client gencache EnsureDispatch 34 Ket Application 34 x
  • [Win32]一个调试器的实现(十)显示变量

    上回介绍了微软的符号模型 xff0c 有了这个基础知识 xff0c 这回我们向 MiniDebugger 中添加两个新功能 xff0c 分别是显示变量列表和以指定类型显示内存内容 显示变量列表用于列出当前函数内的局部变量或者全局变量 xff
  • Dynamic Linking Error: Win32 Error 126问题排查

    如题所示 xff0c 这个问题是我在electron项目中使用ffi调用动态链接库出现的 xff0c 本机运行都好好的 xff0c 打包构建然后放到别的机器上运行出错 这个问题一度也让我很迷茫 xff0c 如果是路径导致的这个问题 xff0
  • win32 汇编基础概念整理

    一 关于寄存器 寄存器有EAX EBX ECX EDX EDI ESI ESP EBP等 xff0c 似乎IP也是寄存器 xff0c 但只有在CALL RET在中会默认使用它 xff0c 其它情况很少使用到 xff0c 暂时可以不用理会 E
  • 学 Win32 汇编[28] - 跳转指令: JMP、JECXZ、JA、JB、JG、JL、JE、JZ、JS、JC、JO、JP 等

    跳转指令分三类 一 无条件跳转 JMP 二 根据 CX ECX 寄存器的值跳转 JCXZ CX 为 0 则跳转 JECXZ ECX 为 0 则跳转 三 根据 EFLAGS 寄存器的标志位跳转 这个太多了 根据标志位跳转的指令 JE 等于则跳
  • Win32环境下两种用于C++的线程同步类

    线程同步是多线程程序设计的核心内容 它的目的是正确处理多线程并发时的各种问题 例如线程的等待 多个线程访问同一数据时的互斥 防死锁等 Win32提供多种内核对象和手段用于线程同步 如互斥量 信号量 事件 临界区等 所不同的是 互斥量 信号量
  • 转:windows消息传递机制

    Windows是一个消息 Message 驱动系统 Windows的消息提供了应用程序之间 应用程序与Windows系统之间进行通信的手段 应用程序想要实现的功能由消息来触发 并且靠对消息的响应和处理来完成 必须注意的是 消息并非是抢占性的
  • windows服务程序中创建用户进程

    最近碰到个问题 需要在服务中检测用户桌面的情况 但是服务程序都是SYSTEM账户下运行 属于Session0 不能检测到用户桌面的情况 所以就需要另启一个用户进程来获取这些信息 然后发送给服务 所以就用到了 CreateProcessAsU
  • 以互联网思维做好客户端软件

    加入爱奇艺的时间不长 但我感受到的震撼却不小 在外企打拼了十几个春秋 今年终于有机会进入一家国内顶尖的互联网企业 真真切切地有一番不太一样的体验 不过 我今天并不想说在外企工作与国内企业的差别 目前 我负责 爱奇艺PPS影音 PC客户端软件
  • MFC视频教程(孙鑫)学习笔记2-掌握C++

    这一集中 主要总结了C 经典语法与应用 1 C 的三大特性 封装 继承 多态 2 C 中提供了一套输入输出流类的对象 它们是cin cout和cerr 对应c语言中的三个文件指针stdin stdout stderr 分别指向终端输入 终端
  • 桌面下雪小程序 WIN32

    想起以前还没有上大学的时候 过圣诞节 有同学发了一个桌面下雪的小程序 当看到效果的 哇 当时觉得好高端 就想什么时候我也能写出这么一个程序 学了计算机之后 发现这完全可以实现 于是就准备写一个 当卡壳的时候在网上找资料 结果发现在网上找到的
  • 探秘app.asar

    开发过Electron客户端的都知道 在package json的build节点下 如果设置 asar true 软件打包时会把程序文件合成为一个app asar文件 软件安装后 可以在安装目录的resources子目录下找到它 packa
  • 使用Express快速搭建静态资源服务器

    有时候 客户端程序实现了某些功能需要与服务端联调 比如从服务器下载一些静态资源文件 XML JSON EXE HTML JS CSS等 像前文提到的场景 测试Electron程序的自动升级功能 我们介绍了如何使用Minio 不用写一行代码就
  • windows 消息机制

    windows 操作系统是由事件驱动的 也叫消息机制 一般来说分为四步 用户动作也就是事件 gt windows 将事件翻译成消息 gt 将消息放入消息队列 gt 消息循环从消息队列中取出消息并发送给窗口处理程序 我们来看一下窗口最简单窗口
  • 19_复制目录下所有文件夹和目录CopyFile()

    复制目录下所有文件夹和目录CopyFile 想一下 若要复制文件夹 可以在目录位置新建一个文件夹 然后将源文件夹中里面的文件进行遍历 一个一个的复制到目标文件夹中即可 void EnumCopyFile 输入参数 TCHAR szSrcRo
  • 提权重启自己

    using System using System Collections Generic using System ComponentModel using System Data using System Drawing using S
  • WINDOWS键盘钩子

    最近有个需求做的时候碰到需要捕获某个程序的特定按键并且在该程序处于焦点并且按下特定键 如F1 时让主板的蜂鸣器响一声以提示 由于该程序没有源码 因此只能通过编写服务挂全局钩子来对该程序的键盘消息进行捕获 大致的代码结构是使用VC现编写了一个
  • C# 网络编程之Tcp实现客户端和服务器聊天

    最近使用Socket网络套接字编程中 在同步与异步通讯中客户端与服务器总是无法响应 但在学习Tcp协议编程中完成了通讯聊天功能 下面简单讲讲我最近学到的及Tcp聊天的源代码及详细注释 Tcp协议是一个传输层的协议 在Tcp协议编程中它通常使
  • ShellExecuteEx中与被调进程同步

    在实际的开发中会遇到这样的情况 A进程在运行时 需要调起B进程完成某些工作 例如取回关键文件 且必须等待该进程完成工作结束后才能往下继续 那么这时候 就可以采用ShellExecuteEx和WaitForSingleObject的结合对被调

随机推荐

  • 基于express的文件上传功能实现

    基于express 的文件上传功能 功能描述 可以上传文件 并在后台中看到上传的文件 可以上传图片 并进行一个简单预览 点击提交后可以在后台中看到 功能展示 功能实现 index html
  • 爬虫实例分析

    下面我将介绍如何一步一步将豆瓣的top250的网页数据爬取并保存在本地 首先我们需要python的基础 定义变量 列表 字典 元组 if语句 while语句等 然后利用了解爬虫的基本框架 原理 爬虫就是模仿浏览器去访问网络中的网页 并将网页
  • 我心目中的优秀开发人员标准 兼谈OO和设计模式

    看了包建强的blog 一个优秀 NET程序员的技能树 想说些个人意见 包建强所列举的技能很多 可以说绝大部分人都达不到他说的标准 难道达不到那个标准就算不上优秀了 也不尽然 每个人有自己的看法 我的看法 对于 net方面的开发人员 我认为应
  • 你与高薪offer的距离是否还差这一份985页Java面经?

    前言 现在已经九月底 金九银十也已经过去了一大半 很明显今年的面试季明显不如往年火热 对于求职者来说 也更难了一些 马上迎来国庆节 假期一过 十月份又过去了三分之一 综合来看今年确实不是面试的最佳时期 不过趁今年所剩的时间来好好准备 明年的
  • 统计学-基于R (第四版) 贾俊平编著 第一章:数据与R语言 习题答案 【自用】

    习题1 1 1 这题没写存储 只写了录入 wagelevels lt c 低收入户 中等偏下户 中等收入户 中等偏上户 高收入户 yr2016 lt c 3750 7338 10508 14823 28225 yr2017 lt c 464
  • 使用phpmyadmin遇到问题“Warning in ./libraries/sql.lib.php#613 count()

    在安装好phpmyadmin后遇到问题 Warning in libraries sql lib php 613 count Parameter must be an array or an object that implements C
  • 如何在VMware上安装CentOS7?

    目录 一 器材准备 二 创建一个虚拟机 三 安装Centos7系统 一 器材准备 1 Centos7及以上版本的iso镜像 链接 centos7镜像 提取码 ao3n 2 VMware15及以上版本的软件工具包 链接 VMware16安装包
  • 并行运算出现“_pickle.PicklingError: Can‘t pickle <function calculate at 0x000001ADE8C2EEE0>”

    尝试将需要并行运算的函数同并行运算结构体分开进行并行运算 例 创建一个名为calculate py的新文件 并将以下代码粘贴到该文件中 def calculate num return num 2 主程序的代码如下 import multi
  • 如何优化代码中大量的if/else,switch/case?

    前言 随着项目的迭代 代码中存在的分支判断可能会越来越多 当里面涉及到的逻辑比较复杂或者分支数量实在是多的难以维护的时候 我们就要考虑下 有办法能让这些代码变得更优雅吗 正文 使用枚举 这里我们简单的定义一个表示状态的枚举 public e
  • qq的Tencent://Message/协议

    QQ即时聊天代码 为QQ号码 以前这样写 http wpa qq com msgrd V 1 Uin Site hexun com ngdao Menu yes 现在这样写 tencent message uin Site hexun co
  • upload-master-pass8

    第八关 又是黑名单绕过 但是没有处理 DATA 引用某位大佬的解释就是 php在window的时候如果文件名 DATA 会把 DATA之后的数据当成文件流处理 不会检测后缀名 且保持 DATA 之前的文件名 他的目的就是不检查后缀名 验证
  • ASCII、Unicode、UTF-8、GBK、全角/半角

    入门小菜鸟 希望像做笔记记录自己学的东西 也希望能帮助到同样入门的人 更希望大佬们帮忙纠错啦 侵权立删 目录 一 定义 1 ASCII 2 Unicode 3 UTF 8 4 GB2312 5 GBK 6 u和 x 7 全角和半角 二 相互
  • 【IEDA】ERROR!

    一 中文乱码 public class litera public static void main String args 整数 System out println 100 小数 System out println 0 01 字符 S
  • LINUX DRM 入门一条龙

    使用nanopiM3 s5p6818 LINUX 内核4 4 172 使用HDMI接口显示图像 源码 usb2hdmi 使用usb传输FB数据 hdmi接口输出 情景分析法 使用modetest命令作为应用层的测试例程 modetest M
  • 28黑马QT笔记之QPixmap保存图片

    28黑马QT笔记之QPixmap保存图片 1 QPixmap QImage QPictrue三种绘图工具之间的区别 上一篇我们讲到QPixmap如何在窗口进行绘图 接下来本篇要讲的是QPixmap如何保存一张图片 即将已有图片再按自己方式保
  • 线性代数的本质——线性组合,张成空间和基

    本文是对BiliBili上的一个系列视频的学习记录 非常推荐大家去B站上观看 记得三连 不要白嫖 链接 https www bilibili com video av6731067 p 2 上文中说到 向量坐标中的数字 可视为对基向量的拉伸
  • TypeError: ‘DataContainer‘ object is not iterable解决

    mmsegmentation训练的过程中eval时报错 环境如下 sys platform linux Python 3 8 13 default Mar 28 2022 11 38 47 GCC 7 5 0 CUDA available
  • php assert执行命令,代码执行&命令执行&命令注入

    代码执行 命令执行 命令注入 代码执行 代码执行是靠脚本代码调用操作系统的命令 eval eval string code mixed 把字符串 code 作为PHP代码执行 eval POST c 直接蚁剑链接密码为c 中国菜刀 ckni
  • mapbox-gl图形绘制并编辑已有图层

    文章目录 前言 1 react中使用mapbox gl draw绘制 2 已有图层编辑 3 绘图控件的控制 4 数据缓存造成的一个bug 问题描述 原因 解决方案 总结 前言 相信经常和地理数据打交道的小伙伴都有过标绘地理数据的经历 使用A
  • 窗口子类化和超类化

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