MFC_Progress_Slider_Spin
1、Slider控件使用WM_HSCROLL消息进行响应
void CMFC_progressDlg::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar) { // TODO: 在此添加消息处理程序代码和/或调用默认值 CSliderCtrl *pSlider = (CSliderCtrl*)GetDlgItem(IDC_SLIDER1); CProgressCtrl *pProgress = (CProgressCtrl*)GetDlgItem(IDC_PROGRESS1); pProgress->SetPos(pSlider->GetPos()); CString ProcessStr; ProcessStr.Format(L"%d", pSlider->GetPos()); SetDlgItemText(IDC_STATIC, ProcessStr); CDialogEx::OnHScroll(nSBCode, nPos, pScrollBar); }
其中Slider中的WM_HSCROLL消息的nPos是有一定问题的,不要使用,使用上面的获取方法就行,记得对指针进行释放。
2、Spin控件使用WM_VSCROLL消息进行响应
void CMFC_progressDlg::OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar) { // TODO: 在此添加消息处理程序代码和/或调用默认值 m_spin = nPos; CString str; str.Format(L"%d", m_spin); SetDlgItemText(IDC_STATIC2, str); CDialogEx::OnVScroll(nSBCode, nPos, pScrollBar); }
Spin的WM_VSCROLL消息可以用nPos参数。也可以使用1中的方法进行获取。
3、三个控件的初始化:
CProgressCtrl *pProgress = (CProgressCtrl*)GetDlgItem(IDC_PROGRESS1); pProgress->SetRange(0, 1000); pProgress->SetPos(500); CSliderCtrl *pSlider = (CSliderCtrl*)GetDlgItem(IDC_SLIDER1); pSlider->SetRange(0, 1000); pSlider->SetPos(500); CSpinButtonCtrl *pSpin = (CSpinButtonCtrl*)GetDlgItem(IDC_SPIN1); pSpin->SetRange(0, 1000); pSpin->SetPos(m_spin); CString str; str.Format(L"%d", m_spin); SetDlgItemText(IDC_STATIC2, str);
可以看出,初始化方法都是一样的,更多信息可以查阅MSDN。