打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
窗口子类化_改变控件的窗口处理函数
一、原理:

  应用程序在创建一个新窗口之前要向Windows系统注册这个窗口的类,首先要填写一个WNDCLASS结构,其中的结构参数

  lpfnWndProc就是该类窗口函数的地址,接着调用RegisterClass()函数向Windows系统申请注册这个窗口类。这时Windows会

  为其分配一块内存来存放该类的全部信息,这个内存块称为窗口类内存块。

  窗口子类化技术实际上就是改变窗口内存块中的有关参数。由于这种修改只涉及到一个窗口的窗口内存块,因此它不会影响到

  属于同一窗口类的其它窗口的功能和表现。窗口子类化中最常见的是修改窗口内存块中的窗口函数地址(lpfnWndProc),使其指向

  一个新的窗口函数,从而改变原窗口函数的处理方法,以达到修改其窗口过程的目的。

  二、实现步骤:

  1.编写子类化窗口过程函数。其格式是标准的窗口过程函数格式即:

  LRESULT CALLBACK SubClassWndProc ( HWND , UINT , WPARAM , LPARAM) ;

  参数含义与窗口过程函数相同。

  2.调用GetWindowLong ( hWnd , GWL_WNDPROC )函数获得原窗口函数的地址并保存起来;其中参数hWnd为待子类化窗口句柄。

  3.调用SetWIndowLong ( hWnd , GWL_WNDPROC , SubClassWndProc )将窗口函数替换成子类化函数,实现窗口子类化。

  三、Example:

  LRESULT CALLBACK ProcFloat(HWND,UINT,WPARAM,LPARAM);

  WNDPROC EditProc; //EditProc用来保存原窗口函数地址, 就设为全局的

  EditProc = (WNDPROC)SetWindowLong( //函数返回的是hChild父窗口的窗口过程函数

  hChild, //需要子类化窗口

  GWL_WNDPROC
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
关于如何换肤、子类化的解决方案
VB的热键技巧的终结篇(转)
vc子类化和反子类化
MFC编程中的窗口子类化浅析
用跨进程子类化技术实现对其它进程消息的拦载
在VB的ListView中动态加载记录
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服