首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将进度控件与加载在VisualC++对话框中的一组数据同步

如何将进度控件与加载在VisualC++对话框中的一组数据同步
EN

Stack Overflow用户
提问于 2015-05-22 08:47:03
回答 2查看 1.7K关注 0票数 4

我正在尝试在我的对话框中添加一个进度控制,这将在循环的每一次迭代中逐步执行,直到完成为止。我以前从来没有玩过进度控制,所以我完全不知道该从哪里开始。我在对话框中添加了进度控制资源视图,但它只是显示为一个空进度控件。我希望进度控件在按下按钮后动态显示/更新某个位置的图像。我试图在Visualc++环境中的对话框中添加进度控件。

添加此工具后,将以下代码添加到main.cpp中:

代码语言:javascript
复制
void CPanoramicsampleDlg::OnNMCustomdrawProgress1(NMHDR *pNMHDR, LRESULT *pResult){
}

我可以在文本控件中显示加载过程,如下所示:

代码语言:javascript
复制
sprintf_s(pack1,"Data%d%%",Event);
::SetWindowText(GetDlgItem(IDC_Static)->m_hWnd,pack1);

因此,通过这种方式,我可以在文本窗口中看到加载过程为%d,但我不知道如何通过进度控件显示加载过程,以及如何和在何处定义该进度控件的范围,甚至进度条句柄,等等。最后,我想知道是否有任何控制进度的功能,例如:

代码语言:javascript
复制
::EnableWindow(GetDlgItem(IDC_Progress1)->m_hWnd);
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-05-22 09:32:16

您应该首先为控件添加一个变量,方法是右键单击对话框编辑器中的进度条,然后选择add variable .然后,您的对话框类将有一个CProgressCtrl类的实例,然后您可以在该实例上调用IInspectable在他的答复中提到的成员。删除OnNMCustomdrawProgress1处理程序,您不需要它。

例如:

代码语言:javascript
复制
m_progressCtrl.EnableWindow(TRUE);
m_progressCtrl.SetRange(0, 100);
m_progressCtrl.SetPos(75);

然后,无论您提到的eventParam1值是什么,都要在开始值和停止值之间进行比例,并调用SetPos。

评论后的最新情况:

在SetRange()函数中执行OnInitDialog()。如果您还没有OnInitDialog,则需要重写它,请按照已接受的问题答案中的说明进行操作。Vs2008mfc:如何添加OnInitDialog?

关于放置SetPos()的位置,您描述了您已经可以使用一些或其他eventParam1跟踪文本控件中的加载进度。这听起来像是一个处理程序或回调,它来自您正在执行的加载操作,因此您将在进度条实例上使用SetPos()。

票数 3
EN

Stack Overflow用户

发布于 2015-05-22 09:23:25

CProgressCtrl类提供了您必须使用的以下成员:

  • CProgressCtrl::SetRange:允许您设置下限和上限。这些值最理想地反映了您的开始状态和完成条件。
  • CProgressCtrl::SetPos:用于更新当前位置。您将更新用于在编辑控件中输出进度的当前位置。

作为使用显式位置值调用CProgressCtrl::SetPos的替代方法,您可以设置一个步骤增量,调用CProgressCtrl::SetStep,并通过调用CProgressCtrl::StepIt更新控件。如果您提前知道步骤增量,这是一个更容易的方法来更新当前的位置。

更多信息可在MSDN:使用CProgressCtrl上获得。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30392228

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档