SubcalssWindow() 函数说明

SubclassWindow

在MFC中, SubclassWindow是CWnd类的一个成员函数;
原型如下:

/*
*概述  :调用此成员函数以“动态子类”窗口并将其附加到此 CWnd 对象;
*参数  :
	HWND hWnd -> 窗口句柄
*/
BOOL SubclassWindow(HWND hWnd);

这个中文版的概述暂时看不懂啥意思…
为了更好理解, 查看了这个函数的英文概述

Call this member function to “dynamically subclass” a window and attach it to this CWnd object.

结合中英文理解了一下因该是这样的;(暂时的, 后面又完整例子)
CWnd Frm;
Frm.SubclassWindow(hWnd);
Frm调用了SubclassWindow函数用来 “动态化子类” 窗口(hWnd), 并将窗口(hWnd)附加到Frm对象当中.

现在有以下两个问题 :

  1. 什么是"动态子类"化
  2. 什么是附加

看看官方(MSDN)给出的注释
When a window is dynamically subclassed, windows messages will route through the CWnd’s message map and call message handlers in the CWnd’s class first. Messages that are passed to the base class will be passed to the default message handler in the window.

This member function attaches the Windows control to a CWnd object and replaces the window’s WndProc and AfxWndProc functions. The function stores a pointer to the old WndProc in the CWnd object.

翻译如下:
当窗口动态子类化时,Windows 消息将首先通过 CWnd对象“消息映射”路由并调用“(对象)类中的 CWnd消息处理程序。 传递给基类的消息将传递到窗口中的默认消息处理程序。

此成员函数将窗口控件附加到CWnd对象,并替换窗口WndProc和AfxWndProc函数。 该函数将指针存储在对象中旧 WndProc 对象中 CWnd 。

总的来看就做了两件事
1.附加:
把一个窗口实体附加到窗口类中(即把一个窗体的hwnd赋给该类)
2.子类化
让消息先被窗口类捕获在进入到窗口实体(传入的参数hwnd)之中.

举个例子
假如我们有一个CEdit的派生类 CMyEdit 我们让它在接收到输入时就弹出消息盒子. 我们可以改写WM_CHAR响应函数在使用SubclassWindow将CMyEdit子类化到一个对话框中的实体文本编辑框之中就可以了.

例子在VS2013中编译
免费例子下载

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值