为何不能释放资源?看看这段代码

lead001 2003-10-15 05:23:49
为何不能释放资源?看看这段代码
请指点
var
ps: PAINTSTRUCT;
DC, drawDC1, drawDC2: HDC;
drawBMP1, drawBMP2, oldBMP1, oldBMP2: HBitmap;
iWidth, iHeight, ibmpWidth, ibmpHeight, I, J, K, W: integer;
begin
FInterDrawing := True;
try
BeginPaint(Self.Handle, Ps);
try

DC := Ps.hdc;
iWidth := ClientWidth;
iHeight := ClientHeight;


drawDC1 := CreateCompatibleDC(DC);
drawBMP1 := CreateCompatibleBitmap(DC, iWidth, iHeight);
oldBMP1 := SelectObject(drawDC1, drawBMP1);

SendMessage(Handle, WM_PAINT, drawDC1, 0);

drawDC2 := CreateCompatibleDC(DC);
drawBMP2 := CreateCompatibleBitmap(DC, iWidth, iHeight);
oldBMP2 := SelectObject(drawDC2, drawBMP2);

iBmpWidth := Background.Width;
iBmpHeight := Background.Height;
K := ClientWidth div iBmpWidth;
W := ClientHeight div iBmpHeight;
for I := 0 to K do
for J := 0 to W do
BitBlt(drawDC2, I * iBmpWidth, J * iBmpHeight, iBmpWidth, iBmpHeight, Background.Canvas.Handle, 0, 0, SRCCOPY);

TransparentBlt(drawDC2, 0, 0, iWidth, iHeight, drawDC1, 0, 0, iWidth, iHeight, ColorToRGB(clWindow));
BitBlt(DC, 0, 0, iWidth, iHeight, drawDC2, 0, 0, SRCCOPY);

SelectObject(drawDC1, oldBMP1);
DeleteObject(drawBMP1);

SelectObject(drawDC2, oldBMP2);

DeleteObject(drawBMP2);

finally
ReleaseDC(self.Handle,DC);
DeleteDC(drawDC1);
DeleteDC(drawDC2);

EndPaint(Handle, Ps);
end;

finally
FInterDrawing := False;
end;
...全文
35 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
dickeybird888 2003-10-15
  • 打赏
  • 举报
回复
hen na !(·¥·)
huojiehai 2003-10-15
  • 打赏
  • 举报
回复
finally
//ReleaseDC(self.Handle,DC);这句有问题,去掉
DeleteDC(drawDC1);
DeleteDC(drawDC2);

5,379

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧