MFC NumericUpDown Spin控件 CSpinButtonCtrl
今天做MFC画面时有一个像,.net中的NumericUpDown空间。我想MFC和.net控件应该不一样,查了一下,MFC中果然没有这个控件。
帖子说就是:EDIT控件 + Spin控件
现在说一下怎么做,在这里记录一下,替他童鞋少走弯路。
步骤:
1.添加EDIT控件
2.添加Spin控件
如果不是这样的顺序的话,使用ctrl+D改变Tab顺序,使spin紧靠edit后面
3.在EDIT控件上面设置group属性(特别注意)
或 ((CSpinButtonCtrl *)GetDlgItem(IDC_SPIN_ROUND))->SetBuddy(GetDlgItem(IDC_EDIT_ROUND));将两个关联
4.在Spin控件上设置
Auto Buddy 为 true
Set Buddy Integer 为 true
Alignment 为 Right Align
5.添加Edit控件 int 变量 m_nNumK;
这个时候点击向下应该可以增加数值
6.在OnInitDialog中添加以下语句
((CSpinButtonCtrl *)GetDlgItem(IDC_SPIN1))->SetRange(-100, 100);
这个时候向上的箭头为增加,向下的箭头为减小.
以上就结束了。但这样只能增加整数,小数不行。
点击SPIN控件的增减按键时,对话框的 OnVScroll会收到消息WM_VSCROLL。
如果你希望增量为 0.1,最小值为0.0且最大值为10.0,你可以设置SPIN的范围为0-100 (100 = 10/0.1)
1.在上面6中添加如下代码:
CSpinButtonCtrl *pSpin1 = (CSpinButtonCtrl*)GetDlgItem(IDC_SPIN1); pSpin1->SetRange(1, 100); pSpin1->GetBuddy()->SetWindowText(_T("0.01"));
2.添加OnVScroll处理。
3.添加下面代码
void DetectDlg::OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar) { // TODO: Add your message handler code here and/or call default switch( pScrollBar->GetDlgCtrlID()) { case IDC_SPIN1: { float nStep=0.01; CString str; str.Format(_T("%.2f"),nPos*nStep); ((CSpinButtonCtrl*) pScrollBar)->GetBuddy()->SetWindowText(str); break; } break; } CDialogEx::OnVScroll(nSBCode, nPos, pScrollBar); }
补充:软件开发 , C++ ,