能不能提供一个GDI+画图的双缓冲Demo? 拖动时会闪烁啊!!求个Demo!! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 双缓冲就是先把复杂的绘图先画到内存DC上,然后再一起bitblt到真正显示的DC上嘛。看DELPHI里面的控件是怎么使用双缓冲防止闪烁的:procedure TWinControl.WMPaint(var Message: TWMPaint);var DC, MemDC: HDC; MemBitmap, OldBitmap: HBITMAP; PS: TPaintStruct;begin if not FDoubleBuffered or (Message.DC <> 0) then begin if not (csCustomPaint in ControlState) and (ControlCount = 0) then inherited else PaintHandler(Message); end else begin DC := GetDC(0); MemBitmap := CreateCompatibleBitmap(DC, ClientRect.Right, ClientRect.Bottom); ReleaseDC(0, DC); MemDC := CreateCompatibleDC(0); OldBitmap := SelectObject(MemDC, MemBitmap); try DC := BeginPaint(Handle, PS); Perform(WM_ERASEBKGND, MemDC, MemDC); Message.DC := MemDC; WMPaint(Message); Message.DC := 0; BitBlt(DC, 0, 0, ClientRect.Right, ClientRect.Bottom, MemDC, 0, 0, SRCCOPY); EndPaint(Handle, PS); finally SelectObject(MemDC, OldBitmap); DeleteDC(MemDC); DeleteObject(MemBitmap); end; end;end; 在DELPHI中操作XML的问题.. 用filter会出现Operation not applicable 请教一个错误 很菜的问题 后台用 Oracle 该怎么链接? 有没有更改窗体样子的控件 关于数组的问题,与图像有关 如何让dataset中的内容在dbgrid中以另一个内容显示 代码编辑器,选用什么样的文本控件? 地上有分,谁拣? delphi 快速排序的非递归实现算法 OLEContainer控件中显示WORD文档,但却只能显示第一页的内容,怎么解决?
procedure TWinControl.WMPaint(var Message: TWMPaint);
var
DC, MemDC: HDC;
MemBitmap, OldBitmap: HBITMAP;
PS: TPaintStruct;
begin
if not FDoubleBuffered or (Message.DC <> 0) then
begin
if not (csCustomPaint in ControlState) and (ControlCount = 0) then
inherited
else
PaintHandler(Message);
end
else
begin
DC := GetDC(0);
MemBitmap := CreateCompatibleBitmap(DC, ClientRect.Right, ClientRect.Bottom);
ReleaseDC(0, DC);
MemDC := CreateCompatibleDC(0);
OldBitmap := SelectObject(MemDC, MemBitmap);
try
DC := BeginPaint(Handle, PS);
Perform(WM_ERASEBKGND, MemDC, MemDC);
Message.DC := MemDC;
WMPaint(Message);
Message.DC := 0;
BitBlt(DC, 0, 0, ClientRect.Right, ClientRect.Bottom, MemDC, 0, 0, SRCCOPY);
EndPaint(Handle, PS);
finally
SelectObject(MemDC, OldBitmap);
DeleteDC(MemDC);
DeleteObject(MemBitmap);
end;
end;
end;