当前位置:C++技术网 > 资讯 > 如何创建模态窗口和非模态窗口

如何创建模态窗口和非模态窗口

更新时间:2015-06-24 23:55:39浏览次数:1+次

    你的类CmyDialog要关联到一个资源对话框。那么问题就来了。你的类如何添加进来呢?下面简单说一下。先添加一个窗口资源,然后右击窗口资源,添加类,然后设置类名和基类,确定即可。

    首先说一说模态窗口。模态窗口就是创建后,必须关闭,才能操作父窗口。这个窗口的创建是比较简单的。下面先看代码。

CmyDialog dlg;// - 创建一个窗口对象
dlg.DoModal();  // - 使用对象的方法,产生一个模态对话框

    以上代码是实现模态对话框的创建的。DoModal函数是CDialog类提供的,已经封装好了,直接调用即可产生模态窗口。而你的类CmyDialog是需要继承自CDialog类的,这样你的类就具备窗口的特性了。基类CDialog的函数可以直接使用。
在使用这个类定义一个类对象时,要先包含这个类的头文件。然后就可以使用了。
创建动态窗口方法如下:

CmyDialog dlg;// - 创建一个窗口对象
dlg.Create(IDD_MYDLG);// - 创建一个窗口,将窗口资源和窗口对象关联起来
dlg.ShowWindow(SW_SHOWNOAMAL);// - 显示创建的窗口

    这样创建的窗口是非模态的。所以必须自己创建一下,否则无法将资源和对象关联起来,这样你就无法通过对象操作窗口资源。关联后,就可以方便的创建。而在MFC中,因为有一套机制,如果你不将对象和窗口关联起来,后续的操作会失败,所以,在内部下了断言,如果没有关联,则对象内部的m_hWnd窗口句柄就是NULL,这样就直接断言错误。

    如果你要让你的窗口在函数中执行完毕仍然存在,就要将这个窗口对象dlg的作用域大于使用的函数。至于多大,就看你的窗口要存在的时间。一般,就当做类成员即可。

    如果不想事先就创建好对象,那么就在类成员中定义一个对象指针,在使用时,new一个对象即可。然后Create和ShowWindowd都通过指针调用即可。下面给出代码实现。

CmyDialog * pdlg;// - 窗口对象指针,初始化时,将指针设为NULL
if(pdlg)delete pdlg;// - 随时都可以创建窗口,如果丢失,则很可能造成内存泄露,还会引起其他问题。
pdlg = new CmyDialog;// - 动态创建一个窗口对象
pdlg->Create(IDD_MYDLG);// - 创建一个窗口,将窗口资源和窗口对象关联起来
pdlg->ShowWindow(SW_SHOWNOAMAL);// - 显示创建的窗口

    以上不难,但是经常会用到,弄清楚也是非常有必要的。