15,979
社区成员
发帖
与我相关
我的任务
分享
BOOL CxxxView::OnEraseBkgnd(CDC* pDC)
{
if((HDC)m_hBuffer != NULL)
{
::BitBlt(pDC->GetSafeHdc(), 0, 0, m_hSkin.Width(), m_hSkin.Height(),
m_hSkin, 0, 0, SRCCOPY);
m_btnSample.SetBk(pDC);
}
return TRUE;
}
void XButton::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct)
{
CDC *pDC = CDC::FromHandle( lpDrawItemStruct->hDC );
m_ButRect = lpDrawItemStruct->rcItem; //获取按钮尺寸
if( m_strText.IsEmpty() )
GetWindowText( m_strText ); //获取按钮文本
int nSavedDC = pDC->SaveDC();
VERIFY( pDC );
//拷贝按钮所在的背景-将父窗口的DC部分内容BITBLT过来
CClientDC clDC(GetParent());
CBitmap m_bmpBk;
CRect rect;
CRect rect1;
GetClientRect(rect);
CRect rc = rect;
GetWindowRect(rect1);
GetParent()->ScreenToClient(rect1);
GetParent()->ScreenToClient(rc);
if (m_dcBk.m_hDC == NULL)
{
m_dcBk.CreateCompatibleDC(&clDC);
m_bmpBk.CreateCompatibleBitmap(&clDC, rect.Width(), rect.Height());
oldBmp = m_dcBk.SelectObject(&m_bmpBk);
m_dcBk.BitBlt(0, 0, rect.Width(), rect.Height(), &clDC, rect1.left ,rect1.top , SRCCOPY);
}
CDC dcMem;
dcMem.CreateCompatibleDC(pDC);
CBitmap bk;
bk.CreateCompatibleBitmap(pDC,m_ButRect.Width(),m_ButRect.Height());
dcMem.SelectObject(bk);
dcMem.BitBlt(0,0,m_ButRect.Width(),m_ButRect.Height(),&m_dcBk,0,0,SRCCOPY);
DrawButton( &dcMem); //绘制按钮
pDC->BitBlt(0,0,m_ButRect.Width(),m_ButRect.Height(),&dcMem,0,0,SRCCOPY);
pDC->RestoreDC( nSavedDC );
}