为了账号安全,请及时绑定邮箱和手机立即绑定

是不是要创建一个线程来获取文件加载的进度啊?恳请大侠帮帮忙啊!

是不是要创建一个线程来获取文件加载的进度啊?恳请大侠帮帮忙啊!

C++ C
慕尼黑5688855 2022-10-02 13:09:25
我在对话框中设置了一个菜单,当点击“打开”时出现选择文件对话框,选择文件,打开。这时我想用个进度条来同步显示文件加载时的进度。这是点击菜单中“打开”时的响应函数:void CXkvtPlayerDlg::On32771(){// TODO: 在此添加命令处理程序代码CFileDialog dlg(TRUE,NULL,NULL,OFN_HIDEREADONLY,"virtools文件(*.cmo)|*.cmo");if (IDOK!=dlg.DoModal()){return;}filename1=dlg.GetPathName();OnInitPlayer(); //加载文件的函数,该文件使用Virtools做的一个三维视图文件。GetMenu()->GetSubMenu(0)->EnableMenuItem(0,MF_BYPOSITION|MF_DISABLED|MF_GRAYED);}
查看完整描述

3 回答

?
慕田峪9158850

TA贡献1794条经验 获得超8个赞

首先在页面中加入进度条控件,具体叫什么记不清了,自己找一下
然后绑定变量
如果没猜错的话OnInitPlayer(); 这个函数是整个文件导入的函数吧。
应该从这个函数下手,因为只有这个函数里面才知道文件真正的导入进度。
在这个函数中,首先获取文件的大小,然后没导入一部分之后,算好比例,更新界面上的进度条就可以了。

查看完整回答
反对 回复 2022-10-06
?
动漫人物

TA贡献1815条经验 获得超10个赞

首先打开文件不需要进度条,open是立刻返回,只有读入的时候,如果文件很大才需要进度条,对用户提示。
方法1 循环读入文件,每读一段数据,就更新下进度条,让它前进一小步。
方法2 多线程,在另一个线程里读入,并更新进度条,可以先把进度条做参数传入

查看完整回答
反对 回复 2022-10-06
?
拉丁的传说

TA贡献1789条经验 获得超8个赞

1.在MainFrm.h中生命对象:
CProgressCtrl m_progres;
2.在CMainFrame::OnCreate函数中创建状态栏样式:
m_wndToolBar.SetBarStyle(m_wndToolBar.GetBarStyle() |
CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC);

m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY);
EnableDocking(CBRS_ALIGN_ANY);
DockControlBar(&m_wndToolBar);

3.添加WM_PAINT消息,在消息的处理函数中:
CRect rect;
m_wndStatusBar.GetItemRect(0,&rect);
if(!m_progres.m_hWnd)
{
m_progres.Create(WS_CHILD | WS_VISIBLE ,//| PBS_SMOOTH,
rect,&m_wndStatusBar,123);
}
else
{
m_progres.MoveWindow(rect);
}

4.添加一个菜单,对其进行测试:
void CMainFrame::OnRun()
{
m_progres.StepIt();
}


查看完整回答
反对 回复 2022-10-06
  • 3 回答
  • 0 关注
  • 134 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号