mfc_scrollbar - 8BitsCoding/RobotMentor GitHub Wiki


μŠ€ν¬λ‘€λ°”λ₯Ό λ„£λŠ” 방법은 λ‹€μ΄μ–Όλ‘œκ·Έμ˜ 속성에 Vertical Scrollbar λ₯Ό True둜 λ‘λ©΄λœλ‹€.

슀크둀 λ©”μ‹œμ§€λ₯Ό μ²˜λ¦¬ν•΄ μ€˜μ•Όν•œλ‹€.

void CMFCApplication1Dlg::OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
{
	if (pScrollBar == NULL)	// 컨트둀둜 λ§Œλ“€μ–΄μ§„ μŠ€ν¬λ‘€λ°”μ˜ 경우 아이디가 μžˆμ§€λ§Œ, λ‹€μ΄μ–Όλ‘œκ·Έμ— λ§Œλ“€μ–΄μ§„ 슀크둀 λ°”λŠ” 아이디가 μ—†λ‹€
	{
		int scroll_pos = GetScrollPos(SB_VERT), min = 0, max = 0;
		GetScrollRange(SB_VERT, &min, &max);

		switch (nSBCode) {
		// μŠ€ν¬λ‘€λ°” ν™”μ‚΄ν‘œ 클릭
		case SB_LINEDOWN :
			if(scroll_pos < max) SetScrollPos(SB_VERT, ++scroll_pos);
			break;
		case SB_LINEUP :
			if (scroll_pos > min) SetScrollPos(SB_VERT, --scroll_pos);
			break;
		// μŠ€ν¬λ‘€λ°” 자체λ₯Ό 클릭
		case SB_PAGEDOWN:
			if (scroll_pos + 24 < max) SetScrollPos(SB_VERT, scroll_pos + 24);
			break;
		case SB_PAGEUP:
			if (scroll_pos - 24 > min) SetScrollPos(SB_VERT, scroll_pos - 24);
			break;
		// μŠ€ν¬λ‘€λ°” 작고 λ“œλ ˆκ·Έ
		case SB_THUMBPOSITION:
		case SB_THUMBTRACK:
			SetScrollPos(SB_VERT, nPos);
			break;
		}
	}

	CDialogEx::OnVScroll(nSBCode, nPos, pScrollBar);
}
void CMFCApplication1Dlg::OnSize(UINT nType, int cx, int cy)
{
	CDialogEx::OnSize(nType, cx, cy);

	CRect r;
	GetClientRect(r);
	SetScrollRange(SB_VERT, 0, 8 * 9 * 24 - r.Height(), 0);
}
void CMFCApplication1Dlg::OnPaint()
{
	CPaintDC dc(this); // 그리기λ₯Ό μœ„ν•œ λ””λ°”μ΄μŠ€ μ»¨ν…μŠ€νŠΈμž…λ‹ˆλ‹€.

	if (IsIconic())
	{
        // ...
	}
	else
	{
		CString str;
		int count = 0;
		dc.SetBkMode(TRANSPARENT);
		dc.SetTextColor(RGB(255, 0, 0));
		int scroll_pos = GetScrollPos(SB_VERT);

		for (int dan = 2; dan <= 9; dan++) {
			for (int i = 1; i < 9; i++) {
				str.Format(L"%d * %d = %d", dan, i, dan * 2);
				dc.TextOut(10, count*24- scroll_pos, str);
				count++;
			}
		}
		// CDialogEx::OnPaint();
	}
}
BOOL CMFCApplication1Dlg::OnInitDialog()
{
	CDialogEx::OnInitDialog();

	// 이 λŒ€ν™” μƒμžμ˜ μ•„μ΄μ½˜μ„ μ„€μ •ν•©λ‹ˆλ‹€.  μ‘μš© ν”„λ‘œκ·Έλž¨μ˜ μ£Ό 창이 λŒ€ν™” μƒμžκ°€ 아닐 κ²½μš°μ—λŠ”
	//  ν”„λ ˆμž„μ›Œν¬κ°€ 이 μž‘μ—…μ„ μžλ™μœΌλ‘œ μˆ˜ν–‰ν•©λ‹ˆλ‹€.
	SetIcon(m_hIcon, TRUE);			// 큰 μ•„μ΄μ½˜μ„ μ„€μ •ν•©λ‹ˆλ‹€.
	SetIcon(m_hIcon, FALSE);		// μž‘μ€ μ•„μ΄μ½˜μ„ μ„€μ •ν•©λ‹ˆλ‹€.

	// TODO: 여기에 μΆ”κ°€ μ΄ˆκΈ°ν™” μž‘μ—…μ„ μΆ”κ°€ν•©λ‹ˆλ‹€.

	CRect r;
	GetClientRect(r);
	SetScrollRange(SB_VERT, 0, 8*9*24-r.Height(), 0);

	return TRUE;  // 포컀슀λ₯Ό μ»¨νŠΈλ‘€μ— μ„€μ •ν•˜μ§€ μ•ŠμœΌλ©΄ TRUEλ₯Ό λ°˜ν™˜ν•©λ‹ˆλ‹€.
}