오늘은 Spin Control에 대해서 알아보겠습니다.
보통 Edit Box 같이 사용하는데 마우스로 클릭해서 값을 변경하기 위해 사용합니다. 아래와 같이 Edit Box와 Spin Control을 추가합니다.
Edit Box의 속성에서 ID는 IDC_EDIT_TEST, Number는 TRUE로 변경합니다. ( Number는 선택 사항 )
그런 다음 Edit Box를 우클릭 -> 변수 추가를 한 뒤 변수 이름에 m_edTest를 입력합니다.
Spin Control 속성에서 ID는 IDC_SPIN_TEST, Alignment는 Right Align, Auto Buddy는 TRUE로 설정합니다. ( Auto Buddy 는 선택 사항 )
Spin Control을 우클릭 -> 변수 추가를 한 뒤 변수 이름에 m_spTest를 입력합니다. 그런 다음 OnInitDialog에 아래와 같이 컨트롤 초기화 구문을 입력합니다.
m_edTest.SetWindowText(_T("0")); // 초기값 0으로 설정 m_spTest.SetRange(0, 10); // 0 ~ 10 범위 m_spTest.SetPos(0); // 초기값 0으로 설정
이 상태에서 실행 시키고 확인해 보시면 Spin Control을 눌러도 값이 변하지 않습니다.
Spin Control을 우클릭 -> 이벤트 처리기 추가를 선택 하시고, 아래 그림과 같이 UDN_DELTAPOS를 선택하신 후 추가 및 편집을 선택합니다.
이 이벤트는 Spin Control 위치 값이 변경 되기 전 값이여서 연산을 좀 해줘야 합니다.
아마도 범위 설정 때문에 그런거 같은데 암튼… Visual Studio에서 설명해주는건 아래와 같습니다.
그렇기 때문에 값이 변하기 전에 변한 뒤 값을 연산해줘서 아래와 같이 Spin Control 이벤트 처리 시 Edit Box에 값이 표시되게 입력 합니다.
void CMFCApplication1Dlg::OnDeltaposSpinTest(NMHDR *pNMHDR, LRESULT *pResult) { LPNMUPDOWN pNMUpDown = reinterpret_cast<LPNMUPDOWN>(pNMHDR); int iVal = pNMUpDown->iPos + pNMUpDown->iDelta; // 값 = 현재값 + 증/감 if ((0 <= iVal) && (iVal <= 10)) { CString sValue; sValue.Format(_T("%d"), iVal); m_edTest.SetWindowText(sValue); } *pResult = 0; }
그리고 실행해 보면 아래와 같이 설정한 범위 만큼 작동 합니다.
이상으로 Spin Control에 대해 알아보았습니다.