mfc_scrollbar_image - 8BitsCoding/RobotMentor GitHub Wiki


์ด๋ฏธ์ง€๋ฅผ ๊ทธ๋Œ€๋กœ ์ถœ๋ ฅํ•˜์—ฌ ์Šคํฌ๋กค๋ฐ”๋ฅผ ํ†ตํ•ด์„œ ์ œ์–ดํ•ด๋ณด์ž.

//image.Draw(dc, m_rect);
image.Draw(dc, 0, 0);

์šฐ์„  ๋‹ค์ด์–ผ๋กœ๊ทธ์— ์Šคํฌ๋กค๋ฐ”๋ฅผ ๋„ฃ์ž

void CMFCApplication6Dlg::OnPaint()
{
	CPaintDC dc(this); // ๊ทธ๋ฆฌ๊ธฐ๋ฅผ ์œ„ํ•œ ๋””๋ฐ”์ด์Šค ์ปจํ…์ŠคํŠธ์ž…๋‹ˆ๋‹ค.

	if (IsIconic())
	{
        // ...
	}
	else
	{
		if (image.IsNull() == 0) {
			dc.SetStretchBltMode(COLORONCOLOR);
			//image.Draw(dc, m_rect);

			int scroll_x_pos = GetScrollPos(SB_HORZ);
			int scroll_y_pos = GetScrollPos(SB_VERT);

			//image.Draw(dc, -scroll_x_pos, -scroll_y_pos);
			image.Draw(dc, 0,0,m_rect.Width(), m_rect.Height(),
				scroll_x_pos, scroll_y_pos, m_rect.Width(), m_rect.Height());
		}

		// CDialogEx::OnPaint();
	}
}
void CMFCApplication6Dlg::OnBnClickedSlectBtn()
{
	wchar_t name_filter[] = L"๋ชจ๋“  ํŒŒ์ผ(*.*)|*.*|Jpeg ํŒŒ์ผ(*.jpg)|*.jpg|PNG ํŒŒ์ผ(*.png)|*.png||";
	CFileDialog ins_dlg(TRUE, L"jpg", L"*.jpg", OFN_HIDEREADONLY | OFN_NOCHANGEDIR, name_filter);
	ins_dlg.m_ofn.nFilterIndex = 2;

	if (IDOK == ins_dlg.DoModal()) {
		GetClientRect(m_rect);
		if (!image.IsNull()) {
			image.Destroy();
		}
		image.Load(ins_dlg.GetPathName());

		SetScrollRange(SB_HORZ, 0, image.GetWidth() - m_rect.Width(),0);
		SetScrollRange(SB_VERT, 0, image.GetHeight() - m_rect.Height(), 0);
		Invalidate(FALSE);
	}
}
void CMFCApplication6Dlg::OnSize(UINT nType, int cx, int cy)
{
	CDialogEx::OnSize(nType, cx, cy);

	//GetClientRect(m_rect);
	m_rect.right = cx;
	m_rect.bottom = cy;

	if (!image.IsNull()) {
		SetScrollRange(SB_HORZ, 0, image.GetWidth() - m_rect.Width(), 0);
		SetScrollRange(SB_VERT, 0, image.GetHeight() - m_rect.Height(), 0);
	}

	Invalidate(FALSE);
}
void CMFCApplication6Dlg::OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
{
	if(pScrollBar == NULL) ProcessScroll(nSBCode, nPos, SB_VERT);

	CDialogEx::OnVScroll(nSBCode, nPos, pScrollBar);
}


void CMFCApplication6Dlg::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
{
	if (pScrollBar == NULL) ProcessScroll(nSBCode, nPos, SB_HORZ);
	
	CDialogEx::OnHScroll(nSBCode, nPos, pScrollBar);
}


void CMFCApplication6Dlg::ProcessScroll(UINT nSBCode, UINT nPos, int a_scroll_type)
{
	int scroll_pos = GetScrollPos(a_scroll_type), min = 0, max = 0;
	GetScrollRange(a_scroll_type, &min, &max);

	switch (nSBCode) {
		// ์Šคํฌ๋กค๋ฐ” ํ™”์‚ดํ‘œ ํด๋ฆญ
	case SB_LINEDOWN:
		if (scroll_pos < max) SetScrollPos(a_scroll_type, ++scroll_pos);
		break;
	case SB_LINEUP:
		if (scroll_pos > min) SetScrollPos(a_scroll_type, --scroll_pos);
		break;
		// ์Šคํฌ๋กค๋ฐ” ์ž์ฒด๋ฅผ ํด๋ฆญ
	case SB_PAGEDOWN:
		if (scroll_pos + 24 < max) SetScrollPos(a_scroll_type, scroll_pos + 24);
		break;
	case SB_PAGEUP:
		if (scroll_pos - 24 > min) SetScrollPos(a_scroll_type, scroll_pos - 24);
		break;
		// ์Šคํฌ๋กค๋ฐ” ์žก๊ณ  ๋“œ๋ ˆ๊ทธ
	case SB_THUMBPOSITION:
	case SB_THUMBTRACK:
		SetScrollPos(a_scroll_type, nPos);
		break;
	}
	Invalidate(FALSE);
}