hur.cn - 华软网

 热门搜索

等待对话框的问题

  作者:未知    来源:网络    更新时间:2011/9/9
C++">CWaitDlg wDlg;  
wDlg.Create(IDD_WAIT_DIALOG,this); 
wDlg.ShowWindow(SW_SHOW); //弹出等待对话框


对话框初始化时,需要很长时间,想做一个等待对话框,在运行初始化代码之前添加以上代码,在初始化结束后,运行wDlg.EndDialog(0);将等待对话框关闭;

据说以上做法是有问题,可是问题在那呢?
---华软 网友回答---
CWaitDlg wDlg; 局部变量,当上述代码所在函数执行完毕之后,该变量就会销毁,所以该对话框是无法显示出来的。
CWaitDlg *pDlg = new CWaitDlg();  
pDlg ->Create(IDD_WAIT_DIALOG,this); 
pDlg ->ShowWindow(SW_SHOW); //弹出等待对话框
这就可以了,因为实在堆上分配内存,需自己释放。
---华软网友回复---
你可以在OnInitDialog中,你可以开启1个定时器,然后在定时器触发事件中EndDialog(0);即可
---华软网友回复---
引用 1 楼 sunxiaopengsun 的回复:
CWaitDlg wDlg; 局部变量,当上述代码所在函数执行完毕之后,该变量就会销毁,所以该对话框是无法显示出来的。
CWaitDlg *pDlg = new CWaitDlg();  
pDlg ->Create(IDD_WAIT_DIALOG,this); 
pDlg ->ShowWindow(SW_SHOW); //弹出等待对话框
这就可以了,因为实在堆上分配内存,需自己释放。

CWaitDlg *pDlg = new CWaitDlg();   
这个不同样是局部指针?
---华软网友回复---
引用 1 楼 sunxiaopengsun 的回复:
CWaitDlg wDlg; 局部变量,当上述代码所在函数执行完毕之后,该变量就会销毁,所以该对话框是无法显示出来的。
CWaitDlg *pDlg = new CWaitDlg();  
pDlg ->Create(IDD_WAIT_DIALOG,this); 
pDlg ->ShowWindow(SW_SHOW); //弹出等待对话框
这就可以了,因为实在堆上分配内存,需自己释放。

局部变量,当上述代码所在函数执行完毕之后,该变量就会销毁,所以该对话框是无法显示出来的。
==============可是确实是看到这个等待对话框了啊
---华软网友回复---
CWaitDlg wDlg,设置为全局变量试一下,我记得在孙鑫的20讲里有一课,就是讲这个问题的
---华软网友回复---
该去学习一下
---华软网友回复---
注意局部变量与全局变量的生存周期,应该能明白过来。
---华软网友回复---
引用 7 楼 lcy_888 的回复:
注意局部变量与全局变量的生存周期,应该能明白过来。

既然它不存在的话,为什么能够看到等待对话框呢?
---华软网友回复---
是局部指针,没错,但是 内存没有释放,


释放的时刻是: 关闭对话框



而不是函数运行完毕 




引用 3 楼 lichunli1022 的回复:
引用 1 楼 sunxiaopengsun 的回复:
CWaitDlg wDlg; 局部变量,当上述代码所在函数执行完毕之后,该变量就会销毁,所以该对话框是无法显示出来的。
CWaitDlg *pDlg = new CWaitDlg();
pDlg ->Create(IDD_WAIT_DIALOG,this);
pDlg ->ShowWindow(SW_SHOW); //弹出等待对话框
……

---华软网友回复---
你的意思是: 看到对话框,但是马上消失,一闪而过,对吧?


如果是这样话

加上以下代码:
 MSG msg;

while(GetMessage(&msg,NULL,0,0))   
{   
TranslateMessage(&msg);   
DispatchMessage(&msg);   
}   




引用 4 楼 lichunli1022 的回复:
引用 1 楼 sunxiaopengsun 的回复:
CWaitDlg wDlg; 局部变量,当上述代码所在函数执行完毕之后,该变量就会销毁,所以该对话框是无法显示出来的。
CWaitDlg *pDlg = new CWaitDlg();
pDlg ->Create(IDD_WAIT_DIALOG,this);
pDlg ->ShowWindow(SW_SHOW); //弹出等待对话框
……

---华软网友回复---
单线程的话,你这个等待对话框也会卡死的
---华软网友回复---
发自定义消息显示那个对话框
---华软网友回复---
引用 11 楼 tzxx 的回复:
单线程的话,你这个等待对话框也会卡死的

没有啊 
---华软网友回复---
引用 10 楼 chouxiaoya8100 的回复:
你的意思是: 看到对话框,但是马上消失,一闪而过,对吧?


如果是这样话

加上以下代码:
 MSG msg;

while(GetMessage(&msg,NULL,0,0))  
{  
TranslateMessage(&msg);  
DispatchMessage(&msg);  
}  





引用 4 楼 lichun……

没有一闪而过,是初始化完成之后对话框才消失的
---华软网友回复---
非模态对话框不好用作等待吧
---华软网友回复---
引用 15 楼 cjqpker 的回复:
非模态对话框不好用作等待吧

应该怎样才能做一个好等待对话框呢?      
华软声明:本内容来自网络,如有侵犯您版权请来信指出,本站立即删除。