블로그는 나의 힘!
[ Programing ]/MFC2013. 5. 21. 23:08

MFC 작업 하다 보면 은근히 머리 아픈게 스크롤이다..

하지면 막상 해보면 별것 없다. =ㅅ=

____________________________________________________________________________________

스크롤 의 크기를 세팅 하는 함수 (기본적으로 OnSize 함수에서 사용하면 된다..)

void CCustumClass::settingScroll()

{


// 작업 가로/ 세로 길이

int iWidth = // 사용할 스크롤 의 가로 길이 ( 이미지 라면 이미지 가로 사이즈를 넣어주면 된다.)

int iHeight= // 사용할 스크롤 의 세로 길이 ( 이미지 라면 이미지 세로 사이즈를 넣어주면 된다.)


// 윈도우 렉트

CRect rt;

GetClientRect( &rt );


// 스크롤 정보

SCROLLINFO si;

si.cbSize = sizeof( si );

si.fMask = SIF_ALL;



///////////////////////////////////////////////////////

// 세로

if(rt.Height() < iHeight)

{

si.nMin = 0;

si.nMax = iHeight;


si.nPage = rt.Height();

si.nPos = GetScrollPos(SB_VERT);;


SetScrollInfo( SB_VERT, &si, TRUE );

ShowScrollBar(SB_VERT, TRUE);

}

else

{

ShowScrollBar(SB_VERT, FALSE);

}


///////////////////////////////////////////////////////

// 가로

if(rt.Width() < iWidth)

{

si.nMin = 0;

si.nMax = iWidth;


si.nPage = rt.Width();

si.nPos = GetScrollPos(SB_HORZ);;


SetScrollInfo( SB_HORZ, &si, TRUE );

ShowScrollBar(SB_HORZ, TRUE);

}

else

{

ShowScrollBar(SB_HORZ, FALSE);

}

}



void   CCustumClass ::OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)

{

// TODO: 여기에 메시지 처리기 코드를 추가 및/또는 기본값을 호출합니다.

if( pScrollBar == NULL )

{

switch( nSBCode )

{

case SB_LINELEFT:

break;


case SB_LINERIGHT:

break;


case SB_PAGELEFT:


break;


case SB_PAGERIGHT:

break;


case SB_THUMBPOSITION:

break;


case SB_THUMBTRACK:

break;


case SB_LEFT:

break;


case SB_RIGHT:

break;


case SB_ENDSCROLL:

return;                 // 처리 해주지 않으면 계속 리셋...

break;

};

}


SetScrollPos(SB_VERT, nPos);

// 작업 처리.

        // .....


CWnd::OnVScroll(nSBCode, nPos, pScrollBar);

}


void  CCustumClass ::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)

{

// TODO: 여기에 메시지 처리기 코드를 추가 및/또는 기본값을 호출합니다.

if( pScrollBar == NULL )

{

switch( nSBCode )

{

case SB_LINELEFT:

break;


case SB_LINERIGHT:

break;


case SB_PAGELEFT:

break;


case SB_PAGERIGHT:

break;


case SB_THUMBPOSITION:

break;


case SB_THUMBTRACK:

break;


case SB_LEFT:

break;


case SB_RIGHT:

break;


case SB_ENDSCROLL:

return;          // 처리 해주지 않으면 계속 리셋...

break;

};

}


SetScrollPos(SB_HORZ, nPos);

// 작업 처리.

        // .....


CWnd::OnHScroll(nSBCode, nPos, pScrollBar);

}

 


Posted by Mister_Q