OnEraseBkgnd已经返回TRUE。BOOL CDlgLogin::OnEraseBkgnd(CDC* pDC)
{
return TRUE;
return CDialog::OnEraseBkgnd(pDC);
}OnPaint代码如下CBitmap memBmp;
CBitmap * pBmpOld = NULL;
CFont * pOldFont = NULL;
CPaintDC dc(this); // device context for painting
CRect rect;
GetClientRect(&rect); CDC memDC;
memDC.CreateCompatibleDC(&dc);
memBmp.CreateCompatibleBitmap(&dc, rect.Width(), rect.Height());
pBmpOld = memDC.SelectObject(&memBmp); Graphics graphics(memDC.GetSafeHdc()); graphics.DrawImage(m_pPngTitle, 0, 0, m_pPngTitle->GetWidth(), m_pPngTitle->GetHeight());
graphics.DrawImage(m_pPngBody, 0, m_pPngTitle->GetHeight(), m_pPngBody->GetWidth(), m_pPngBody->GetHeight());
graphics.DrawImage(g_pPngLogo, 10, 8, g_pPngLogo->GetWidth(), g_pPngLogo->GetHeight());
FontFamily fontFamily(L"宋体");
Font font(&fontFamily, 11, FontStyleBold, UnitPoint);
SolidBrush solidBrush( Color(255,0,0,0) );
graphics.DrawString(APP_TITLE_UNICODE, (INT)wcslen(APP_TITLE_UNICODE), &font, PointF(35,10), &solidBrush);
dc.BitBlt(0,0, rect.Width(), rect.Height(), &memDC, 0, 0, SRCCOPY); memDC.SelectObject(pBmpOld);
memBmp.DeleteObject();
//删除兼容DC
memDC.DeleteDC();
ReleaseDC(&dc);
然后我在函数中改变背景图片m_pPngBody,调用Invalidate,依然会有很明显的闪烁。
不解。
{
return TRUE;
return CDialog::OnEraseBkgnd(pDC);
}OnPaint代码如下CBitmap memBmp;
CBitmap * pBmpOld = NULL;
CFont * pOldFont = NULL;
CPaintDC dc(this); // device context for painting
CRect rect;
GetClientRect(&rect); CDC memDC;
memDC.CreateCompatibleDC(&dc);
memBmp.CreateCompatibleBitmap(&dc, rect.Width(), rect.Height());
pBmpOld = memDC.SelectObject(&memBmp); Graphics graphics(memDC.GetSafeHdc()); graphics.DrawImage(m_pPngTitle, 0, 0, m_pPngTitle->GetWidth(), m_pPngTitle->GetHeight());
graphics.DrawImage(m_pPngBody, 0, m_pPngTitle->GetHeight(), m_pPngBody->GetWidth(), m_pPngBody->GetHeight());
graphics.DrawImage(g_pPngLogo, 10, 8, g_pPngLogo->GetWidth(), g_pPngLogo->GetHeight());
FontFamily fontFamily(L"宋体");
Font font(&fontFamily, 11, FontStyleBold, UnitPoint);
SolidBrush solidBrush( Color(255,0,0,0) );
graphics.DrawString(APP_TITLE_UNICODE, (INT)wcslen(APP_TITLE_UNICODE), &font, PointF(35,10), &solidBrush);
dc.BitBlt(0,0, rect.Width(), rect.Height(), &memDC, 0, 0, SRCCOPY); memDC.SelectObject(pBmpOld);
memBmp.DeleteObject();
//删除兼容DC
memDC.DeleteDC();
ReleaseDC(&dc);
然后我在函数中改变背景图片m_pPngBody,调用Invalidate,依然会有很明显的闪烁。
不解。
按理来说你换肤,一次绘图就够了,怎么会闪?