设为首页 加入收藏

TOP

15.14 如何在运行时动态创建控件
2013-10-07 00:34:12 来源: 作者: 【 】 浏览:68
Tags:15.14 何在 行时 动态 创建 控件

15.14  如何在运行时动态创建控件

首先介绍一种勉强的代替方法:实现在编写程序时在资源视图中创建好需要的控件,在程序初始化时设置这些控件为隐藏的,在需要显示这些控件时再设置其为可见的。这种方法适用于一些需求不是太高的场合,对于要求比较高的场合(例如动态创建的对象比较多),就应该避免使用该方法。

动态创建控件可以使用MFC中CWnd类中定义的虚函数Create实现,也就是说,在多数情况下CWnd子类所创建的对象均可以通过调用Create函数来实现。下面的例子演示了如何动态地创建一个按钮控件,并且对其进行事件处理,进行消息响应,步骤如下:

(1)创建一个基于对话框的、使用MFC库的Windows应用程序工程DyCtl。

(2)在主对话框类的头文件中声明一个CButton类指针,代码如下:

 class CDyCtlDlg : public CDialog
{
//省略部分不相关代码
private:
CButton *m_pBtn;
};
(3)重载CDyCtlDlg::OnCancel函数,修改CDyCtlDlg构造函数和OnCancel函数,代码如下:
CDyCtlDlg:: CDyCtlDlg (CWnd* pParent /*=NULL*/)
: CDialog(CMFCDlg::IDD, pParent)
{
//{{AFX_DATA_INIT(CMFCDlg)
//}}AFX_DATA_INIT
// Note that LoadIcon does not require a subsequent DestroyIcon in Win32
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);

m_pBtn=NULL;
}

void CDyCtlDlg:: OnCancel()
{
if(m_pBtn)
{
m_pBtn->DestroyWindow();
delete m_pBtn;
m_pBtn=0;
}
}

(4)在主对话框上创建两个按钮控件,分别用于动态创建按钮和销毁该动态创建的按钮,实现其单击事件响应函数如下:
void CDyCtlDlg::OnCreateButton() 
{
if(!m_pBtn)
{  
m_pBtn=new CButton();
m_pBtn ->Create (_T ("Button Title ") ,
WS_CHILD|BS_PUSHBUTTON|WS_VISIBLE,
CRect ( 0, 0, 100 , 24) ,
this ,
16000 );
}
}
void CDyCtlDlg::OnDestroyButton()
{
// TODO: Add your control notification handler code here
if(m_pBtn)
{
m_pBtn->DestroyWindow();
delete m_pBtn;
m_pBtn=0;
}
}

注意:Create函数的最后一个参数为代表本按钮的ID。

(5)在CDyCtlDlg类中添加创建按钮的单击消息响应函数以及消息映射宏,代码如下:

//.h文件
afx_msg void OnMyButton();
//.cpp文件
BEGIN_MESSAGE_MAP(CMFCDlg, CDialog)
//{{AFX_MSG_MAP(CMFCDlg)
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
ON_BN_CLICKED(16000, OnMyButton)  //这里
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
void CDyCtlDlg:: OnMyButton ()
{
// TODO: Add your control notification handler code here
AfxMessageBox("动态创建的按钮!");
}
(6)按Ctrl+F5键编译并运行程序。
【责任编辑:夏书 TEL:(010)68476606】

回书目   上一节   下一节

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇15.16 如何获得系统文件夹路径 下一篇15.17 如何使用RichEdit控件

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: