当前位置:编程学习 > C/C++ >>

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++ ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,