1,486
社区成员
发帖
与我相关
我的任务
分享
Option Explicit
Private Sub Command1_Click()
Dim lngSDC As Long
Dim picRect As RECT
' DDSFront.BltToDC Picture1.hDC, picRect, picRect
With Picture1
'获得与主显示平面兼容的图形设备句柄
lngSDC = DDSFront.GetDC '获取桌面句柄
' lngSDC = DDSBack.GetDC
' lngSDC = Me.hDC '带入指定窗口的句柄,可以获取窗口内的图形
' lngSDC = GetDC(0)
'保存图像
Set .Picture = SaveTohBmp(lngSDC, 0, 0, 1024, 768)
'释放图形句柄
DDSFront.ReleaseDC lngSDC
' DDSBack.ReleaseDC lngSDC
SavePicture Picture1, "c:\a.bmp"
End With
End Sub
Private Sub Form_Load()
'建立DirectDraw对象
Set DDraw = DX.DirectDrawCreate("")
'设定DirectDraw对象的协作层
DDraw.SetCooperativeLevel Me.hwnd, DDSCL_EXCLUSIVE Or DDSCL_FULLSCREEN ' DDSCL_NORMAL
'设定显示模式位1024×768×32位颜色 此处最好设置为你的电脑的分辨率和颜色位数,不然程序将更改你的设置
DDraw.SetDisplayMode 1024, 768, 32, 0, DDSDM_DEFAULT
'设定DDSFrontDesc为主平面
With DDSFrontDesc
.lFlags = DDSD_CAPS
.ddsCaps.lCaps = DDSCAPS_PRIMARYSURFACE 'Or DDSCAPS_SYSTEMMEMORY
End With
'设定DDSBackDesc为后台缓冲平面
With DDSBackDesc
.ddsCaps.lCaps = DDSCAPS_SYSTEMMEMORY
.lFlags = DDSD_CAPS Or DDSD_WIDTH Or DDSD_HEIGHT
.lWidth = 1920
.lHeight = 1080
End With
'建立平面
Set DDSFront = DDraw.CreateSurface(DDSFrontDesc)
Set DDSBack = DDraw.CreateSurface(DDSBackDesc)
Set Clipper = DDraw.CreateClipper(0)
Clipper.SetHWnd Me.hwnd
DDSFront.SetClipper Clipper
DDSBack.SetClipper Clipper
DDSBack.SetForeColor RGB(255, 255, 255)
End Sub
Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)
'恢复原来的显示模式并且释放所有的DirectDraw有关对象
DDraw.RestoreDisplayMode
DDraw.SetCooperativeLevel Me.hwnd, DDSCL_NORMAL
DoEvents
Set Clipper = Nothing
Set DDSBack = Nothing
Set DDSFront = Nothing
Set DDraw = Nothing
Set DX = Nothing
End Sub
Private Sub Timer1_Timer()
Call Command1_Click
' End
End Sub