我想在Panel上画线,可为什么填充到Panel中是全黑背景的,如何能解决? ( 积分: 100 )

  • 主题发起人 alva_bai
  • 开始时间
A

alva_bai

Unregistered / Unconfirmed
GUEST, unregistred user!
var
dc, hMemDC: HDC;
Bitmap, pOldBitmap: HBITMAP;
begin

dc:= GetDC(pnl1.Handle);
hMemDC:= CreateCompatibleDC(DC);

Bitmap:= CreateCompatibleBitmap(DC,pnl1.Width,pnl1.Height);

pOldBitmap:= SelectObject(hMemDC, Bitmap);


//
// 画其它东西
//

StretchBlt( dc, 0, 0, pnl1.Width, pnl1.Height, hMemDC, 0, 0, pnl1.Width, pnl1.Height, SRCCOPY);
//BitBlt(dc, 50, 50, pnl1.Width, pnl1.Height, hMemDC, 0, 0, SRCCOPY);

Bitmap := SelectObject(hMemDC, pOldBitmap);

DeleteObject(Bitmap);
ReleaseDC(pnl1.Handle, DC);
DeleteDC(dc);

end;
 
1、你创建的位图 Bitmap 的初始状态,是每个 Pixel 的颜色值都为 0,选入到 hdcMem 以后,自然是漆黑一片啦;而默认的画笔和颜色是黑色,黑色画在黑色上,还是什么都没有。
2、解决非常简单,在画图之前把 Bitmap 涂上底色:
FillRect(hdcMem, pnl1.ClientRect, GetStockObject(WHITE_BRUSH));
// 画其它东西

欧了么?
 
去掉这句:
DeleteDC(dc); 试试
 
To duhai_lee:
去掉 DeleteDC(dc) 后,楼主电脑的 GDI 对象数量会成倍增加。
 
顶部