描述:
我使用ATL的Full Control写一个字幕控件,遇到这样一个问题:
当在控件的属性页改变背景颜色后,控件不能正常显示背景颜色,只能显示黑白两色,如果是亮色,则显示白,反之,显示黑。
显示背景的代码如下:
CDC memdc;
memdc.DeleteDC();
memdc.CreateCompatibleDC(&dc);
CBitmap *m_pBitmap = new CBitmap;
m_pBitmap->CreateCompatibleBitmap(&memdc, m_rect.Width(), m_rect.Heigh());
memdc.SelectObject(m_pBitmap);
HDC hdc = di.hdcDraw;
COLORREF colFore;
OleTranslateColor(m_clrFillColor, NULL, &colFore);
HBRUSH hBrush = CreateSolidBrush(colFore);
memdc.SelectObject(hBrush);
dc.BitBlt(m_rect.left, m_rect.top, m_rect.Width(), m_rect.Heigh(),&memdc, 0, 0, SRCCOPY);
请问怎么改正,谢谢各位!!!
解决方案1:
使用fullcontrol 继承CStatic控件,使用此控件的背景消息,得到背景刷子句柄后直接返回给系统处理,这样可避免刷新时的闪动。
解决方案2: void C***ClientDlg::DrawCircleDat()
{
m_BitMap.LoadBitmap(IDB_CIRCLEDAT);
CBitmap BitMapTemp_1;
CDC BitMap_DCTemp_1;
CDC BitMap_DC,*pDC;
pDC=GetDC();
BITMAP m_Bm;
m_BitMap.GetBitmap(&m_Bm);
BitMap_DC.CreateCompatibleDC(pDC);
BitMap_DC.SelectObject(&m_BitMap);
BitMap_DC.SelectObject(&m_BitMap);
BitMap_DCTemp_1.CreateCompatibleDC(pDC);
BitMapTemp_1.CreateBitmap((int)m_Bm.bmWidth,(int)m_Bm.bmHeight,1,1,NULL);
BitMap_DCTemp_1.SelectObject(&BitMapTemp_1);
//方案一
// BitMap_DC.SetBkColor(RGB(255,255,255));
// BitMap_DCTemp_1.BitBlt(0,0,(int)m_Bm.bmWidth,(int)m_Bm.bmHeight,&BitMap_DC,0,0,SRCCOPY);
// BitMap_DC.BitBlt(0,0,(int)m_Bm.bmWidth,(int)m_Bm.bmHeight,&BitMap_DCTemp_1,0,0,SRCAND);
// pDC->BitBlt(0,0,(int)m_Bm.bmWidth,(int)m_Bm.bmHeight,&BitMap_DCTemp_1,0,0,SRCAND);
// pDC->BitBlt(0,0,(int)m_Bm.bmWidth,(int)m_Bm.bmHeight,&BitMap_DC,0,0,SRCPAINT);
//
//方案二
pDC->BitBlt(0,0,(int)m_Bm.bmWidth,(int)m_Bm.bmHeight,&BitMap_DC,0,0,SRCCOPY);
//
m_BitMap.DeleteObject();
BitMapTemp_1.DeleteObject();
BitMap_DCTemp_1.DeleteDC();
BitMap_DC.DeleteDC();
pDC->DeleteDC();
}