关于SubclassWindow()和SubclassDlgItem

msdn上的解析

CWnd::SubclassWindow
BOOL SubclassWindow( HWND hWnd );

Return Value

Nonzero if the function is successful; otherwise 0.

Parameters

hWnd

A handle to the window.

Remarks

Call this member function to "dynamically subclass" a window and attach it to this CWnd object. 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. 

Subclass(子类化)是MFC中最常用的窗体技术之一。子类化完成两个工作:一是把窗体类对象attach到一个windows窗体实体中(即把一个窗体的hwnd赋给该类)。另外就是把该类对象的消息加入到消息路由中,使得该类可以捕获消息。

例如一个CEdit的派生类CMyEdit 只允许键入0-9, A-F, 则我们可以改写WM_CHAR消息响应函数,然后用SubclassWindow子类化到对话框的一个文本框实体上(可用GetDlgItem), 这样对话框上文本框的消息就会重定向到CMyEdit上。

SubDlgItem 与 SubclassWindow 区别不大,但前者只限定于对话框控件,后者是一切具有HWND的窗体

更详细的讨论可参见如下文章:

http://dev.csdn.net/article/16/16045.shtm

时间: 2024-09-23 05:07:03

关于SubclassWindow()和SubclassDlgItem的相关文章

mfc subclasswindow attach setwindowlong使用区别

1. CWnd::Attach BOOL Attach( HWND hWndNew ); 返回值:如果成功,则返回非零值:否则返回0. 参数: hWndNew 指定了Windows窗口的句柄.   说明:将一个Windows窗口与CWnd对象相连接. CWnd::SubclassWindow BOOL SubclassWindow( HWND hWnd ); 返回值:如果函数成功,则返回非零值:否则返回0. 参数: hWnd 窗口句柄.   说明:调用这个成员函数以动态子类化一个窗口,并将它与这

VC增强Edit控件为日期输入控件

MFC所提供的组件已经可以完成很多功能了,但有时候我们还需要这些控件按我们自己的意图去处理.比如EDIT控件,虽然我们可以设置EDIT控件为只能接受数字属性,但如果我们还需要它可以接收数字意外的字符,比如需要控件只能接收"2004-02-20"这样的格式的日期字符呢?我们需要自己在WM_CHAR消息里面来处理输入的字符.可是,当输入字符后,Windows会向Edit控件发送WM_CHAR消息,应用程序会调用Windows默认的Edit控件窗口处理函数WndProc来处理该控件.这时我们

MFC 定制控件(Customize Control) 及 MFC CWnd和WIN32 HWND关联方法

MFC 定制控件(Customize Control) 及 MFC CWnd和WIN32 HWND关联方法  <参考资料 MSDN MFC TNO 15>  文档将概述MFC中定制自定义控件的3种方法: 拥有者绘制控件(Owner Drawing Control and Menu)   自绘制控件(self drawing control and menu)  和子集化(subclass)  1  使用MFC方法定制控件必备的几个基本概念:  控制定制风格的控件的几个标准Windows消息: 

深入理解MFC子类化

子类化,通俗来讲就是用自己的窗口处理函数来处理特定消息,并将自己其他消息还给标准(默认)窗口处理函数.在SDK中,通过SetWindowLong来指定一个自定义窗口处理函数:SetWindowLong(hwnd, GWL_WNDPROC, (LONG)UserWndProc);.可是到了MFC中,大部分基础的东西都被封装起来了,那么,这是该怎么实现子类化呢?       先来看一个例子:       要求:定义一个Edit控件,让它能够对输入进行特定的处理输入进行处理-----只能输入英文字母,

VC++中subclassdlgitem函数的功能、用法及注意事项

subclassdlgitem 该函数用来子类化一个控件. Subclass(子类化)是MFC中最常用的窗体技术之一.子类化完成两个工作:一是把窗体类对象attach到一个windows窗体实体中(即把一个窗体的hwnd赋给该类).另外就是把该类对象的消息加入到消息路由中,使得该类可以捕获消息. SubclassDlgItem可以把对话框中已有的控件与某个窗口对象动态连接起来,该窗口对象将接管控件的消息处理,从而使控件具有新的特性.SubclassDlgItem函数的声明为 BOOL Subcl

控件-关于hook时,subclasswindow失败的问题

问题描述 关于hook时,subclasswindow失败的问题 请教一个问题,我写了一个皮肤库,用HOOK钩住了窗体过程,在WM_CREATE消息中调用SubClassWindow子类化到自己的控件,对于非对话框窗体没有问题,可遇到对话框窗体就会SubClassWindow失败了,我的CSkinDialog是继承自CDialog的,有人知道原因吗 解决方案 对话框的边框和缩放手柄和一般窗口不同,标题栏按钮也不同,是不是你处理不当.看下getlasterror返回什么错误.

VC++中subclassdlgitem函数的功能及用法

  该函数用来子类化一个控件. Subclass(子类化)是MFC中最常用的窗体技术之一.子类化完成两个工作:一是把窗体类对象attach到一个windows窗体实体中(即把一个窗体的hwnd赋给该类).另外就是把该类对象的消息加入到消息路由中,使得该类可以捕获消息. SubclassDlgItem可以把对话框中已有的控件与某个窗口对象动态连接起来,该窗口对象将接管控件的消息处理,从而使控件具有新的特性.SubclassDlgItem函数的声明为 BOOL SubclassDlgItem( UI

关于如何换肤、子类化的解决方案

对于应用程序的换肤及子类化.下面是我尝试过一些方法,以在CAboutDlg中子类化其中的Button为例: 第一种:直接用现成的类 1.自己写一个类class CButtonXP : public CButton{/*...*/} 用MessageMap处理感兴趣的消息. 2.用CButtonXP代替CButton来声明变量m_btn; 3.在void CAboutDlg:DoDataExchange(CDataExchange* pDX)中加上一句:DDX_Control(pDX, IDB_B

调试技巧之调用堆栈

简单介绍 调试是程序开发者必备技巧.如果不会调试,自己写的程序一旦出问题,往往无从下手.本人总结10年使用VC经验,对调试技巧做一个粗浅的介绍.希望对大家有所帮助. 今天简单的介绍介绍调用堆栈.调用堆栈在我的专栏的文章VC调试入门提了一下,但是没有详细介绍. 首先介绍一下什么叫调用堆栈:假设我们有几个函数,分别是function1,function2,function3,funtion4,且function1调用function2,function2调用function3,function3调用