MFC controls//Spin
¶MFC controls//Spin
原文連結: https://darkblack01.blogspot.com/2013/04/mfc-controlsspin.html
移植時的最後更新日期: 2013-04-17T14:40:28.444+08:00
Spin
這是一個簡單又特別的spin,可以設定buddy(夥伴)可以控制其它的control。參數設定
參數對話框針對這個控制項的部份在Styles,Extended Styles是通用的(吧?)Orientation
設定spin的方向。
Alignment
設定spin和buddy control結合方式
剩下的參數用下面的表格解釋[1]
打勾ˇ | 不打勾□ | |
Auto buddy | 以前一個Tab Order為buddy | 前一個Tab Order不為buddy 自訂buddy |
Set Buddy interger | 自訂buddy CSpinButtonCtrl::SetBuddy()有效 | SetBuddy()無效 |
No thousands | (在Edit中)顯示千位分隔符號 | 無分隔符 |
Wrap | 循環 | 到上限或下限停止 |
Arrow keys | 鍵盤方向鍵可控制 | 鍵盤不可控制 |
Hot track |
BOOL CTestSpinDlg::OnInitDialog()
{
//...
m_spin.SetRange(0, 100);
m_spin.SetBase(16); //16進制表示
m_spin.SetPos(0);
m_spin.SetBuddy(GetDlgItem(IDC_EDIT1)); //該打勾的要打勾
return TRUE; // return TRUE unless you set the focus to a control
}
按了有反應就增加Delta Pos這個函數Delta指的是"差",判斷方向
Pos指的是"Position",也就是點的位置
不要使用m_spin.GetPos()會得到一個滿大的數字,一樣會改變,只是要歸零。
void CTestSpinDlg::OnDeltaposSpin1(NMHDR* pNMHDR, LRESULT* pResult)
{
NM_UPDOWN* pNMUpDown = (NM_UPDOWN*)pNMHDR;
// TODO: Add your control notification handler code here
CWnd* pWnd = (CWnd*)GetDlgItem(IDC_EDIT1);
CString strValue;
pWnd->GetWindowText(strValue);
CString debugpNMHDR, debugpNMUpDown, debugpResult;
CString a, b, c;
a.Format("%x %x\n", pNMUpDown->hdr.hwndFrom, pNMUpDown->hdr);
b.Format("%d %d\n", pNMUpDown->hdr.idFrom , pNMUpDown->iPos);
c.Format("%d %d\n", pNMUpDown->hdr.code , pNMUpDown->iDelta);
//看右邊這個。
CString str;
str.Format("%s%s%s", a, b, c);
m_debugBoard.SetWindowText(str);
*pResult = 0;
}
其中這一行NM_UPDOWN* pNMUpDown = (NM_UPDOWN*)pNMHDR;
它的資料結構如下真正有值的是在NM_UPDOWN* pNMUpDown。
如下圖,右邊的值。
上圖數據中。
pNMUpDown->iPos = 80
pNMUpDown->iDelta = 5
只有這兩個用得到。心得:
- pNMUpDown->iDelta
值是多少,就是前進一步加(或減)多少,按久了會變大,也就是會加速。
正負代表方向。 - 我試了一下,同時使用Auto buddy和Set buddy interger兩個屬性。
Auto buddy設定成EDIT2→有初始化,不會互動
Set buddy interger設定成EDIT1→沒有初始化,會互動。
參考資料:
[1] (转)VC中Spin控件的使用[2] wince sdk基本控件(一)(Spin微调按钮)
發表於
tags:
{ WIN32 API/MFC }
{ MFC controls }