반응형
비트맵 배경 입힌 후,
https://seowoozzang.tistory.com/3
.h
// These variables are required for vertical scrolling. static int m_yMinScroll; // minimum vertical scroll value static int m_yCurrentScroll; // current vertical scroll value static int m_yMaxScroll; // maximum vertical scroll value
.cpp
void CMyClass::OnSize(UINT nType, int cx, int cy) { int xNewSize; int yNewSize; xNewSize = cx; yNewSize = cy; // The vertical scrolling range is defined by // (bitmap_height) - (client_height). The current vertical // scroll value remains within the vertical scrolling range. m_yMaxScroll = max(m_cszBkgBitmap.cy - yNewSize, 0); m_yCurrentScroll = min(m_yCurrentScroll, m_yMaxScroll); SCROLLINFO si; ZeroMemory(&si, sizeof(si)); si.cbSize = sizeof(si); si.fMask = SIF_RANGE | SIF_PAGE | SIF_POS; si.nMin = m_yMinScroll; si.nMax = m_cszBkgBitmap.cy; si.nPage = yNewSize; si.nPos = m_yCurrentScroll; SetScrollInfo(SB_VERT, &si, TRUE); CDialogEx::OnSize(nType, cx, cy); } void CMyClass::OnPaint() { CPaintDC dc(this); // device context for painting m_oldbitmap = m_MemDC.SelectObject(&m_bitmap); dc.SelectObject(m_oldbitmap); INT nBkgY = m_yCurrentScroll; m_hdc.BitBlt(0, 0, m_cszBkgBitmap.cx, m_cszBkgBitmap.cy, &m_MemDC, 0, nBkgY, SRCCOPY); dc.BitBlt(0, 0, m_cszBkgBitmap.cx, m_cszBkgBitmap.cy, &m_MemDC, 0, nBkgY, SRCCOPY); MoveResources(); //리소스 있으면 옮기기 } void CMyClass::OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar) { int yDelta; // yDelta = new_pos - current_pos int yNewPos; // new position switch (nSBCode) { case SB_PAGEUP: yNewPos = m_yCurrentScroll - 50; break; // User clicked the scroll bar shaft below the scroll box. case SB_PAGEDOWN: yNewPos = m_yCurrentScroll + 50; break; // User clicked the top arrow. case SB_LINEUP: yNewPos = m_yCurrentScroll - 5; break; // User clicked the bottom arrow. case SB_LINEDOWN: yNewPos = m_yCurrentScroll + 5; break; // User dragged the scroll box. case SB_THUMBPOSITION: yNewPos = nPos; break; default: yNewPos = m_yCurrentScroll; // Reset the current scroll position. m_yCurrentScroll = yNewPos; // Scroll the window. (The system repaints most of the // client area when ScrollWindowEx is called; however, it is // necessary to call UpdateWindow in order to repaint the // rectangle of pixels that were invalidated.) //ScrollWindowEx(0, -yDelta, (CONST RECT *) NULL, // (CONST RECT *) NULL, NULL, (PRECT) NULL, // SW_INVALIDATE); //UpdateWindow(); SCROLLINFO si; ZeroMemory(&si, sizeof(si)); si.cbSize = sizeof(si); si.fMask = SIF_POS; si.nPos = m_yCurrentScroll; SetScrollInfo(SB_VERT, &si, TRUE); Invalidate(); // OnPaint()호출 } } BOOL CMyClass::OnEraseBkgnd(CDC* pDC) { return TRUE; //return CDialogEx::OnEraseBkgnd(pDC); //화면깜빡임 방지 } BOOL CMyClass::OnMouseWheel(UINT nFlags, short zDelta, CPoint pt) { if( zDelta > 0 ) { PostMessage(WM_VSCROLL, SB_LINEUP); } else { PostMessage(WM_VSCROLL, SB_LINEDOWN); } return CDialogEx::OnMouseWheel(nFlags, zDelta, pt); }
반응형
'c++ > MFC' 카테고리의 다른 글
[MFC] string to wstring/wstring to string변환/ CStringA <-> CStringW (0) | 2018.12.14 |
---|---|
[MFC] Office CommandBars 추가하는 COM 에드인이 최초 실행시에만 로드되는 문제/Office Context Menu CommandBars Addin loads only initial start up. (0) | 2018.12.13 |
[MFC] error C2248: 'CObject::CObject' 해결 (0) | 2018.12.13 |
[MFC] 다이얼로그 배경에 bmp 비트맵 이미지 입하기. (0) | 2018.12.12 |
[MFC] ttf 파일로 setfont 폰트 등록하기. (0) | 2018.12.12 |