int width = rt.Width(); int height = rt.Height(); int r1 = GetRValue(cl1); int g1 = GetGValue(cl1); int b1 = GetGValue(cl1); int r2 = GetRValue(cl2); int g2 = GetGValue(cl2); int b2 = GetBValue(cl2); //dibcolor table RGBQUAD *rgb ; if (bHro) rgb = new RGBQUAD[width]; else rgb = new RGBQUAD[height]; HBITMAP oldBmp = (HBITMAP)::SelectObject(memdc.m_hDC, memBmp); //memdc.FillSolidRect(&rt, RGB(0XFF, 0, 0XFF)); if (bHro) // { float dr = (float)((float)(r2 - r1) / (float)width); float dg = (float)((float)(g2 - g1) / (float)width); float db = (float)((float)(b2 - b1) / (float)width); for (int i = 0; i < width; i++) { int r = dr * i + r1; int g = dg * i + g1; int b = db * i + b1;
CPaintDC dc(this);
CDC* pMemDC=new CDC;
CBitmap* pBitmap=new CBitmap;
CRect Rect;
GetClientRect(&Rect);
pMemDC->CreateCompatibleDC(&dc);
pBitmap->LoadBitmap(IDB_BITMAP);
pMemDC->SelectObject(pBitmap);
dc.BitBlt(0,0,Rect.bottom,pMemDC,0,0,SRCCOPY);
pBitmap->DeleteObject();
pMemDC->DeleteObject();
CBitmap bitmap;
CBitmap* pOldBitmap;
CDC MemDC;
int i;
CPen pen;
CPen* oldpen;
MemDC.CreateCompatibleDC(&dc); ///建立与显示设备兼容的内存设备场境
bitmap.CreateCompatibleBitmap(&dc,100,100);///建立与显示设备兼容的位图
pOldBitmap=MemDC.SelectObject(&bitmap); ///将位图选入内存场境
for(i=0;i<100;i++)
{ ///画100根线
pen.CreatePen(PS_SOLID,1, RGB(0,0,i*2+55));
oldpen=MemDC.SelectObject(&pen);
MemDC.MoveTo(0,i);
MemDC.LineTo(100,i);
MemDC.SelectObject(oldpen);
pen.DeleteObject();
}
dc.BitBlt(50,50,100,100,&MemDC,0,0,SRCCOPY); ///显示它
MemDC.SelectObject(pOldBitmap);
{
CDC memdc;
memdc.CreateCompatibleDC(pDC); HBITMAP memBmp = ::CreateCompatibleBitmap(pDC->m_hDC, rt.Width(), rt.Height());
int width = rt.Width();
int height = rt.Height(); int r1 = GetRValue(cl1);
int g1 = GetGValue(cl1);
int b1 = GetGValue(cl1); int r2 = GetRValue(cl2);
int g2 = GetGValue(cl2);
int b2 = GetBValue(cl2); //dibcolor table
RGBQUAD *rgb ;
if (bHro)
rgb = new RGBQUAD[width];
else
rgb = new RGBQUAD[height]; HBITMAP oldBmp = (HBITMAP)::SelectObject(memdc.m_hDC, memBmp);
//memdc.FillSolidRect(&rt, RGB(0XFF, 0, 0XFF));
if (bHro) //
{
float dr = (float)((float)(r2 - r1) / (float)width);
float dg = (float)((float)(g2 - g1) / (float)width);
float db = (float)((float)(b2 - b1) / (float)width); for (int i = 0; i < width; i++)
{
int r = dr * i + r1;
int g = dg * i + g1;
int b = db * i + b1;
//--------------
//test only
//--------------
rgb[i].rgbRed = r;
rgb[i].rgbBlue = b;
rgb[i].rgbGreen = g;
/*if (!::SetDIBColorTable(memdc.m_hDC, 0, width, rgb))
PostQuitMessage(0);*/
CPen pen, *pPen;
pen.CreatePen(PS_SOLID, 1, RGB(r, g, b));
pPen = memdc.SelectObject(&pen); memdc.MoveTo(i /*+ rt.left*/, rt.top);
memdc.LineTo(i /*+ rt.left*/, rt.bottom); memdc.SelectObject(pPen);
::DeleteObject(pen.m_hObject); //Destroy object
}
}
else
{
float dr = (float)((float)(r2 - r1) / (float)height);
float dg = (float)((float)(g2 - g2) / (float)height);
float db = (float)((float)(b2 - b2) / (float)height); for (int i = rt.top; i < rt.bottom; i++)
{
int r = (int)dr * i + r1;
int g = (int)dg * i + g1;
int b = (int)db * i + b1; CPen pen, * pPen;
pen.CreatePen(PS_DOT, 1, RGB(r, g, b)); pPen = pDC->SelectObject(&pen);
memdc.MoveTo(rt.left, i);
memdc.LineTo(rt.right, i); memdc.SelectObject(pPen);
::DeleteObject(pen.m_hObject); //Destroy object }
}
pDC->BitBlt(rt.left, rt.top, rt.Width(), rt.Height(), &memdc, 0,
0, SRCCOPY);
::SelectObject(memdc, oldBmp);
::DeleteObject(oldBmp);
delete rgb;
::DeleteDC(memdc.m_hDC);
}
只看if 中的就有了,else 还没有改。
1.memdc.FillSolidRect(&rt, RGB(0XFF, 0, 0XFF));
2.memdc.MoveTo(i /*+ rt.left*/, rt.top);
memdc.LineTo(i /*+ rt.left*/, rt.bottom);
3.memdc.MoveTo(rt.left, i);
memdc.LineTo(rt.right, i);
我想不用我在解释了吧
问题解决了。呵呵、
大家分了吧
开个玩笑嘛,呵呵