用过Delphix得请进!(另有分赠)(100分)

  • 主题发起人 主题发起人 elton
  • 开始时间 开始时间
E

elton

Unregistered / Unconfirmed
GUEST, unregistred user!
最近,做一个语图滚动程序,需要用DirectDraw来完成,我使用了Delphix控件,但是出现了一些问题,如下:

procedure TForm1.DXDraw1Click(Sender: TObject);
var
P: PSmallInt;
B: TBitmap;
MyBmp: BITMAP;
HlMyBmp: HBITMAP;
hold: HBITMAP;
dc: HDC;
srcdc: HDC;
FSureface: TDirectDrawSurface;
TempStream: TMemoryStream;
count: integer;
DiBHeader: BITMAPINFO;
Bits: PByte;
Bitmapinfoheader: TBitmapInfoHeader;
Bitmapinfo: TBitmapInfo;
Fsurface: TDirectDrawSurface;
ddsd: TDDSurfaceDesc;
dd: IDirectDrawSurface;
i: integer;
dx: HRESULT;
begin
hold := 0;
srcdc := 0;
HlMyBmp := 0;
GetMem(P, 64 * 64 * 3);
ZeroMemory(p, dword(64 * 64 * 3));
with MyBmp do
begin
bmBits := P;
bmType := 0;
bmWidth := 100;
bmHeight := 100;
bmWidthBytes := 128;
bmPlanes := 1;
bmBitsPixel := 16;
end;
HlMyBmp := CreateBitmapIndirect(MyBmp);
FSureface := TDirectDrawSurface.Create(DXDraw1.DDraw);
try
ZeroMemory(@ddsd, sizeof(ddsd));
ddsd.dwSize := sizeof(ddsd);
ddsd.dwFlags := DDSD_CAPS or DDSD_HEIGHT or DDSD_WIDTH or DDSD_LPSURFACE;————〉就是这里,如果我加了DDSD_LPSURFACE,下面创建图面就会失败,为什么???
ddsd.ddsCaps.dwCaps := DDSCAPS_OFFSCREENPLAIN;
ddsd.dwWidth := MyBmp.bmWidth;
ddsd.dwHeight := MyBmp.bmHeight;
ddsd.lpSurface := MyBmp.bmBits; ————〉与DDSD_LPSURFACE对应
if not FSureface.CreateSurface(ddsd) then——————〉创建图面
showmessage('****'); //刷新画面

if not DXDraw1.CanDraw then
exit;
DXDraw1.Surface.Draw(50, 50, FSureface.ClientRect, FSureface, True);
DXDraw1.Flip;
finally
FSureface.Free;
FSureface := nil;
end;

end;
 
没有人知道????
 
帮你提前
 
有空幫你看看。[:)]下班了
 
我觉得太高深了……但很乐意学习
 
后退
顶部