| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1848 人关注过本帖
标题:创建无模式对话框产生的问题
只看楼主 加入收藏
xunxunmimi
Rank: 1
等 级:新手上路
帖 子:70
专家分:0
注 册:2006-12-12
结帖率:100%
收藏
 问题点数:0 回复次数:7 
创建无模式对话框产生的问题
用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
余来
Rank: 6Rank: 6
等 级:贵宾
威 望:26
帖 子:956
专家分:18
注 册:2006-8-13
收藏
得分:0 
dlg不能是全局变量拉,两次Create当然error,换成局部变量就OK

2008-06-12 15:23
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
余来
Rank: 6Rank: 6
等 级:贵宾
威 望:26
帖 子:956
专家分:18
注 册:2006-8-13
收藏
得分:0 
你那不是创建的模态对话框拉,模态用DoModal显示,你换成了ShowWindow了,变成非模态对话框了

关于第二个问题,应该是字符的问题,估计你是复制的网页上的代码,然后粘贴,推荐自己打进去好点,反正这样的错误不好解决,一般放到另外一个地方申明,不行的话就可能名字产生冲突之类的不好解决

2008-06-12 20:39
xunxunmimi
Rank: 1
等 级:新手上路
帖 子:70
专家分:0
注 册:2006-12-12
收藏
得分:0 
前面有句没说清,我创建的是:非模态对话框。
2008-06-13 08:58
余来
Rank: 6Rank: 6
等 级:贵宾
威 望:26
帖 子:956
专家分:18
注 册:2006-8-13
收藏
得分:0 
汗。。。被你弄糊涂了,如果非模式对话框,那必须用到全局变量,但对全局变量两次Create就可能出错,因此在再次创建前,必须判断一下是否曾经创建过解决这个问题

2008-06-13 10:58
xunxunmimi
Rank: 1
等 级:新手上路
帖 子:70
专家分:0
注 册:2006-12-12
收藏
得分:0 
感谢再次回复
    我试了一下,创建无模式对话框时,如果用指针动态创建时,指针变量可以作为 局部变量、全局变量,也可以作为视图类的成员变量。都可以反复弹出并关闭无模式对话框,甚至可以不关闭弹出的对话框而不停地创建对话框,都不会出现问题。但是用 模式对话框的 对象 创建时,不论是作为全局变量还是视图类的成员,都是第一次正确弹出,而第二次弹出时就产生异常!
2008-06-13 19:03
快速回复:创建无模式对话框产生的问题
数据加载中...
 
   



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

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