CDialog两种模式
1非模态对话框
2模态对话框
都可以创建多个指定ID的对象
非模态对话框
定义一个IDD_DIALOG1; 没有对应的类
CDialog c;
CDialog *d;
c.Create(IDD_DIALOG1,this);
c.ShowWindow(SW_SHOWMAXIMIZED);
c.DestroyWindow();
d = new CDialog;
int i=d->Create(IDD_DIALOG1,this);
d->ShowWindow(SW_SHOW);
d->DestroyWindow();
两种方式都可以,对象是各自独立的,引用的资源相同
利用函数DestroyWindow()销毁Create的创建.但是对象还在!并没有销毁!
好比Create 之前 CDialog 对象只是个躯干,只有Create后,加入资源,就好象躯干有了思想,详细的行为,根据IDD_DIALOG1的封装类而定,如果没有类封装,那么其行为,为默认行为函数!!
有类封装的IDD_DIALOG2 ==CMY
CMY a,b,e;
if(!IsWindow(a.m_hWnd))
{
a.Create(CMY::IDD,this);
}
a.ShowWindow(SW_SHOW);
a.DestroyWindow();
if(!IsWindow(b.m_hWnd))
{
b.Create(IDD_DIALOG2,this);
}
b.ShowWindow(SW_SHOW);
b.DestroyWindow();
if(!IsWindow(e.m_hWnd))
{
e.Create(IDD_DIALOG1,this);
}
e.ShowWindow(SW_SHOW);
e.DestroyWindow();
注意CMY::IDD 就等于IDD_DIALOG2,所以Create有两种方法.
还有e.Create(IDD_DIALOG1,this);这句 ,他的行为就只能执行与IDD_DIALOG2相对应(ID相同)的控件的CMY中的消息映射之行为.说白了这句话就是有解释价值没有使用价值.
模态对话框
其实就是封装的Create和DestroyWindow()的调用.而非模态对话框需要人工的创建与销毁