窗口子类化和超类化

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(使用前将#替换为@)

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

  • Win32控制台应用程序点击关闭按钮后如何等待当前任务处理完成后再结束应用

    在开发控制台应用程序时经常会遇到一种情况 xff0c 就是当点击关闭按钮时程序仍在处理一些任务 xff0c 此时如果强制退出会导致任务处理异常 因此 xff0c 程序需要响应点击关闭按钮的事件并等待当前任务处理完成 具体方法如下 xff0c
  • vs2019创建win32控制台应用程序

  • Win32窗口

    Win32窗口 span class token comment windows 开发所需头文件 包含Windows开发所需要的宏 类 函数 结构体等结构的定义 span span class token macro property sp
  • win32汇编寄存器汇总

    32位CPU所含有的寄存器有 xff1a 4个数据寄存器 EAX EBX ECX和EDX 2个变址和指针寄存器 ESI和EDI 2个指针寄存器 ESP和EBP 6个段寄存器 ES CS SS DS FS和GS 1个指令指针寄存器 EIP 1
  • 学 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 等于则跳
  • 以太坊客户端Geth命令用法-参数详解

    Geth是在以太坊智能合约开发中最常用的工具 必备开发工具 一个多用途的命令行工具 熟悉Geth可以让我们有更好的效率 大家可收藏起来作为Geth命令用法手册 本文主要是对geth help的翻译 基于最新的geth 1 7 3 stabl
  • Win32环境下两种用于C++的线程同步类

    线程同步是多线程程序设计的核心内容 它的目的是正确处理多线程并发时的各种问题 例如线程的等待 多个线程访问同一数据时的互斥 防死锁等 Win32提供多种内核对象和手段用于线程同步 如互斥量 信号量 事件 临界区等 所不同的是 互斥量 信号量
  • 「iOS」swift 和 objectivec 获得对象的 class 或者 Type 的方法

    一 oc 中使用 oc 中非常简单 一行搞定 NSString str1 test str1 class 这里的 str1 class 就是获取对象 class 的方法 二 swift 中使用 时间紧 任务重 上代码 var str Str
  • Apollo SpringBoot 客户端使用

    1 简介 Apollo 阿波罗 是携程框架部门研发的分布式配置中心 能够集中化管理应用不同环境 不同集群的配置 配置修改后能够实时推送到应用端 并且具备规范的权限 流程治理等特性 适用于微服务配置管理场景 服务端基于Spring Boot和
  • WIN32 消息总结

    1 键盘消息 键盘会产生如下两种消息 1 按键消息 消息分类 WM KEYDOWN WM KEYUP WM SYSKEYDOWN 系统按键按下时产生 如ALT F10 WM SYSKEYUP 参数 WPARAM 按键的vritual key
  • C/C++ socket通信 服务端 客户端相互发送消息(一人一句)

    C C socket通信 服务端 客户端相互发送消息 一人一句 server cpp client cpp 解析如下 server cpp 服务端代码如下 server cpp include
  • 让CPU画出图形(其实很简单的)

    本例子是当初微软的一个题目 希望windows任务管理器的CPU的占有率 是一个正旋曲线 如果是你 你会如何解决这个问题呢 先上图吧 由于cpu要处理其他电脑程序 只能画出来大概的模样 其实我当时想这个问题时候 是不是考虑对cpu进行操作
  • 网络编程 用eclipse获取百度服务器端的首页

    案例 public class MyWebBrowse public static void main String args try InetAddress address InetAddress getByName www baidu
  • WIN32 资源

    首先解释一下句柄 win32中的句柄在数值上表示一个32位的数 用来标识应用程序 进程中不同对象以及同类对象中的不同实例 而所谓实例就是指被实例化的对象 实例化的过程就是通过类创建对象的过程 实例化对象的目地是为对象开辟内存空间 所以句柄是
  • GDI 绘图

    目录 GDI 绘图 画点 画线 画封闭图形 画笔 画刷 其他 DC Device Context 绘图设备 HDC 绘图设备句柄 GDI Microsoft Graphics Device Interface Win32提供的绘图API G
  • 有关cocos2d创建c++项目,并把win32项目打包成apk文件

    首先进入cocos2d资源包文件夹例如 cd D Cocos Cocos2d x cocos2d x 3 10 再输入cocos new try项目名 p org cocos2dx 包名 l cpp d codes 创建cocos2d 3
  • Linux下配置pptp协议之拨号上网

    首先安装pptp sodo apt get install pptp linux y 创建连接 sudo pptpsetup create nodeName server yourServerAddr username xxx passwo
  • Windows编程基础--第2节 win32程序资源管理

    操作系统 win10 64位 IDE vc 6 0 windows程序都有自己的资源 例如按钮 图标 对话框等等 这节介绍如何使用win32程序资源管理 1 继续使用上节的win32程序demo 执行File gt new添加资源 选择Fi
  • 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
  • 窗口子类化和超类化

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