class MyDlg: public CDialog
{
enum{IDD=IDD1};
//enum{IDD=IDD2};
......
};
如果不使用条件编译,怎么实现动态加载,即不同条件IDD取不同的值?
enum{IDD=IDD1};这条语句可不可以放在*.cpp文件中处理?
{
enum{IDD=IDD1};
//enum{IDD=IDD2};
......
};
如果不使用条件编译,怎么实现动态加载,即不同条件IDD取不同的值?
enum{IDD=IDD1};这条语句可不可以放在*.cpp文件中处理?
解决方案 »
- link: extra operand `/incremental:yes'
- 高分求一个ComboBox Ownerdraw 组合框自绘的例子?
- 关于360度环绕图片处理的问题,高人速来!在线等解决
- tuxedo FML客户端调用服务器问题(VC)(急,在线等,谢谢,马上给分)
- 单步执行正确,直接运行结果会出错,请教各位
- 请问一个关于主窗体向子窗体传递参数的问题?
- 关于一个OCX的回调问题,高手请进,200分
- 如何改变对话框的字体??
- 我装了DDK但不知道怎么进入编辑环境中,该怎么设置呀??
- 好怪的问题,VC的BUG吗?
- 制作类似于excel中记录操作步骤的软件
- 关于MIDI文件播放的问题~~!!
如
class CMyDialog : public CDialog
{
// Construction
public:
CMyDialog (UINT MyIDD = IDD, CWnd* pParent = NULL); // standard constructor
}CMyDialog ::CMyDialog (UINT MyIDD , CWnd* pParent /*=NULL*/)
: CDialog(MyIDD, pParent)
{
}CMyDialog MyDlg(IDD1);
CMyDialog MyDlg(IDD2);
我目前用的方法是在类的构造函数中用Create,根据不同的条件,调用Create时传入不同的参数,因为两个IDD都是固定的,所以只写一次就可以了。如下:CMyDlg::CMyDlg(CWnd *parent)
{
if(...)
{
Create(IDD1,parent);
}
else
{
Create(IDD2,parent);
}
...
}不知用Create和在构造函数中传参,实现的效果有什么区别?
在实际操作时,出了个问题,找了好久才发现原因,在这里说一下。
在用Create的时候,要先创建一个CDialog类型的对象,再用这个对象调用Create函数CMyDlg::CMyDlg(CWnd *parent)
:CDialog() //这句很重要,没有的话会出错
{
if(...)
{
Create(IDD1,parent);
}
else
{
Create(IDD2,parent);
}
...
}11楼说的很有道理,我开始就是因为没有去判断Create成功没有才会出错,其实只要判断一下返回值就知道创建是否成功了,当初之所以偏向于用Create就是因为两个IDD的应用场合是固定的,在构造函数中一次判断就行了,不然,以后每调用一次就得判断一下要用哪个,觉得有点冗余,而且以后其他人修改代码,也不必去理会这个类的实现细节,直接调用构造函数就行了。对于10楼说的模态与非模态的问题,我试了一下,用CDialog两种对话框中都可以正常表示,但在模态对话框中用Create会出错。
所以具体用哪种方法,还要看实际情况。