标题:创建无模式对话框产生的问题
取消只看楼主
xunxunmimi
Rank: 1
等 级:新手上路
帖 子:70
专家分:0
注 册:2006-12-12
结帖率:100%
 问题点数:0 回复次数:4 
创建无模式对话框产生的问题
用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 变量 IDD 单击 
2008-06-10 13:25
xunxunmimi
Rank: 1
等 级:新手上路
帖 子:70
专家分:0
注 册:2006-12-12
得分:0 
怎么没人回答?
2008-06-12 14:35
xunxunmimi
Rank: 1
等 级:新手上路
帖 子:70
专家分:0
注 册:2006-12-12
得分:0 
谢谢你的提醒。

将变量"dlg"定义在函数里作为局部变量,也不行,对话框产生之后马上消失,我试过。因为"dlg"的生命
周期在函数消失后结束了。如下代码:
...
{
  CMyDlg  dlg;
  dlg.Create(IDD_DIALOG1,this);
  dlg.ShowWindow(SW_SHOW);
}

还有一个重要问题,有时在视图类的头文件里添加一个头文件声明后,产生连接错误:
error C2143: syntax error : missing ';' before '*'
错误行是在系统自动生成的代码行,如下红色行:

class CSingleView : public CView
{
protected: // create from serialization only
    CSingleView();
    DECLARE_DYNCREATE(CSingleView)

// Attributes
public:
    CSingleDoc* GetDocument();//错误行

但是将此错误行注释掉并编译一次,再去掉注释并编译,却能通过编译并能运行。有好几次都碰到这样的问题。
不知是什么原因。

[[it] 本帖最后由 xunxunmimi 于 2008-6-12 19:32 编辑 [/it]]
2008-06-12 19:26
xunxunmimi
Rank: 1
等 级:新手上路
帖 子:70
专家分:0
注 册:2006-12-12
得分:0 
前面有句没说清,我创建的是:非模态对话框。
2008-06-13 08:58
xunxunmimi
Rank: 1
等 级:新手上路
帖 子:70
专家分:0
注 册:2006-12-12
得分:0 
感谢再次回复
    我试了一下,创建无模式对话框时,如果用指针动态创建时,指针变量可以作为 局部变量、全局变量,也可以作为视图类的成员变量。都可以反复弹出并关闭无模式对话框,甚至可以不关闭弹出的对话框而不停地创建对话框,都不会出现问题。但是用 模式对话框的 对象 创建时,不论是作为全局变量还是视图类的成员,都是第一次正确弹出,而第二次弹出时就产生异常!
2008-06-13 19:03



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-218428-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 1.118309 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved