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();
}
}