实现功能:
点击A按钮,然后在对话框上生成一个B按钮;
算法:
第一步:在对话框上静态绘制一个A按钮IDC_BTN_ADD;
第二步:在CTestDlg类里面创建A按钮命令响应函数;
void CTestDlg::OnBtnAdd()
{
// TODO: Add your control notification handler code here
}
第三步:在命令响应函数里面创建动态按钮;
void CTestDlg::OnBtnAdd()
{
// TODO: Add your control notification handler code here
m_btn.Create("维新",BS_DEFPUSHBUTTON | WS_VISIBLE | WS_CHILD,CRect(0,0,100,100),this,123);
}
问题:点击两次要出错?
m_btn已经绑定了一个按钮,不能再绑定第二个按钮;
解决方法一:成员变量;
在CTestDlg类里面增加BOOL m_bIsCreate;判断是否已经创建了一个按钮;
代码修改为:
if(!m_bIsCreate)
m_btn.Create("维新",BS_DEFPUSHBUTTON | WS_VISIBLE | WS_CHILD,CRect(0,0,100,100),this,123);
else
{
m_btn.DestroyWindow();
m_bIsCreate=FALSE;
}
使用局部变量BOOL bIsCreate=FALSE; 是不可以的;
解决方法二:静态变量:
static BOOL bIsCreate=FALSE;
if(!bIsCreate)
m_btn.Create("维新",BS_DEFPUSHBUTTON | WS_VISIBLE | WS_CHILD,CRect(0,0,100,100),this,123);
else
{
m_btn.DestroyWindow();
m_bIsCreate=FALSE;
}
★★★★★解决方法三:句柄;
使用按钮自身的句柄:
if(!m_btn.m_hWnd)
m_btn.Create("维新",BS_DEFPUSHBUTTON | WS_VISIBLE | WS_CHILD,CRect(0,0,100,100),this,123);
else
m_btn.DestroyWindow();