1.对话框类型及创建
对话框分为模态对话框和非模态对话框两种。二者的区别在于当对话框打开时,是否允许用户进行其他对象的操作。
当一个模态对话框打开时,用户只能与该对话框进行交互,而其他用户界面对象收不到输入信息。
非模态对话框,与模态对话框不同,当用户打开非模态对话框时,依然可以操作其他窗口。
【创建对话框】
资源→新建dialog→双击新建类
资源→menu→双击→在菜单中新建“对话框”ID_DIALOG→右键:添加事件处理程序
COMMAND view类
#include "TestDlg.h"
void Cmfc7_1View::OnDialog()
{
//模态对话框的创建
CTestDlg dlg;
dlg.DoModal();
}
--------------------------------
void Cmfc7_1View::OnDialog()
{
//非模态对话框的创建
CTestDlg *pDlg = new CTestDlg();
pDlg->Create( IDD_DIALOG1, this);
pDlg->ShowWindow( SW_SHOW);
}
此处,若是 CTestDlg dlg,是局部变量,对话框只会闪一下。要定义指针,分配堆内存
2. 动态创建按钮
【操作】在资源 dialog→IDD_DIALOG1中添加button,
id IDC_BTN_ADD,
caption Add
【操作】右键点击Add按钮,添加事件处理程序:
消息类型 BN_CLICKED
类 CTestDlg
函数名OnBnClickedBtnAdd
【操作】右键点击CTestDlg添加成员变量
private:
CButton m_btn;
bool m_blsCreate; //判断"文本"按钮是否创建(全局变量)
【程序】点击Add,生成"文本"按钮,再点击,消失
//使用全局变量m_blsCreate判断窗口是否创建
void CTestDlg::OnBnClickedBtnAdd()
{
if( m_bIsCreate == FALSE)
{
m_btn.Create("文本",BS_DEFPUSHBUTTON | WS_VISIBLE | WS_CHILD,
CRect( 0, 0, 100, 100), this, 123);//ID号可以随意改变
m_bIsCreate = TRUE;
}
else
{
m_btn.DestroyWindow();
m_bIsCreate = FALSE;
}
}
------------------------------------------------------------------
//使用局部变量blsCreate判断窗口是否创建
void CTestDlg::OnBnClickedBtnAdd()
{
static BOOL bIsCreate = FALSE;//静态局部变量,只初始化一次
if( bIsCreate == FALSE)
{
m_btn.Create("文本",BS_DEFPUSHBUTTON | WS_VISIBLE | WS_CHILD,
CRect( 0, 0, 100, 100), this, 123);
bIsCreate = TRUE;
}
else
{
m_btn.DestroyWindow();
bIsCreate = FALSE;
}
}
------------------------------------------------------------------
//使用 m_hWnd(保存对象窗口的句柄)判断窗口是否创建
void CTestDlg::OnBnClickedBtnAdd()
{
if( !m_btn.m_hWnd )//判断句柄是否为空
{
m_btn.Create("文本",BS_DEFPUSHBUTTON | WS_VISIBLE | WS_CHILD,
CRect( 0, 0, 100, 100), this, 123);//ID号可以随意改变
}
else
{
m_btn.DestroyWindow();
}
}