Lesson7 对话框用户界面程序的编写

模态对话框:运行当前对话框时,程序将会暂停执行,知道我们关闭该模态对话框,此时不能点击非活动的对话框

创建模态对话框 CDialog::DoModal
————————
#include "TestDlg.h"
CTestDlg dlg; //并不知道CTestDlg是什么类,所以必须包含其所在的头文件
dlg.DoModal(); //调用一个模态对话框
模态对话框的关闭:CDialog::EndDialog

非模态对话框的创建  CDialog::Create
————————
CTestDlg dlg;
dlg.Create(IDD_DIALOG1,this);  //第二个参数为父窗口的指针,this表示其父窗口为view类
dlg.ShowWindow(SW_SHOW); //DoModal中已经包含了ShowWindow了
————
但此时窗口仍无法显示,因为dlg是一个局部变量,许将其定义为成员变量,或是定义为一个指针,在堆上定义一个内存。
CTestDlg *pDlg=new CTestDlg;
pDlg->Create(IDD_DIALOG1,this);
pDlg->ShowWindow(SW_SHOW);
————————

当点击Button "Add" 时,在对话框窗口中动态添加一个新的按钮
1. 首先响应"Add"按钮的单击事件,在CW中添加一个函数
先定义一个CButton对象:在CTestDlg类上东键右键添加一个成员变量CButton,Private,再编辑代码
————————
{
m_btn.Create("文本",BS_DEFPUSHBUTTON | WS_VISIBLE | WS_CHILD,CRect(0,0,100,100),this,123); //参数含义详见MSDN
}
————
此时,再次点击"Add"按钮时,会重复创建窗口,会报错。此时可以:
a) 在CTestDlg中添加一个BOOL型的变量m_bIsCreate来判断是否已经创建窗口,
    先在CTestDlg中将m_bIsCreate=FALSE,然后在OnBtnAdd()函数中判断
——
{
    if(m_bIsCreate==FALSE)
    {
         m_btn.Create("文本",BS_DEFPUSHBUTTON | WS_VISIBLE | WS_CHILD,CRect(0,0,100,100),this,123);
         m_bIsCreate=TRUE;
    }
     else
    {
         m_btn.DestroyWindow();
         m_bIsCreate=FALSE;
    }
}
——
b) 定义一个局部的变量来判断
——
{
     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;
    }
}
——
c) 最简单的方式:对于从CWnd派生的类,其内部都有一个成员变量m_hWnd,保存了窗口的句柄,当对象和窗口相关联时,句柄有值,当
对象没有和任何窗口相关联时,句柄为空。
{
     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();
    }
}


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值