16,472
社区成员
发帖
与我相关
我的任务
分享
// CDC MDc ;
// CBitmap bmp;
if(!MDc.CreateCompatibleDC(NULL))
{
::PostQuitMessage(0);
}
bmp.CreateCompatibleBitmap(&MDc, rt.Width(), rt.Height());
::SelectObject(MDc.GetSafeHdc(), bmp);
double colorR=255,colorG=255,colorB=255;
CPen* oldPen;
for(int i2=0;i<rt.Height();i2++)
{
if(i<rt.Height()/3)
{
colorR-=0.3;
colorG-=0.2;
colorB-=0.1;
}
else
{
colorR+=0.06;
colorG+=0.04;
colorB+=0.04;
}
CPen pen(PS_SOLID, 3, RGB(colorR ,colorG, colorB) );//RGB(189 ,212, 230)
oldPen= MDc.SelectObject(&pen);
MDc.MoveTo(0,i2);
MDc.LineTo(rt.Width(),i2);
MDc.SelectObject(oldPen);
(1)以上代码 我要在内存中绘制渐变的背景 然后一次性到对话框上 为什么没效果?要怎么解决呢?
(2)我要在内存中先画个蓝色的圆 再画个红色的圆 为什么对内存DC SelectObject pen 没效果啊? 要怎么解决?
CPen* oldPen;
CPen pen(PS_SOLID, 3, RGB(200 ,0, 0) );
oldPen= MDc.SelectObject(&pen);
而这样做却2个圆的颜色都一样 pdcView->SetTextColor(RGB(0,0,250));
pdcView->BitBlt(0, 0, rt.Width(), rt.Height(), &m_dcMemory, 0, 0, SRCCOPY);
//OnInitDialog
...
CRect rc;
GetClientRect(rc);
CDC *pDC = NULL;
pDC = GetDC();
if(pDC)
{
bmp.CreateCompatibleBitmap(pDC,rc.Width(),rc.Height());
memDC.CreateCompatibleDC(pDC);
ReleaseDC(pDC);
}
else
AfxMessageBox(_T("没有获得到DC"));
...
//DrawBkgnd function
void CCBackgndDlg::Draw_Client(CRect rc, CDC *pDC)
{
CBitmap *oldBmp = memDC.SelectObject(&bmp);
double colorR=255,colorG=255,colorB=255;
CPen* oldPen;
for(int i=0;i<rc.Height();i++)
{
if(i<rc.Height()/3)
{
colorR-=0.3;
colorG-=0.2;
colorB-=0.1;
}
else
{
colorR+=0.06;
colorG+=0.04;
colorB+=0.04;
}
CPen pen(PS_SOLID, 3, RGB(colorR,colorG,colorB));
oldPen= memDC.SelectObject(&pen);
memDC.MoveTo(0,i);
memDC.LineTo(rc.Width(),i);
memDC.SelectObject(oldPen);
}
pDC->BitBlt(rc.left,rc.top,rc.Width(),rc.Height(),
&memDC,0,0,
SRCCOPY);
memDC.SelectObject(oldBmp);
}
//OnPaint
...
CDC *pDC = GetDC();
CRect rc;
GetClientRect(rc);
Draw_Client(rc, pDC);
ReleaseDC(pDC);
...