Programming/MFC

(MFC) Example 9 : FormView(ScrollBar)

부풍 2009. 8. 24. 16:28

1. CFormView 계승

2. CEx9View::OnInitialUpdate

void CEx9View::OnInitialUpdate()
{
	CFormView::OnInitialUpdate();
	GetParentFrame()->RecalcLayout();
	ResizeParentToFit();
 
	CScrollBar *pRed, *pGreen, *pBlue;
	pRed = (CScrollBar*)GetDlgItem(IDC_RED); // DDX 사용하지 않고 얻기
	pGreen = (CScrollBar*)GetDlgItem(IDC_GREEN);
	pBlue = (CScrollBar*)GetDlgItem(IDC_BLUE);
 
	pRed->SetScrollRange(0, 255);
	pGreen->SetScrollRange(0, 255);
	pBlue->SetScrollRange(0, 255);
 
	pRed->SetScrollPos(0);
	pGreen->SetScrollPos(0);
	pBlue->SetScrollPos(0);
}

3. CEx9View::OnHScroll (WM_HSCROLL)

void CEx9View::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
{
	// TODO: 여기에 메시지 처리기 코드를 추가 및/또는 기본값을 호출합니다.
	switch(nSBCode) {
	case SB_LINELEFT :
		pScrollBar->SetScrollPos(pScrollBar->GetScrollPos() - 1);
		break;
	case SB_LINERIGHT :
		pScrollBar->SetScrollPos(pScrollBar->GetScrollPos() + 1);
		break;
	case SB_PAGELEFT :
		pScrollBar->SetScrollPos(pScrollBar->GetScrollPos() - 10);
		break;
	case SB_PAGERIGHT :
		pScrollBar->SetScrollPos(pScrollBar->GetScrollPos() + 10);
		break;
	case SB_THUMBTRACK :
		pScrollBar->SetScrollPos(nPos);
		break;
	default:
		break;
	}
	CFormView::OnHScroll(nSBCode, nPos, pScrollBar);
	Invalidate();
}

4. CEx9View::OnPaint - WM_PAINT

void CEx9View::OnPaint()
{
	CPaintDC dc(this); // device context for painting
	// TODO: 여기에 메시지 처리기 코드를 추가합니다.
	// 그리기 메시지에 대해서는 CFormView::OnPaint()을(를) 호출하지 마십시오.
	CScrollBar *pRed, *pGreen, *pBlue;
	int red, green, blue;
 
	pRed = (CScrollBar*)GetDlgItem(IDC_RED);
	pGreen = (CScrollBar*)GetDlgItem(IDC_GREEN);
	pBlue = (CScrollBar*)GetDlgItem(IDC_BLUE);
 
	red = pRed->GetScrollPos();
	green = pGreen->GetScrollPos();
	blue = pBlue->GetScrollPos();
 
	CBrush myBrush, *oldBrush;
	myBrush.CreateSolidBrush(RGB(red, green, blue));
 
	oldBrush = dc.SelectObject(&myBrush);
	dc.Rectangle(350, 50, 700, 300);
	dc.SelectObject(oldBrush);
}