{
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资源对话框?
}
7 个解决方案
#1
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);
#2
enum{IDD=IDD_DIALOG1};
这里的IDD_DIALOG1可以理解成IDD的缺省值,也可以称做默认值。
正如C++函数重载概念一样,这个值也是可以重新赋予的。
这里的IDD_DIALOG1可以理解成IDD的缺省值,也可以称做默认值。
正如C++函数重载概念一样,这个值也是可以重新赋予的。
#3
CDialog1 m_page1;
CDialog2 m_page2;
m_page1.Create(IDD_DIALOG2);//
CDialog1类的实例m_page1,建立窗口时,加载的是IDD_DIALOG2模板的对话框。
如这个实例中有操作非IDD_DIALOG2模板中的控件,将非法。
一般不要这样做,除非有特殊要求。
CDialog2 m_page2;
m_page1.Create(IDD_DIALOG2);//
CDialog1类的实例m_page1,建立窗口时,加载的是IDD_DIALOG2模板的对话框。
如这个实例中有操作非IDD_DIALOG2模板中的控件,将非法。
一般不要这样做,除非有特殊要求。
#4
枚举不是常量么,怎么还可以重新赋值?
#5
枚举的开始值可以不同啊!
#6
enum points{ one,two,three}//定义类型
points a;//定义变量
a = one;
#7
和枚举不枚举没关系,程序也可以运行比如
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
#1
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);
#2
enum{IDD=IDD_DIALOG1};
这里的IDD_DIALOG1可以理解成IDD的缺省值,也可以称做默认值。
正如C++函数重载概念一样,这个值也是可以重新赋予的。
这里的IDD_DIALOG1可以理解成IDD的缺省值,也可以称做默认值。
正如C++函数重载概念一样,这个值也是可以重新赋予的。
#3
CDialog1 m_page1;
CDialog2 m_page2;
m_page1.Create(IDD_DIALOG2);//
CDialog1类的实例m_page1,建立窗口时,加载的是IDD_DIALOG2模板的对话框。
如这个实例中有操作非IDD_DIALOG2模板中的控件,将非法。
一般不要这样做,除非有特殊要求。
CDialog2 m_page2;
m_page1.Create(IDD_DIALOG2);//
CDialog1类的实例m_page1,建立窗口时,加载的是IDD_DIALOG2模板的对话框。
如这个实例中有操作非IDD_DIALOG2模板中的控件,将非法。
一般不要这样做,除非有特殊要求。
#4
枚举不是常量么,怎么还可以重新赋值?
#5
枚举的开始值可以不同啊!
#6
enum points{ one,two,three}//定义类型
points a;//定义变量
a = one;
#7
和枚举不枚举没关系,程序也可以运行比如
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