创建无模式对话框产生的问题
用VC++建立一个单文档应用程序,在视图中的菜单的单击命令消息处理函数中弹出一个无模式对话框:...
{
dlg.Create(IDD_DIALOG1,this);
dlg.ShowWindow(SW_SHOW);
}
其中,dlg是无模式对话框类的变量,已在视图类的定义中作为视图类的成员变量被定义(CMyDlg dlg;)。或者全局变量。
运行时,第一次单击对应的菜单,弹出模式对话框(对话框中什么操作也没有)。关闭对话框后再次单击对应菜单,产生异常!什么原因?
但是用指针动态创建时却没有异常:无模式对话框可以反复的打开与关闭
...
{
CMyDlg* pDlg=new CMyDlg();//指针作为局部变量,全局变量都可以。
pDlg->Create(IDD_DIALOG1,this);
pDlg->ShowWindow(SW_SHOW);
}
将变量"dlg"定义在函数里作为局部变量,也不行,对话框产生之后马上消失,我试过。因为"dlg"的生命
周期在函数消失后结束了。如下代码:
...
{
CMyDlg dlg;
dlg.Create(IDD_DIALOG1,this);
dlg.ShowWindow(SW_SHOW);
}
还有一个重要问题,有时在视图类的头文件里添加一个头文件声明后,产生连接错误:
[color=Red]error C2143: syntax error : missing ';' before '*'[/color]
错误行是在系统自动生成的代码行,如下红色行:
class CSingleView : public CView
{
protected: // create from serialization only
CSingleView();
DECLARE_DYNCREATE(CSingleView)
// Attributes
public:
[color=Red]CSingleDoc* GetDocument();//错误行[/color]
但是将此错误行注释掉并编译一次,再去掉注释并编译,却能通过编译并能运行。有好几次都碰到这样的问题。
不知是什么原因。
[[it] 本帖最后由 xunxunmimi 于 2008-6-12 19:32 编辑 [/it]] 你那不是创建的模态对话框拉,模态用DoModal显示,你换成了ShowWindow了,变成非模态对话框了
关于第二个问题,应该是字符的问题,估计你是复制的网页上的代码,然后粘贴,推荐自己打进去好点,反正这样的错误不好解决,一般放到另外一个地方申明,不行的话就可能名字产生冲突之类的不好解决 前面有句没说清,我创建的是:非模态对话框。 汗。。。被你弄糊涂了,如果非模式对话框,那必须用到全局变量,但对全局变量两次Create就可能出错,因此在再次创建前,必须判断一下是否曾经创建过解决这个问题 感谢再次回复
我试了一下,创建无模式对话框时,如果用指针动态创建时,指针变量可以作为 局部变量、全局变量,也可以作为视图类的成员变量。都可以反复弹出并关闭无模式对话框,甚至可以不关闭弹出的对话框而不停地创建对话框,都不会出现问题。但是用 模式对话框的 对象 创建时,不论是作为全局变量还是视图类的成员,都是第一次正确弹出,而第二次弹出时就产生异常!
页:
[1]
