我正在尝试在我的对话框中添加一个进度控制,这将在循环的每一次迭代中逐步执行,直到完成为止。我以前从来没有玩过进度控制,所以我完全不知道该从哪里开始。我在对话框中添加了进度控制资源视图,但它只是显示为一个空进度控件。我希望进度控件在按下按钮后动态显示/更新某个位置的图像。我试图在Visualc++环境中的对话框中添加进度控件。
添加此工具后,将以下代码添加到main.cpp中:
void CPanoramicsampleDlg::OnNMCustomdrawProgress1(NMHDR *pNMHDR, LRESULT *pResult){
}我可以在文本控件中显示加载过程,如下所示:
sprintf_s(pack1,"Data%d%%",Event);
::SetWindowText(GetDlgItem(IDC_Static)->m_hWnd,pack1);因此,通过这种方式,我可以在文本窗口中看到加载过程为%d,但我不知道如何通过进度控件显示加载过程,以及如何和在何处定义该进度控件的范围,甚至进度条句柄,等等。最后,我想知道是否有任何控制进度的功能,例如:
::EnableWindow(GetDlgItem(IDC_Progress1)->m_hWnd);发布于 2015-05-22 09:32:16
您应该首先为控件添加一个变量,方法是右键单击对话框编辑器中的进度条,然后选择add variable .然后,您的对话框类将有一个CProgressCtrl类的实例,然后您可以在该实例上调用IInspectable在他的答复中提到的成员。删除OnNMCustomdrawProgress1处理程序,您不需要它。
例如:
m_progressCtrl.EnableWindow(TRUE);
m_progressCtrl.SetRange(0, 100);
m_progressCtrl.SetPos(75);然后,无论您提到的eventParam1值是什么,都要在开始值和停止值之间进行比例,并调用SetPos。
评论后的最新情况:
在SetRange()函数中执行OnInitDialog()。如果您还没有OnInitDialog,则需要重写它,请按照已接受的问题答案中的说明进行操作。Vs2008mfc:如何添加OnInitDialog?
关于放置SetPos()的位置,您描述了您已经可以使用一些或其他eventParam1跟踪文本控件中的加载进度。这听起来像是一个处理程序或回调,它来自您正在执行的加载操作,因此您将在进度条实例上使用SetPos()。
发布于 2015-05-22 09:23:25
CProgressCtrl类提供了您必须使用的以下成员:
作为使用显式位置值调用CProgressCtrl::SetPos的替代方法,您可以设置一个步骤增量,调用CProgressCtrl::SetStep,并通过调用CProgressCtrl::StepIt更新控件。如果您提前知道步骤增量,这是一个更容易的方法来更新当前的位置。
更多信息可在MSDN:使用CProgressCtrl上获得。
https://stackoverflow.com/questions/30392228
复制相似问题