vc弹出等待对话框高手请进

slj_win 2010-08-27 09:29:32
CDialog dlg;
dlg.Create(IDD_DIALOG_SHOW); //IDD_DIALOG_SHOW为创建的要弹出的对话框
dlg.CenterWindow(this); //对话框居中显示
dlg.SetDlgItemText(IDC_WAIT, "Wait begin......"); //IDC_WAIT为一个静态文本框,不可编辑
dlg.ShowWindow(SW_SHOWNOACTIVATE);
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

这里面就是要处理的代码,计算的时间多长都可以

当然,你可以在代码之中插入代码

dlg.SetDlgItemText(IDC_WAIT, ".......");

来告诉使用者处理进行了多少。

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
dlg.EndDialog(0);//处理完,关闭对话框

以上是在网上查到的资料
自己新建了一个对话框ID为IDD_DIALOG_SHOW(没有为此对话框新建类)在对话框上放了一个静态文本框ID为IDC_WAIT其他都照搬,可是出来的对话框上怎么没有文字啊!
...全文
564 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
向立天 2010-08-30
  • 打赏
  • 举报
回复
你应该用多线程处理
sbqjhipr 2010-08-30
  • 打赏
  • 举报
回复
static UINT InitThread(LPVOID pParam);
AfxBeginThread(InitThread, this);开始一个线程,参数2可以是一个窗体的指针也可以是其它反正是一个指针想放什么都行
Polyglot_g 2010-08-30
  • 打赏
  • 举报
回复
顶!!!!!
slj_win 2010-08-30
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 sinservice 的回复:]
你可以先开工作线程,
CreateThread work_func

这个work_func就是你的工作,它将在后台运行,

前台是dlg,你接下来dlg.DoModal

在work_func里,用SendMessage对dlg发送进度消息,当work_func结束的时候,发送一个结束消息,
这些消息你都可以自定义。
[/Quote]

没有开启过线程,能够给些代码参考下啊!
slj_win 2010-08-30
  • 打赏
  • 举报
回复
谁有源码发我邮箱里吧!353493807@qq.com
「已注销」 2010-08-27
  • 打赏
  • 举报
回复
dlg.ShowWindow(SW_SHOWNOACTIVATE);
线程阻塞在这里了,其实不算是阻塞,只是线程现在去忙dlg里的工作了,下面的语句必须等到enddialog之后才能执行。

你无非是想做一个进度窗口,后台跑工作,你应该在dlg之前开启工作线程。如果你要显示进度,不要直接用SetWindowText,会崩溃,因为你的工作线程不在窗口处理线程里,你可以send消息给dlg。
FlyToTMoon 2010-08-27
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 slj_win 的回复:]
串口发送时提示 正在发送,请等待。。
[/Quote]
用MFC的話直接做個對話框,生成的類名DLG
在VIEW類響應菜單的代碼里寫
DLG dlgwait;
wait.DoModl();

話說。。這樣的話要這對話框幹嗎。。。直接顯示這個waiting不就行了
slj_win 2010-08-27
  • 打赏
  • 举报
回复
串口发送时提示 正在发送,请等待。。
slj_win 2010-08-27
  • 打赏
  • 举报
回复
在view类里有个响应菜单点击的函数,里面调用一个串口发送函数。
FlyToTMoon 2010-08-27
  • 打赏
  • 举报
回复
dlg.SetDlgItemText(IDC_WAIT, "Wait begin......");
在哪邊調用的
OnInitDialog()?
dlg()?
OnPaint()?
「已注销」 2010-08-27
  • 打赏
  • 举报
回复
你可以先开工作线程,
CreateThread work_func

这个work_func就是你的工作,它将在后台运行,

前台是dlg,你接下来dlg.DoModal

在work_func里,用SendMessage对dlg发送进度消息,当work_func结束的时候,发送一个结束消息,
这些消息你都可以自定义。



slj_win 2010-08-27
  • 打赏
  • 举报
回复
caojian005这个跟我最近的项目蛮像的SOCKET的接受,不过我就是在对话框里面做的所以没这么多问题
在对话框中做的?能说一下怎么实现的啊?
FlyToTMoon 2010-08-27
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 slj_win 的回复:]

引用 4 楼 caojian005 的回复:
引用 3 楼 slj_win 的回复:
串口发送时提示 正在发送,请等待。。

用MFC的話直接做個對話框,生成的類名DLG
在VIEW類響應菜單的代碼里寫
DLG dlgwait;
wait.DoModl();

話說。。這樣的話要這對話框幹嗎。。。直接顯示這個waiting不就行了


这样的话后台就不能跑工作啦!看来得开……
[/Quote]
没仔细看,嗯
用thread吧,或者看其他人有没什么办法
这个跟我最近的项目蛮像的SOCKET的接受,不过我就是在对话框里面做的所以没这么多问题
slj_win 2010-08-27
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 caojian005 的回复:]
引用 3 楼 slj_win 的回复:
串口发送时提示 正在发送,请等待。。

用MFC的話直接做個對話框,生成的類名DLG
在VIEW類響應菜單的代碼里寫
DLG dlgwait;
wait.DoModl();

話說。。這樣的話要這對話框幹嗎。。。直接顯示這個waiting不就行了
[/Quote]

这样的话后台就不能跑工作啦!看来得开个线程啦!
slj_win 2010-08-27
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 sinservice 的回复:]
dlg.ShowWindow(SW_SHOWNOACTIVATE);
线程阻塞在这里了,其实不算是阻塞,只是线程现在去忙dlg里的工作了,下面的语句必须等到enddialog之后才能执行。

你无非是想做一个进度窗口,后台跑工作,你应该在dlg之前开启工作线程。如果你要显示进度,不要直接用SetWindowText,会崩溃,因为你的工作线程不在窗口处理线程里,你可以send消息给dlg。……
[/Quote]
sinservice能否说的详细些,具体怎么写代码啊,我刚接触vc不知道怎么去写。

64,282

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧