class CDialog1:public Cdialog
{
public:
enum{IDD=IDD_DIALOG1};
}class CDialog2:public Cdialog
{
public:
enum{IDD=IDD_DIALOG2};
}void main()
{
CDialog1 m_page1;
CDialog2 m_page2;
m_page1.Creat(IDD_DIALOG2);//在CDialog类中IDD为常量,为什么还能赋予另一个ID呢?
m_page1.ShowWindow(SW_SHOW);//为什么仍然能显示IDD_DIALOG2资源对话框?
}
{
public:
enum{IDD=IDD_DIALOG1};
}class CDialog2:public Cdialog
{
public:
enum{IDD=IDD_DIALOG2};
}void main()
{
CDialog1 m_page1;
CDialog2 m_page2;
m_page1.Creat(IDD_DIALOG2);//在CDialog类中IDD为常量,为什么还能赋予另一个ID呢?
m_page1.ShowWindow(SW_SHOW);//为什么仍然能显示IDD_DIALOG2资源对话框?
}
m_page1.Creat(IDD_DIALOG2);//在CDialog类中IDD为常量,为什么还能赋予另一个ID呢?OK,这里应该这么理解,你建立了一个CDialog1 继承了 CDialog
你用的Create是CDialog的东西,这个CDialog是继承CWnd的,因此,你用一个标准的MFC库上的接口生成了一个窗口,在生成的时候赋予它一个参数表示他创建用的资源,一切都是那么正藏。m_page1.ShowWindow(SW_SHOW);//为什么仍然能显示IDD_DIALOG2资源对话框?
你创建的是什么,显示的就是什么以上是对你做的后面的事情的解析//-----------------------------------------
enum{IDD=IDD_DIALOG1};
这句只是MFC用于标记你的这个Dialog所描述的默认的窗口创建的模板,但并不是说最后就不能修改。CDialog1 m_page1;
m_page1.DoModal();这样就会用你的默认的模板去进行UI的创建了显示了。
OK,如果你觉得不行。可以简单点用其他代码来理解你现在的代码,以表示这不是你的问题。Step1:
CDialog dlg;
dlg.DoModal();Step2:
CDialog dlg;
dlg.Create(IDD_XXX); //IDD_XXX自己会填了吧
dlg.ShowWindow(SW_SHOW);
这里的IDD_DIALOG1可以理解成IDD的缺省值,也可以称做默认值。正如C++函数重载概念一样,这个值也是可以重新赋予的。
CDialog2 m_page2;m_page1.Create(IDD_DIALOG2);//CDialog1类的实例m_page1,建立窗口时,加载的是IDD_DIALOG2模板的对话框。
如这个实例中有操作非IDD_DIALOG2模板中的控件,将非法。
一般不要这样做,除非有特殊要求。
enum points{ one,two,three}//定义类型
points a;//定义变量
a = one;
class CDialog1:public Cdialog
{
public:
}class CDialog2:public Cdialog
{
public:
}
void main()
{
CDialog1 m_page1;
CDialog2 m_page2;m_page1.Creat(IDD_DIALOG2);// ok
m_page1.ShowWindow(SW_SHOW);// ok
不过这样的一定要传递资源框的id了
比如这样既就不行
CDialog1 dlg;//不行了那么枚举enum{IDD=IDD_DIALOG1};
enum{IDD=IDD_DIALOG2};
在这里的作用就很明显了,为了使得对话框能有个默认构造函数。枚举不是常量么,怎么还可以重新赋值?
m_page1.Creat(IDD_DIALOG2);// 不是对IDD 重新赋值,而是显式给
create函数传递对话框资源id