松鼠的博客

导航

统计

浅谈MFC中超类化(也称子类化)技术的实现

一:超类化概述
在MFC中窗体实例对某个窗体句柄超类化后,系统提供了这样两种能力:
1.我们对该窗体实例调用成员函数将会直接改变相关窗体句柄对应的窗体
2.系统传给相关窗体句柄的消息会先经过该窗体实例的消息映射
我举一个例子来说明:
比如我自己写了一个类叫CSuperEdit(父类为CEdit),在该类中我声明了void OnChar(UINT nChar, UINT nRepCnt, UINT nFlags);并在消息循环里添加了ON_WM_CHAR 一行
现在我只要在对话框CProg1Dlg 中声明

CSuperEdit m_edit;

然后在CProg1Dlg::OnInitDialog中,添加以下代码,就完成了“超类化”:

HWND hWndControl = ::GetDlgItem(pParent->m_hWnd, IDC_EDIT1);
m_edit.SubclassWindow (hWndControl);


这样超类化处理以后:
当我们调用m_edit.SetWindowText("<请输入A、B、C>");,后IDC_EDIT1窗体上对应的文字就会改变为"<请输入A、B、C>"
当用户在IDC_EDIT1窗体中敲键盘时,系统会调用我自己写的CSuperEdit::OnChar函数(而不是原先的CEdit::OnChar)

用途:
(1)可以用来改变一些系统控件,例如 CListCtrl 控件的 CHeaderCtrl 控件

相关参考:
(1)http://amyz.itpub.net/post/34151/406292

posted on   Xproer-松鼠  阅读(353)  评论(0编辑  收藏  举报

编辑推荐:
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
点击右上角即可分享
微信分享提示