16,471
社区成员
发帖
与我相关
我的任务
分享
//Replace OnPaint()
void CScrollBitmapDlg::OnMyPaint(WPARAM wParam, LPARAM lParam)
{
if (IsIconic())
{
CPaintDC dc(this);
SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);
// Center icon in client rectangle
int cxIcon = GetSystemMetrics(SM_CXICON);
int cyIcon = GetSystemMetrics(SM_CYICON);
CRect rect;
GetClientRect(&rect);
int x = (rect.Width() - cxIcon + 1) / 2;
int y = (rect.Height() - cyIcon + 1) / 2;
// Draw the icon
dc.DrawIcon(x, y, m_hIcon);
}
else
{
if(wParam)
{// paint to memDC
CDC *pDC=CDC::FromHandle((HDC)wParam);
pDC->BitBlt(m_rcPicture.left,m_rcPicture.top,m_rcPicture.Width(),
m_rcPicture.Height(),&m_dcMem, m_Sourcex, m_Sourcey,SRCCOPY);
}
else
{// typical way painting in dialog.
CPaintDC dc(this);
m_Pic.Invalidate(FALSE);// do not erase background!
dc.BitBlt(m_rcPicture.left,m_rcPicture.top,m_rcPicture.Width(),
m_rcPicture.Height(),&m_dcMem, m_Sourcex, m_Sourcey,SRCCOPY);
// others
CDialog::OnPaint();
}
}
}
//
void CScrollBitmapDlg::OnVScroll(UINT nSBCode,UINT nPos,CScrollBar *pScrollBar)
{// TODO: Add your message handler code here and/or call default
// for focus not jumpping
GetDlgItem(IDOK)->SetFocus();
// scrolling
switch (nSBCode)
{
case SB_LINEUP:
case SB_PAGEUP:
if(m_Sourcey >=10) m_Sourcey -= 10;
else m_Sourcey = 0;
break;
case SB_LINEDOWN:
case SB_PAGEDOWN:
if((m_Sourcey+m_rcPicture.Height()+10)<m_bmInfo.bmHeight)
m_Sourcey += 10;
else
m_Sourcey = m_bmInfo.bmHeight -m_rcPicture.Height();
break;
case SB_TOP:
m_Sourcey = 0;
break;
case SB_BOTTOM:
m_Sourcey = INT_MAX;
break;
case SB_THUMBTRACK:
m_Sourcey = nPos;
break;
default:
// afxDump << nSBCode << "=SB_ENDSCROLL\n";
break;
}
m_vBar.SetScrollPos(m_Sourcey);
InvalidateRect(&m_rcPicture,FALSE);
// CDialog::OnVScroll(nSBCode, nPos, pScrollBar);
}
//
void CScrollBitmapDlg::OnHScroll(UINT nSBCode,UINT nPos,CScrollBar *pScrollBar)
{// TODO: Add your message handler code here and/or call default
// for focus not jumpping
GetDlgItem(IDOK)->SetFocus();
// scrolling
switch (nSBCode)
{
case SB_LINELEFT:
case SB_PAGELEFT:
if(m_Sourcex >=10) m_Sourcex -= 10;
else m_Sourcex = 0;
break;
case SB_LINERIGHT:
case SB_PAGERIGHT:
if((m_Sourcex+m_rcPicture.Width()+10)<m_bmInfo.bmWidth)
m_Sourcex += 10;
else
m_Sourcex = m_bmInfo.bmWidth -m_rcPicture.Width();
break;
case SB_TOP:
m_Sourcex = 0;
break;
case SB_BOTTOM:
m_Sourcex = INT_MAX;
break;
case SB_THUMBTRACK:
m_Sourcex= nPos;
break;
default:
// afxDump << nSBCode << "=SB_ENDSCROLL\n";
break;
}
//
m_hBar.SetScrollPos(m_Sourcex);
InvalidateRect(&m_rcPicture,FALSE);
// CDialog::OnHScroll(nSBCode, nPos, pScrollBar);
}