지금까지 진행한 내용을 바탕으로 간단한 색상보기 샘플을 제작해 보겠습니다.
실행한 모양은 아래 처럼 됩니다.
설정 조건
1. 스크롤바를 3개 만들고 모든 범위는 0 - 255 까지이다.
2. 각각 좌측부터 Red, Green, 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(CScrollBar* pBar, UINT nPos);
-----------------------------------------------------------------------------------
소스 파일의 내용.. 발췌
// RGB 단위 값의 최소/최대
#define SCROLL_MIN 0
#define SCROLL_MAX 255
// COLORREF의 부분값을 변경하기 위한 제작된 매크로
#define SetRValue(rgb, r) ((rgb&=0xFFFFFF00)|=(BYTE)r)
#define SetGValue(rgb, g) ((rgb&=0xFFFF00FF)|=((BYTE)g)<<8)
#define SetBValue(rgb, b) ((rgb&=0xFF00FFFF)|=((BYTE)b)<<16)
BOOL CSampleDlg::OnInitDialog()
{
CDialog::OnInitDialog();
// 스크롤바와 연결된 컨트롤 3개에 대하여 모두 기본값들을 설정한다.
m_scroll.SetScrollRange(SCROLL_MIN, SCROLL_MAX);
m_scroll.SetScrollPos(0);
m_scroll.EnableScrollBar(ESB_ENABLE_BOTH);
m_scroll2.SetScrollRange(SCROLL_MIN, SCROLL_MAX);
m_scroll2.SetScrollPos(0);
m_scroll2.EnableScrollBar(ESB_ENABLE_BOTH);
m_scroll3.SetScrollRange(SCROLL_MIN, SCROLL_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_rect, m_rgb);
}
// 스크롤 이벤트 핸들러
void CSampleDlg::OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
{
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(pScrollBar, nCurPos);
CDialog::OnVScroll(nSBCode, nPos, pScrollBar);
}
// 색상값이 변경되면 어떤 스크롤바가 값이 얼마인지 계산을 해서
// RGB를 다시 계산한 후 색칠한다.
void CSampleDlg::ChangeColorBox(CScrollBar* pBar, UINT nPos)
{
UINT nID = pBar->GetDlgCtrlID();
switch(nID)
{
case IDC_SCROLLBAR5:
SetRValue(m_rgb, nPos);
break;
case IDC_SCROLLBAR6:
SetGValue(m_rgb, nPos);
break;
case IDC_SCROLLBAR7:
SetBValue(m_rgb, nPos);
break;
}
CClientDC dc(this);
dc.FillSolidRect(m_rect, m_rgb);
}
이렇게 간단하게 나마 스크롤바에 대하여 공부해 보았습니다.
실상 알고 보면 크게 어렵거나 한 부분은 거의 없습니다. 자료가 부족할 뿐 ^^;
다음에는 리스트 컨트를을 진행해 보도록 하겠습니다.
즐거운 한주 되세요.. ^^;
Posted by 까막백(홈페이지 이동)