스크롤바에서 정보를 설정하거나 가져올  사용되는 구조체가 SCROLLINFO 이다.
winuser.h  정의되어 있으며 구조는 다음과 같다.

typedef struct tagSCROLLINFO
{
    
UINT   cbSize;
    
UINT    fMask;
    
int       nMin;
    
int       nMax;
    
UINT    nPage;
    
int       nPos;
    
int        nTrackPos;
}   
SCROLLINFOFAR *LPSCROLLINFO;
typedef SCROLLINFO CONST FAR *LPCSCROLLINFO;

 구조체는 GetScrollInfo / SetScrollInfo 함수를 이용하여 현재 스크롤바의 상태나 정보를
얻어오거나 설정할  사용된다.

cbSize     :   구조체의 크기
fMask       : 스크롤바의 속성을 결정짓는 플래그
   
SIF_ALL                         모든 속성의 조합
   
SIF_DISABLENOSCROLL  스클로바 전체 비활성화
   
SIF_PAGE                       페이지 사이즈
   
SIF_POS                         스크롤 박스의 위치
   
SIF_RANGE                     스크롤 범위의 최소/최대
   
SIF_TRACKPOS               드래깅 상태의 스크롤박스 현재 위치
nMin         : 스크롤범위의 최소값
nMax        :  스크롤 범위의 최대값
nPage       : 전체 스크롤바의 크기에 대한 이동막대기(Thumb) 절대 크기값
nPos         : 스크롤 박스의 현재값
nTrackPos : 드래깅 상태의 스크롤 박스의 현재값

여기서 살펴보면 나머지 다른 속성들은 직관적으로 이해할  있는 범위의 설명이다.
그런데 nPage라는 도대체 어떤 놈일까???

이전 예제를 이용하여 알아보도록 하자.
다음 그림은 기본적인 값이 이전 예제와 동일하고 page값이 디폴트로 0 샘플이다.

가운데 이동 막대기(Thumb) 크기는 기본값이다.
아래의 그림은 다음과 같은 코드를 추가하여 page 전체 범위의 1/2 50으로  샘플이다.

그림이 조금 달라보이지 않는가 페이지라고 하는 개념은 워드나 아래한글에서...
말하는 문서 전체의 페이지와 비슷한 개념이다.

위에 2번째 그림으로 스크롤바 정보를 예측해보면.. 아마도 현재 보이는 스크롤바의 2 정도
화면 크기가 아닐까..  0-100 사이이니까.. 현재 화면에 보이는 크기가 50정도..
만약 page 20으로 설정한다면 스크롤바크기의 1/5 되고.. 대략 시각적으로 보면
화면 기준으로 전체 다섯페이지 정도가 되겠구나 라고.. 예측할  있다.

전체 범위의 크기와 현재 화면상에 보여지는 스크롤바의 크기의 비율을 적당해 계산해서..
화면이 리사이징될 때마다 다시 계산해서 넣어주면...
화면의 크기와 스크롤바의 이동막대기 크기를 보고 대략 유추할  있게 된다.

이것이 스크롤바의 page값의 의미이다.

아래의 코드는 스크롤바의 페이지값을 재설정하는 코드이다.

SCROLLINFO info = {sizeof(SCROLLINFO), SIF_PAGE0};
info.nPage = 50;
m_scroll.SetScrollInfo(&info);

115.zip
0.03MB

+ Recent posts