感觉上你的缓冲表面对象处理不当。在 DirectDraw 中你根本不需要也不应该直接在主表面上进行绘图,而是应该在后台表面上绘图。后台表面可以有一个(和主表面组成双缓冲),也可以有二个(和主表面组成三缓冲),甚至更多,但那要耗费内存。因为表面对象是可以直接在显示卡的显存上创建的。如果显卡的显存不够,只能在系统内存上创建。在后台表面上绘图完成后,必须调用 IDirectDraw 对象的 Flip 方法,交换主表面和后台表面的指针。因为主表面对象总是直接对应显示内存(直接写屏)。你的程序中创建了一个后台表面,组成双缓冲,但却没有利用后台表面!另外,如果你要使用外部图片,最好的办法是再另外创建一个或若干个屏外表面对象,将图片调入存放在屏外表面上。这样做得好处有很多,你可以利用 IDirectDrawSurface 的 Bitblt 等快速位快传输方法将一个表面的某个部分的图像拷贝道另一个表面,并且可以实现背景透明、动画精灵等特效。总之,一句话很难说清的。建议你去看看有关 DirectX 编程的资料。我这里有一个用 Delphi 5 编写的 DirectX 示范程序,它利用了 DirectDraw、DirectInput、DirectSound 三个部分的功能。有兴趣的话,可以把源代码给你参考一下。