MFC:如何判断非模态对话框已经创建了

来源:互联网 发布:windows loader v3.27 编辑:程序博客网 时间:2024/05/01 21:40

MFC:如何判断非模态对话框已经创建了

 

        在使用MFC做UI时,经常会进行不同界面(对话框)之间的切换。这时就需要去判断对话框是否已经被创建。创建非模态对话框的两种方式:类的对象与类的指针。

现有类 classCTestDialog : public CDialog {      }.

 

1.      使用类的对象处理对话框

CTestDialog    m_TestDialog; //定义类CTestDialog的对象

 

if(m_TestDialog.GetSafeHwnd())   //为TRUE 说明对话框已经被创建

{

       m_TestDialog.ShowWindow(true);

}

else

{

        m_TestDialog.Create(IDD_TEST_DIALOG);

}

 

2.      使用类的指针处理对话框

CTestDialog    * p_TestDialog;      //定义类CTestDialog的指针

p_TestDialog=  NULL;

 

if (p_TestDialog== NULL)    //直接判断指针是否为空来判断对话框是否被创建

{

        p_TestDialog = new CTestDialog ();

        p_TestDialog ->Create(IDD_TEST_DIALOG);

        p_TestDialog->ShowWindow(SW_SHOWNORMAL);

}

else

{

        p_TestDialog->ShowWindow(SW_SHOWNORMAL);

}

 

3.    两者的区别:

引用成员时:对象用"   .   "操作符;   指针用"   ->   "操作符。

类的对象:是利用类的构造函数在内存中分配一块内存;用的是内存栈,是个局部的临时变量。  
类的指针:是一个内存地址值,他指向内存中存放的类对象;用的是内存堆,是个永久变量,除非你释放它。

关于生命期周:  对象:若是成员变量,则是类的析构函数来释放空间;若是函数中的临时变量,则作用域是该函数体内。而指针:则需利用delete 在相应的地方释放分配的内存块。

 

C++的精髓之一就是多态性,只有指针或者引用可以达到多态,对象不行。

 

用指针:第一能实现多态;第二,在函数调用,传指针参数。不管你的对象或结构参数多么庞大,你用指针,传过去的就是4个字节。如果用对象,参数传递占用的资源就太大了。

但指针比较危险,new的内存一定得用delete才能释放,需注意。

0 0
原创粉丝点击