2011년 8월 10일 수요일

MFC에서 Spin Control button 사용하기

Spin Ctrl 이 edit box 와 상호 작용하기 위해서 연결해주어야 한다. 이 연결을 자동을 해주는 옵션이 있는데 Spin Control 의 Properties에 들어가면 다음 화면에서 Auto buddySet buddy integer를 체크 해주면 된다. 그려면 Tab order(Tab을 누르면 포커스가 움직이는 순서)에 따라 앞에 따라오는 Control 과 자동으로 버디를 맺을 수 있게 해준다.


//******************************************
////기본 레인지는 0~100이므로 변경해주어야 한다.
//******************************************
void SetRange( int nLower, int nUpper );
:
조종할 값의 범위를 설정하는 함수

//******************************************
////증감 버튼이 바뀌어서 작동하므로 , 증감을 0,-1로 변경한다.
//******************************************
BOOL
SetAccel( int nAccel, UDACCEL* pAccel );
:
한번에 바뀌는 숫자의 크기와 값이 변경되는 시간을 설정하는 함수이다. 이를 위해 UDACCEL이라는 구조체를 사용하는데 다음과 같다.

typedef struct {
UINT nSec; //
시간 Interval
UINT nInc; //
증감 Interval
}UDACCEL, FAR *LPUDACCEL;


ex 1)
UpdateData(TRUE);
m_FlowRateSpin.SetRange(-5,5); //-5~5까지
UDACCEL accels[]={{0,-1}}; //increment
m_FlowRateSpin.SetAccel(1,accels);

ex 2)
void CGTermDlg::OnDeltaposFlowratespin(NMHDR* pNMHDR, LRESULT* pResult)
{
NM_UPDOWN* pNMUpDown = (NM_UPDOWN*)pNMHDR;
// TODO: Add your control notification handler code here
int value(0);
CString str;
value = ((int)(short)LOWORD(m_FlowRateSpin.GetPos()));
str.Format("%.1f",(float)value/10);
SetDlgItemText(IDC_FLOWRATE,str);
m_FlowRate = (float)value/10;

*pResult = 0;
}

댓글 없음: