2011년9월26일_winAPI_스크롤 바(Scroll Bar)
스크롤 바는 지금까지 사용한 컨트롤들(버튼, 체크박스, 라디오버튼, 에디트등등)에 비해서는 비교적 복잡한 컨트롤이다.
윈도우의 스크롤 상태를 관리하기 위해 사용하기도 하며 일정 범위에 있는 값을 대충 선택할 때도 사용한다.
스크롤 바는 “scrollbar”윈도우 클래스로 CreateWindow( )를 사용하여 생성하며,
세 번째 인자 스타일에 수평 스크롤 바일 경우 SBS_HORZ스타일을,
수직 스크롤 바일 경우 SBS_VERT스타일을 지정한다.
스크롤 바는 범위와 현재 위치값을 가지는데 다음 두 함수로 이 값들을 지정한다.
BOOL SetScrollRange(HWND hWnd, // 스크롤 바의 윈도우 핸들 int nBar, // 메인 윈도우에 부착된 표준 스크롤바 또는 별도의 스크롤바(SB_CTL) 지정 int nMinPos, // 최소값 int nMaxPos, // 최대값 BOOL bRedraw); // 스크롤바의 범위를 변경한 후 다시 그릴 것인지 여부 |
상기의 SetScrollRange( )는 함수이름에서 알 수 있듯이 스크롤바의 범위를 지정하는 함수이다.
첫 번째 인자인 hWnd는 스크롤 바의 윈도우 핸들로 CreateWindow( )의 리턴값인 윈도우 핸들을 넣으면 된다.
두 번째 인자인 nBar는 메인 윈도우의 스크롤바 또는 별도의 스크롤바를 지정하는 것이라는데,
SB_HORZ, SB_VERT는 표준 스크롤 바이고, SB_CTL은 별도의 스크롤바라고 한다. SB_BOTH도 표준인가?
세 번째 인자인 nMinPos는 스크롤바의 최소값이고,
네 번째 인자인 nMaxPos는 스크롤바의 최대값이다.
마지막 인자인 bRedraw는 스크롤바의 범위를 변경한 후 다시 그릴 것인지 여부로 TRUE로 하면 다시 그린다.
int SetScrollPos(HWND hWnd, // 스크롤 바의 윈도우 핸들 int nBar, // 메인 윈도우에 부착된 표준 스크롤바 또는 별도의 스크롤바(SB_CTL) 지정 int nPos, // 스크롤박스의 위치 BOOL bRedraw); // 스크롤바의 범위를 변경한 후 다시 그릴 것인지 여부 |
SetScrollPos( )는 스크롤바의 위치..정확히 말하면 스크롤박스의 위치를 지정하는 함수이다.
SetScrollRange( )와 다른 부분은 세 번째 인자가 스크롤박스의 위치를 받도록 되어 있다는 것이다. 사용법은 비슷하다.
이해하기 쉽도록 상기와 같이 스크롤바에 최소값, 최대값과 현재값을 표시하였다.
다른 컨트롤들은 자신에게 변화가 있을 때 부모 윈도우로 WM_COMMAND 통지 메시지를 보내는데 비해,
스크롤 바는 수평일 경우 WM_HSCROLL, 수직일 경우 WM_VSCROLL이라는 별도의 메시지를 부모 윈도우로 보낸다.
메시지 전달 후 파리미터는 상기와 같은 값들이 들어가 있고,
wParam의 상위워드인 HIWORD(wParam)은 스크롤바의 스크롤박스의 현재 위치가 저장되어 있고,
하위워드인 LOWORD(wParam)은 스크롤바의 어디를 눌렀나 알 수 있는 정보가 들어가 있다.
lParam은 다른 컨트롤과 마찬가지로 변화가 발생한 스크롤바 컨트롤의 윈도우 핸들이 들어가 있다.
이 중에서 LOWORD(wParam)의 값들의 종류는 아래와 같다.
● windows API정복 page.220 예제: ScrollBar
▷ MsgProc.cpp (메시지 처리함수 모음)만 미리보기
전체소스코드 다운로드 : 0926_ScrollBar.zip
<실행결과>
'내장형하드웨어 > 일일보고서' 카테고리의 다른 글
2011년9월26일_pcap_패킷 캡쳐 라이브러리를 사용하여 랜카드이름을 알아보자. (0) | 2011.09.26 |
---|---|
2011년9월26일_ARM_온습도센서(SHT75), TWI, UART, SPI, 프로토콜 모두 이론만 (0) | 2011.09.26 |
2011년9월22일_ARM_AT91SAM7S256 내장PWM제어기(PWMC)의 기초이론 (0) | 2011.09.26 |
2011년9월23일_winAPI_에디트, 리스트박스, 콤보박스, (0) | 2011.09.26 |
2011년9월23일_ARM_AT91SAM7S256 PWM제어기를 사용하여 LED의 밝기를 조절하자. (0) | 2011.09.26 |