WEB开发网
开发学院软件开发VC 在MFC中创建动态控件的生成与响应 阅读

在MFC中创建动态控件的生成与响应

 2007-03-15 21:52:12 来源:WEB开发网   
核心提示: 这里不能用ClassWizard添加变量,也不要在DoDataExchange()中添加控制变量,在MFC中创建动态控件的生成与响应(7),因为动态控件一开始并不存在,在DoDataExchange()中添加控制变量会造成运行错误,各种不同的控件做法略有不同,但思路和步骤都是类似的,这里我

这里不能用ClassWizard添加变量,也不要在DoDataExchange()中添加控制变量,因为动态控件一开始并不存在,在DoDataExchange()中添加控制变量会造成运行错误。这里我们只需在头文件中随意定义一个int型变量作为控制变量即可,如:

int m_SelRadio;

在构造函数中设置其初值为0:m_SelRadio = 0;

在上面的创建按钮的语句中,用SetCheck()函数设置初始选中的按钮:

CButton *p_MyRadio[3];
p_MyRadio[0] = NewMyRadio( IDC_MYRADIO1, CRect(15,90,60,105), WS_GROUP );
p_MyRadio[1] = NewMyRadio( IDC_MYRADIO2, CRect(15,108,60,123), 0 );
p_MyRadio[2] = NewMyRadio( IDC_MYRADIO3, CRect(15,126,60,141), 0 );
p_MyRadio[m_SelRadio]->SetCheck(1);//设置第一个单选为选中状态

在SetCheck()函数中,参数为1表示设置为选中状态,为0表示未选中状态。

4.添加鼠标单击响应函数:

鼠标单击某单选按钮后,其状态已经能自动改变,这里我们还需修改控制变量m_SelRadio的值,以便跟踪选中的单选按钮。

首先在MESSAGE_MAP中把鼠标单击消息与响应函数联系起来:

BEGIN_MESSAGE_MAP(CTextEditorView, CFormView)
//{{AFX_MSG_MAP(CTextEditorView)
ON_BN_CLICKED(IDC_ICONBUT0, OnIconbut0)//ClassWizard在此处添加
//}}AFX_MSG_MAP
ON_BN_CLICKED(IDC_MYRADIO1, OnMyRadio1)//单选按钮1
ON_BN_CLICKED(IDC_MYRADIO2, OnMyRadio2)//单选按钮2
ON_BN_CLICKED(IDC_MYRADIO3, OnMyRadio3)//单选按钮3
END_MESSAGE_MAP()

然后在头文件的MESSAGE_MAP中定义单击函数:

protected:
//{{AFX_MSG(CTextEditorView)
afx_msg void OnIconbut0();//ClassWizard在此处添加
//}}AFX_MSG
afx_msg void OnMyRadio1();//单选按钮1
afx_msg void OnMyRadio2();//单选按钮2
afx_msg void OnMyRadio3();//单选按钮3
DECLARE_MESSAGE_MAP()

这里注意不要把函数加在AFX_MSG区间内,以防影响ClassWizard的使用。

定义具体的响应函数(这里是用手工加入的,不是用ClassWizard加入的):

//单击单选按钮1void CTextEditorView::OnMyRadio1()
{
m_SelRadio=0;
}

//单击单选按钮2void CTextEditorView::OnMyRadio2()
{
m_SelRadio=1;
}

//单击单选按钮3void CTextEditorView::OnMyRadio3()
{
m_SelRadio=2;
}

5.回收资源:

在析构函数中,回收创建的单选按钮(也可以在不使用单选按钮时立即回收):

CTextEditorView::~CTextEditorView()
{
int i;
for( i=0; i<3; i++)
{
 if(p_MyRadio[i])
 delete p_MyRadio[i];
}
}

以上就是动态控件的生成和响应方法,各种不同的控件做法略有不同,但思路和步骤都是类似的,希望以上实例对你能够有所帮助。

上一页  2 3 4 5 6 7 

Tags:MFC 创建 动态

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接