1:进度条默认的处理都是鼠标拖动消息,所以拖动后还是会还原到原来的位置。我们需要通过代码的方式来实现。
2:所有的控件都应该分成三个层次来看待:
1:Windows消息:
2:我们发给Windows的消息:
3:MFC里面封装成的类:
3:滚动条必须要设置前置信息告诉滚动条的各个参数。
//在对话框初始化函数里面添加: SCROLLINFO scrollinfo = { 0 };//控制滚动条的结构体。 scrollinfo.cbSize = sizeof(SCROLLINFO); scrollinfo.fMask = SIF_RANGE | SIF_PAGE; scrollinfo.nMin = 0; scrollinfo.nMax = 100; scrollinfo.nPage = 10; m_scroll.SetScrollInfo(&scrollinfo); //进度条处理函数 void CScorllBarDemoDlg::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar) { // 控件发生的消息, // TODO: 在此添加消息处理程序代码和/或调用默认值 SCROLLINFO scrollinfo = { 0 }; scrollinfo.cbSize = sizeof(SCROLLINFO); scrollinfo.fMask = SIF_ALL; pScrollBar->GetScrollInfo(&scrollinfo);//这个结构体是随时根据情况变化的。 int nNewPos = scrollinfo.nPos; switch (nSBCode) { case SB_THUMBTRACK://用户拖动消息 nNewPos = nPos; break; case SB_LINELEFT://点击左边按钮 nNewPos -= 1; break; case SB_LINERIGHT://点击右边按钮 nNewPos += 1; break; case SB_PAGELEFT://点击左边进度条区域 nNewPos -= scrollinfo.nPage; break; case SB_PAGERIGHT://点击右边进度条区域 nNewPos += scrollinfo.nPage; break; default: break; } if (nNewPos > scrollinfo.nMax) nNewPos = scrollinfo.nMax; else if (nNewPos < 0) nNewPos = 0; scrollinfo.nPos = nNewPos; pScrollBar->SetScrollInfo(&scrollinfo); CString strOutput; strOutput.Format(L"当前位置:%d",nNewPos); SetDlgItemTextW(IDC_STATIC_POS, strOutput); CDialogEx::OnHScroll(nSBCode, nPos, pScrollBar); }1:应该先拖入 EditControl,再拖入SpinControl,或者将两者拖入后,使用Ctrl+D设置Tab顺序,使EditControl的比SpinControl的小一个即可。
2:将SpinControl的属性里面的Auto Buddy和Set Buddy Integer都设置成True,就可以实现点击+-1了。
3:如果难以实现对齐,可以将SpinControl属性的Alignment设置成Left或者Right Align。
//在对话框初始化函数添加: CSpinButtonCtrl *pSpinDec = (CSpinButtonCtrl*)GetDlgItem(IDC_SPIN_DEC); pSpinDec->SetRange32(0, 100);//设置范围,这个函数出生比较早,建议使用32版本 CSpinButtonCtrl *pSpinHex = (CSpinButtonCtrl*)GetDlgItem(IDC_SPIN_HEX); pSpinHex->SetRange32(0, 100); pSpinHex->SetBase(16);//设置成16进制