天天看點

判斷是否已經關聯了對話框

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

    }

}

繼續閱讀