지금까지 진행한 내용을 바탕으로 간단한 색상보기 샘플을 제작해 보겠습니다.
실행한 모양은 아래 처럼 됩니다.

설정 조건
1스크롤바를 3 만들고 모든 범위는 0 - 255 까지이다.
2각각 좌측부터 RedGreen, Blue 삼원색을 제어한다.
3오른쪽 사각영역에 주어진 RGB 컬러대로 색칠을 해준다.

-----------------------------------------------------------------------------------
허데 파일의 내용.. 발췌

// Dialog Data
    
//{{AFX_DATA(CSampleDlg)
    
enum { IDD = IDD_SAMPLE_DIALOG };
    
CScrollBar m_scroll3;
    
CScrollBar m_scroll2;
    
CScrollBar m_scroll;
    
//}}AFX_DATA

    
// 색칠할 사각형 영역
    
CRect m_rect;
    
// 색상값
    
COLORREF m_rgb;
    
void ChangeColorBox(CScrollBarpBarUINT nPos);

-----------------------------------------------------------------------------------
소스 파일의 내용.. 발췌

// RGB 단위 값의 최소/최대
#define SCROLL_MIN  0
#define SCROLL_MAX  255

// COLORREF 부분값을 변경하기 위한 제작된 매크로
#define SetRValue(rgbr)      ((rgb&=0xFFFFFF00)|=(BYTE)r)
#define SetGValue(rgbg)      ((rgb&=0xFFFF00FF)|=((BYTE)g)<<8)
#define SetBValue(rgbb)      ((rgb&=0xFF00FFFF)|=((BYTE)b)<<16)

BOOL CSampleDlg::OnInitDialog()
{
    
CDialog::OnInitDialog();

    
// 스크롤바와 연결된 컨트롤 3개에 대하여 모두 기본값들을 설정한다.
    
m_scroll.SetScrollRange(SCROLL_MINSCROLL_MAX);
    
m_scroll.SetScrollPos(0);
    
m_scroll.EnableScrollBar(ESB_ENABLE_BOTH);

    
m_scroll2.SetScrollRange(SCROLL_MINSCROLL_MAX);
    
m_scroll2.SetScrollPos(0);
    
m_scroll2.EnableScrollBar(ESB_ENABLE_BOTH);

    
m_scroll3.SetScrollRange(SCROLL_MINSCROLL_MAX);
    
m_scroll3.SetScrollPos(0);
    
m_scroll3.EnableScrollBar(ESB_ENABLE_BOTH);

    
// 화면에 그릴 영역의 사각 크기를 구한다.
    
GetDlgItem(IDC_STATIC1)->GetWindowRect(m_rect);
    
ScreenToClient(m_rect);

    
// 기본 색상은 검은색이다.
    
m_rgb = RGB(0,0,0);

    
return TRUE;
}

// 정해진 색상으로 지정된 위치에 색칠한다.
void CSampleDlg::OnPaint()
{
    
CPaintDC dc(this);
    
dc.FillSolidRect(m_rectm_rgb);
}

// 스크롤 이벤트 핸들러
void CSampleDlg::OnVScroll(UINT nSBCodeUINT nPosCScrollBarpScrollBar)
{
    
if(!pScrollBar || !pScrollBar->m_hWnd)
        
return;

    
UINT nCurPos = pScrollBar->GetScrollPos();
    
switch(nSBCode)
    {
    
case SB_BOTTOM:
        
pScrollBar->SetScrollPos(SCROLL_MAX);
        
break;

    
// 중간 생략...

     
case SB_TOP:
        
pScrollBar->SetScrollPos(SCROLL_MIN);
        
break;
    }

    
// 색상값에 변경이 있으면 다시 색칠을 해야지..
   
ChangeColorBox(pScrollBarnCurPos);

    
CDialog::OnVScroll(nSBCodenPospScrollBar);
}

// 색상값이 변경되면 어떤 스크롤바가 값이 얼마인지 계산을 해서
// RGB 다시 계산한  색칠한다.
void CSampleDlg::ChangeColorBox(CScrollBarpBarUINT nPos)
{
    
UINT nID = pBar->GetDlgCtrlID();
    
switch(nID)
    {
    
case IDC_SCROLLBAR5:
        
SetRValue(m_rgbnPos);
        
break;
    
case IDC_SCROLLBAR6:
        
SetGValue(m_rgbnPos);
        
break;
    
case IDC_SCROLLBAR7:
        
SetBValue(m_rgbnPos);
        
break;
    }

    
CClientDC dc(this);
    
dc.FillSolidRect(m_rectm_rgb);
}

93.zip
0.03MB

이렇게 간단하게 나마 스크롤바에 대하여 공부해 보았습니다.
실상 알고 보면 크게 어렵거나 한 부분은 거의 없습니다. 자료가 부족할 뿐 ^^;

다음에는 리스트 컨트를을 진행해 보도록 하겠습니다.
즐거운 한주 되세요.. ^^;

+ Recent posts