您的位置:首页 > 其它

关于SubClassDlgItem

2012-02-01 22:02 267 查看
关于SubClassDlgItem

子类化
SubClass Dialog 上面的一个控件呀!

SubClass 某个控件后,其原来的 WindowProc 替换成你自己写的 CYourCWndClass 的 WindowProc,这样你就可以处理这个控件的所有消息了;用 ClassWizard 维护自己的 CYourCWndClass 就可以了。

在MFC中除了SubClassDlgItem外还有SubclassWindow函数用来执行同样的功能。在与某个控件ID关联起来之后,所有该控件的消息将会有该类来响应。通常使用过程如下

一、从希望Subclass的控件派生一个类例如从CEdit->CMyEdit;

二、在CMyEdit中完成希望处理的消息,例如OnChar等;

三、在对话框类中定义一个CMyEdit类的成员变量m_myEdit;

四、在Dialog的OnInitDialog中加入m_myEdit(IDC_EDIT, this);

这样当在IDC_EDIT上发生OnChar时,将会调用CMyEdit中的OnChar
补充一下,用一个窗口过程替换另一个过程的行为叫SUBCLASSING,这是WINDOWS意义上的派生子类,与面向对象语言的派生子类是完全不同的概念。SubClassDlgItem让对话框内指定子控制自己的窗口过程替代默认窗口过程,以拦截消息。
在VC 中,DoDataExchange函数中的DDX_Control之类的函数会调用SubClassDlgItem完成窗口子类化,这样控件自己就能处理消息了。
BOOL SubclassDlgItem( UINT nID, CWnd* pParent );

参数nID是控件的ID,pParent是指向父窗口的指针.若连接成功则函数返回TRUE,否则返回FALSE.
综上所述,要在程序中使用派生控件,应该按下面两步进行:
1、在对话框模板中放置好基类控件.

2、在对话框类中嵌入派生控件类的对象.

3、在OnInitDialog中调用SubclassDlgItem将派生类的控件对象与对话框中的基类控件相连接,则这个基类控件变成了派生控件.
例如,如果要在对话框中使用新设计的编辑框控件,应先在对话框模板中的合适位置放置一个普通的编辑框,然后,在OnInitDialog函数中按下面的方式调用SubclassDlgItem即可:
BOOL CMyDialog::OnInitDialog()

{

CDialog::OnInitDialog();

m_MyEdit.SubclassDlgItem(IDC_MYEDIT, this);

return TRUE;

}

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/livingpark/archive/2009/09/14/4551640.aspx
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: