MFC NumericUpDown Spin控制元件 CSpinButtonCtrl

無名_四葉草發表於2020-04-04

今天做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);
}



相關文章