Progress Control
当有比较耗时的操作在进行时,一般会给用户点提示信息,表示你正在操作,而不是卡死在那了.最常用的提示信息是进度条了.另外进度条一般与Timer一起用,因为要过会自动刷新下.
Timer的使用见:http://blog.csdn.net/weiwenhp/article/details/8733216
另外Progress control最重要的操作是这样两个:
1.指定range,用数字指定.就像我们制度工作进度时,要指定一个时间,比如要一周搞定某件事.
2.指定当前pos,就是进展到哪一步了,像计划一周完成的事,现在过了半周,那进度就是50%了.
用法示例
CMFC_Ctrl_Dlg.h//
CProgressCtrl m_pro;
afx_msg void OnTimer(UINT_PTR nIDEvent);
/CMFC_Ctrl_Dlg.cpp//
#define TIME_ID 88
//..........
DDX_Control(pDX, IDC_PRO, m_pro);
//...............
ON_WM_TIMER()
BOOL CMFC_Ctrl_Dlg::OnInitDialog()
{
CDialog::OnInitDialog();
SetTimer(TIME_ID,1000,0); //设定Timer每一秒钟执行一次
m_pro.SetRange(0,250);
m_pro.SetPos(0); //设定初始位置
}
void CMFC_Ctrl_Dlg::OnTimer(UINT_PTR nIDEvent)
{
if(nIDEvent == TIME_ID)
{
pos += 10;
if(pos > 250)
pos = 250;
m_pro.SetPos(pos); //指定当前的进度
}
}
Slider Control
其实Slider Ctrono与Progress Control还有点类似的地方.progress是程序告诉用户做啥操作的进展,而Slider可以让用户自己指定进展情况.最典型的就是播放视频时我们会拉进度条.那就是个Slider Control.
用法示例.
CSliderCtrl m_slider;
DDX_Control(pDX, IDC_SLIDER1, m_slider);
//初始化
m_slider.SetRange(0,59); //假如让用户选分钟,限定只能是0至59中的某个数字
m_slider.SetPos(0);
消息处理,当拉动进度条时做相应的处理
ON_NOTIFY(NM_CUSTOMDRAW, IDC_SLIDER1, &CMFC_Ctrl_Dlg::OnNMCustomdrawSlider1)
void CMFC_Ctrl_Dlg::OnNMCustomdrawSlider1(NMHDR *pNMHDR, LRESULT *pResult)
{
int nMinute = m_slider.GetPos(); //获取当前选择的位置.
//可以根据该信息做其他操作,比如如果是视频的话,根据该数字加载相应的内容进去
}