Visual Basic이나 다른 언어에서도 스크롤바 제어 기능이 있는데 MFC의 스크롤바 제어기능은 정말 강력합니다.
이 기능을 다 제어할 수 있습니다.
참으로 잠재력이 있는 친구입니다.
위의 그림의 기능을 하나 하나 다 구현할 수 있습니다.
우리는 이번 실습에서 스크롤바를 구현해보도록 하겠습니다.
1. 결과물
2. 실습
2-1. 레이아웃 설계
Control ID |
Caption |
범주(T) |
맴버 변수(N) |
이벤트 처리기 |
참고사항 |
IDC_STATIC |
너의 몸무게 |
|
|
|
|
IDC_STATIC |
너의 애인수 |
|
|
|
|
IDC_STATIC |
사람갯수 |
|
|
|
|
IDC_STATIC |
키 |
|
|
|
|
IDC_BUTTON1 |
확인해보기 |
|
|
OnBnClickedButton1 |
|
IDC_SIZEBAR |
해당없음 |
VALUE |
m_size |
|
스크롤 범위 최소값 0 최대값 255 |
해당없음 |
CONTROL |
m_ScrollSize |
|
| |
IDC_HONEYBAR |
해당없음 |
VALUE |
m_honey |
|
스크롤 범위 최소값 0 최대값 255 |
해당없음 |
CONTROL |
m_ScrollHoney |
|
| |
IDC_PEOPLEBAR |
해당없음 |
VALUE |
m_people |
|
스크롤 범위 최소값 0 최대값 255 |
해당없음 |
CONTROL |
m_ScrollPeople |
|
| |
IDC_HEIGHTBAR |
해당없음 |
VALUE |
m_height |
|
스크롤 범위 최소값 0 최대값 255 |
해당없음 |
CONTROL |
m_ScrollHeight |
|
|
CExampleDlg 클래스 뷰에서 WM_HSCROLL과 WM_VSCROLL을 OnAdd OnHScroll 추가를 클릭해서 아래의 그림처럼 만들어줍니다.
|
|
2-2. 코드 구현
BOOL CExampleDlg::OnInitDialog() { // 중략
return TRUE; } |
(사용자 프로젝트명)Dlg.cpp -> BOOL CExampleDlg::OnInitDialog() - 스크롤 범위 지정 |
{ // 중략
public: // 중략 // 중략 } |
(사용자 프로젝트명).h에 함수 원형 만들어보기 |
사실은 이 함수 만든 이유가 OnHScroll ( ), OnVScroll ( )에 두번 구현하기 귀찮아서 함수 만든겁니다.
switch (nSBCode)
case SB_LINEDOWN:
case SB_PAGEUP:
case SB_PAGEDOWN:
case SB_TOP:
case SB_BOTTOM: // Scroll - 아래 사진 참조
case SB_THUMBTRACK: // Scroll - Dragging
default: |
* eg) Bottom (나머지 영역도 다 여기에 해당되는 조작을 의미함.)
|
CommonScroll(nSBCode, nPos, *pScrollBar); UpdateData(TRUE); CDialogEx::OnVScroll(nSBCode, nPos, pScrollBar); UpdateData(FALSE); } |
(사용자 프로젝트명)Dlg.cpp - OnVScroll ( ) 함수 코딩 |
CommonScroll(nSBCode, nPos, *pScrollBar); CDialogEx::OnHScroll(nSBCode, nPos, pScrollBar); UpdateData(FALSE); } |
(사용자 프로젝트명)Dlg.cpp - OnHScroll ( ) 함수 코딩 |
strPeople.Format(_T("사람의 수:%d\n"), m_people);
strResult.Append(strPeople);
AfxMessageBox(strResult); } |
(사용자 프로젝트명)Dlg.cpp - OnBnClickedButton1 ( ) 함수 코딩 |
3. 이론
a. 스크롤바 컨트롤 멤버 함수
CScrollBar 클래스를 사용함.
함수 |
설명 |
int GetScrollPos() |
스크롤바의 현재 위치 값을 획득하기 위해서 사용 |
int SetScrollPos(int nPos, BOOL bRedraw) |
스크롤바의 위치를 설정하기 위해 사용 |
void GetScrollRange(LPINT lpMinPos, LPINT lpMaxPos) |
스크롤바의 범위(min, max)를 획득하기 위해 사용 |
void SetScrollRange(int nMinPos, int nMaxPos) |
스크롤바의 범위(min, max)를 설정하기 위해 사용 |
void ShowScrollBar(BOOL bShow = TRUE) |
스크롤바를 화면에 보이게 하거나 감추기 위해서 사용 -> TRUE, FALSE |
BOOL EnableScrollBar(UINT nArrowFlags = ESB_ENABLE_BOTH) |
스크롤바의 양쪽 화살표 사용 여부 -> TRUE, FALSE |
BOOL SetScrollInfo(LPSCROLLINFO lpScrollInfo, BOOL bRedraw) |
SCROLL_INFO 구조체를 사용하여 스크롤바의 범위와 위치를 지정하기 위해 사용 |
BOOL GetScrollInfo(LPSCROLLINFO lpScrollInfo, UINT nMask); |
SCROLL INFO 구조체 형태의 데이터를 매개변수로 전달하여 스크롤바의 범위와 위치를 획득함. |
int GetScrollLimit ( ) |
스크롤바의 이동 한계 값을 획득하기 위해서 사용. |
b. 스크롤바 컨트롤 멤버 함수
afx_msg void OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar); |
nSBCode:스크롤바의 동작 코드 nPos: 스크롤바가 이동된 위치 값 pScrollBar : 메시지가 발생된 스크롤 바의 포인터 |
'소프트웨어(SW) > MS - C++ (GUI) MFC' 카테고리의 다른 글
[MFC] 윈도우 프로그래밍 기초 - 색상 대화상자 - 실습 1 (1) | 2015.03.24 |
---|---|
[MFC] 윈도우 프로그래밍 기초 - 공통 대화 상자란? (1) | 2015.03.24 |
[MFC] 윈도우 프로그래밍 기초 - 리스트박스 컨트롤(Listbox Control) (2) | 2015.03.22 |
[MFC] 윈도우 프로그래밍 기초 - Edit Control(에디트 컨트롤) - 택스트상자 (2) | 2015.03.22 |
[MFC] 윈도우 프로그래밍 기초 - (라디오 버튼) + 그룹박스 (2) | 2015.03.22 |