MFC控件的SubclassDlgItem

MFC控件的SubclassDlgItem

 
要在程序中建立新设计的控件,显然不能用自动建立的办法,由于对话框模板对新控件的特性一无所知.程序能够用手工方法建立控件,在调用派生类的Create函数时,派生类会调用基类的Create函数建立控件.用Create函数建立控件是一件比较麻烦的工做,程序须要为函数指定一大堆的控件风格以及控件的坐标和ID.特别是控件的坐标,没有经验的程序员很难确切地安排控件的位置和大小,每每须要反复调整.利用MFC的CWnd::SubclassDlgItem提供的动态链接功能,能够避免Create函数的许多麻烦,该函数大大简化了在对话框中建立派生控件的过程.

  你们知道,在用手工方法建立控件时,先要构建一个控件对象,而后再用Create函数在屏幕上建立控件窗口,也就是说,控件的建立工做是由控件对象完成的.动态链接的思路则不一样,SubclassDlgItem能够把对话框中已有的控件与某个窗口对象动态链接起来,该窗口对象将接管控件的消息处理,从而使控件具备新的特性.SubclassDlgItem函数的声明为程序员

 

BOOL SubclassDlgItem( UINT nID, CWnd* pParent );函数

 

  参数nID是控件的ID,pParent是指向父窗口的指针.若链接成功则函数返回TRUE,不然返回FALSE.this

  综上所述,要在程序中使用派生控件,应该按下面两步进行:spa

在对话框模板中放置好基类控件.设计

在对话框类中嵌入派生控件类的对象.指针

在OnInitDialog中调用SubclassDlgItem将派生类的控件对象与对话框中的基类控件相链接,则这个基类控件变成了派生控件.对象

 

  例如,若是要在对话框中使用新设计的编辑框控件,应先在对话框模板中的合适位置放置一个普通的编辑框,而后,在OnInitDialog函数中按下面的方式调用SubclassDlgItem便可:生命周期

BOOL CMyDialog::OnInitDialog()it

{table

CDialog::OnInitDialog();

m_MyEdit.SubclassDlgItem(IDC_MYEDIT, this);

return TRUE;

}

 

 

还有个前提  就是edit1还在生命周期内。你能够试试在主类里建个CEditnew类的指针 的成员变量,而后在初始化里给这个指针赋值为new CEditnew()  后面照旧。试试好比成员变量 CEditnew m_myEdit;而后在初始化中:m_myEdit = new CEditnew();m_myEdit->SubclassDlgItem(IDC_EDIT1,this);m_myEdit->ShowWindow(SW_SHOW);这样试试。
相关文章
相关标签/搜索