티스토리 뷰

프로그래밍/MFC

MFC 스핀 버튼 컨트롤

에어버스 2016. 7. 9. 12:34

MFC 스핀 버튼 컨트롤

업다운(Up-Down) 컨트롤이라 부르기도 한다.
독립적으로 사용되기보다 다른 컨트롤(버디(Buddy) 컨트롤이라 부름)과 함께 사용하는데 주로 편집 컨트롤 또는 정적 텍스트 컨트롤 등이 버디 컨트롤이 된다.

1. 스타일

 - Orientation
화살표의 방향을 결정하며, 수직 또는 수평을 선택할 수 있다.

- Alignment
버디 컨트롤의 왼쪽 또는 오른쪽에 지동으로 붙도록 할 수 있으며, 기본값은 붙지 않는다.

- Auto buddy
탭 순서가 스핀 버튼 컨트롤 바로 앞에 해당하는 컨트롤이 자동으로 버디가 된다.

- Set buddy integer
스핀 버튼 컨트롤의 위치 값이 버디 컨트롤에 자동으로 표시된다.

- No thousands
버디 컨트롤에 표시되는 숫자에서 천 단위 표시(,)를 생략한다.

- Wrap
위치 값이 증가하다가 최대가 되면 자동으로 최소로 되돌아 간다. 그 반대의 경우도 마찬가지다.

- Arrow keys   
상하 화살표 키를 이용하여 값을 증감할 수 있도록 한다.

- Hot track
마우스 커서가 지나가면 스핀 버튼 컨트롤의 화살표 색상이 바뀐다.

2. 스핀 버튼 컨트롤 클래스

- 범위 설정과 현재 범위 얻기
void CSpinButtonCtrl::SetRange(short nLower, short nUpper);
void CSpinButtonCtrl::GetRange(int& lower, int& upper);

기본값은 100~0 (0~100 아님) 으로 설정되어 있으므로 사용하기 전에 반드시 최소, 최대 범위를 설정해야 한다.

- 위치 설정과 현재 위치 얻기
int CSpinButtonCtrl::SetPos(int nPos);
int CSpinButtonCtrl::GetPos();

nPos : SetRange()로 정한 범위에 속해야 한다.

- 버디 설정
CWnd* CSpinButtonCtrl::SetBuddy(CWnd* pWndBuddy);
탭 순서를 정하지 않고 이 함수로 버디 컨트롤을 설정할 수 있다.
pWndBuddy : 버디 컨트롤에 대한 CWnd형 포인터

- 숫자의 진수 변경
int CSpinButtonCtrl::SetBase(int nBase);
nBase : 16을 사용하면 숫자가 16진수로 표시된다.

스핀 버튼 컨트롤을 마우스로 조작하면 WM_VSCROLL, WM_HSCROLL 메시지가 발생하며, 현재의 위치값이 메시지와 더불어 부모 윈도우에게 전달된다.
24행 처럼 스핀 버튼 컨트롤에서 스크롤된건지 확인해줘야 한다.

 

Auto buddy : True
Set buddy integer : True 로 속성 지정한다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
class CMFCApplication15View : public CFormView
{
...
    CSpinButtonCtrl m_spin;
    afx_msg void OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar);
};
 
BEGIN_MESSAGE_MAP(CMFCApplication15View, CFormView)
    ON_WM_VSCROLL()
END_MESSAGE_MAP()
 
void CMFCApplication15View::OnInitialUpdate()
{
    CFormView::OnInitialUpdate();
    GetParentFrame()->RecalcLayout();
    ResizeParentToFit();
 
    m_spin.SetRange(0100);
    m_spin.SetPos(0);
}
 
void CMFCApplication15View::OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
{
    if (pScrollBar->GetSafeHwnd() == m_spin.GetSafeHwnd())
    {
        CString str;
        str.Format(L"%d", nPos);
        AfxGetMainWnd()->SetWindowTextW(str);
    }
    CFormView::OnVScroll(nSBCode, nPos, pScrollBar);
}
cs

 

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31