19,469
社区成员
发帖
与我相关
我的任务
分享
COLORREF clrBk = pDC->GetBkColor();
memDC.FillRect(rcClient, &CBrush(clrBk));
int CXXWnd::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CWnd::OnCreate(lpCreateStruct) == -1)
return -1;
BITMAP bitinfo;
m_bitmap.LoadBitmap(IDB_XXX); // 加载图片资源
m_bitmap.GetBitmap(&bitinfo);
m_szImage = CSize(bitinfo.bmWidth, bitinfo.bmHeight);
return 0;
}
void CXXWnd::DrawCross(CDC* pDC)
{
ASSERT(pDC);
// 这里用双缓冲
CDC memDC1, memDC2;
CBitmap bitmap, *pOldBitmap1 = NULL, *pOldBitmap2 = NULL;
CPen pen(PS_SOLID, 2, RGB(255, 0, 0)), *pOldPen = NULL;
CRect rcClient;
GetClientRect(rcClient);
if ( memDC1.CreateCompatibleDC(pDC)
&& memDC2.CreateCompatibleDC(pDC)
&& bitmap.CreateCompatibleBitmap(pDC, rcClient.Width(), rcClient.Height()) )
{
// 选入背景资源的内存DC
pOldBitmap1 = memDC1.SelectObject(&m_bitmap);
// 完整内容的内存DC
pOldBitmap2 = memDC2.SelectObject(&bitmap);
pOldPen = memDC2.SelectObject(&pen);
memDC2.StretchBlt(0, 0, rcClient.Width(), rcClient.Height(), &memDC1, 0, 0, m_szImage.cx, m_szImage.cy, SRCCOPY);
if ( m_bOpenDrawCross && m_bMouseIn )
{
CPoint ptMouse;
GetCursorPos(&ptMouse);
ScreenToClient(&ptMouse);
memDC2.MoveTo(rcClient.left, ptMouse.y);
memDC2.LineTo(rcClient.right, ptMouse.y);
memDC2.MoveTo(ptMouse.x, rcClient.top);
memDC2.LineTo(ptMouse.x, rcClient.bottom);
}
pDC->BitBlt(rcClient.left, rcClient.top, rcClient.Width(), rcClient.Height(), &memDC2, 0, 0, SRCCOPY);
memDC2.SelectObject(pOldPen);
memDC2.SelectObject(pOldBitmap2);
memDC1.SelectObject(pOldBitmap1);
}
}