VB6编程:DirectX 2D图形学习日志2窗口化

第2个DirectX8应用程序:DirectX8的全屏 源码(按ESC退出全屏)
打开VB6,启用一个标准程序,窗口的名称改为:frmMain,引用一下DX8的控件(dx8vb.dll)
下边是源码:(CSDN编辑器里似乎没有VB6的代码块选择,因此用的.NET的代码块选择,但源码是VB6的,请注意!)
教程下载地址:https://download.csdn.net/download/gosub60/13696651

Option Explicit

'一些颜色深度常数有助于使DX常数更具可读性。
'以下是我的添加:↓↓↓↓↓↓↓↓↓↓↓↓↓↓
'颜色深度概念:颜色深度是指每个像素可以显示的颜色数,一般是用“位-Bit”为单位来描述的。
'举例说明:

'     (1)如果一个图片支持256种颜色(如GIF格式),那么就需要256=2^8 个不同的值来表示不同的颜色。也就是从0到255,用二进制表示就是从00000000到11111111,总共需要8位二进制数,所以颜色深度是8 Bit。
'
'     (2)如果是BMP格式,则最多可以支持红、绿、蓝各256种,不同的红绿蓝组合可以构成256的3次方种颜色,就需要3个8位的2进制数,总共24位,所以颜色深度是24 Bit。
'
'     (3)还有PNG格式,这种格式除了支持24位的颜色外,还支持alpha通道(就是控制透明度用的),总共是32位,所以颜色深度是32 Bit。颜色深度越大,图片占的空间越大。
'以上是我的添加↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑
Private Const COLOR_DEPTH_16_BIT As Long = D3DFMT_R5G6B5
Private Const COLOR_DEPTH_24_BIT As Long = D3DFMT_A8R8G8B8
Private Const COLOR_DEPTH_32_BIT As Long = D3DFMT_X8R8G8B8

Private DirectX8 As DirectX8 '主DirectX对象。
Private Direct3D As Direct3D8 '控制3D一切。
Private Direct3D_Device As Direct3DDevice8 '表示硬件渲染。

Private Running As Boolean '帮助确定主游戏循环是否正在运行。

Private Sub Form_Activate()

    Dim Display_Mode As D3DDISPLAYMODE '显示模式说明。
    Dim Direct3D_Window As D3DPRESENT_PARAMETERS 'Backbuffer和视口说明。

    frmMain.Caption = "DirectX教程:第二个全屏显示"
    
    Set DirectX8 = New DirectX8 '创建DirectX对象。
    Set Direct3D = DirectX8.Direct3DCreate() '使用DirectX对象创建Direct3D对象。
    
'    “现在我们正在全屏模式下工作,我们必须设置
     '屏幕分辨率切换为,而不是使用默认屏幕
     '解析度。
    
    Display_Mode.Width = 1024
    Display_Mode.Height = 768
    Display_Mode.Format = COLOR_DEPTH_32_BIT

    Direct3D_Window.Windowed = False '该应用程序将处于全屏模式。
    Direct3D_Window.SwapEffect = D3DSWAPEFFECT_COPY_VSYNC '监视器运行时刷新。
    Direct3D_Window.BackBufferCount = 1 '仅1个后缓冲
    Direct3D_Window.BackBufferFormat = Display_Mode.Format '设置检索到后缓冲区中的格式。
    Direct3D_Window.BackBufferWidth = Display_Mode.Width '使后缓冲宽度与显示宽度匹配
    Direct3D_Window.BackBufferHeight = Display_Mode.Height '使后缓冲高度与显示高度匹配
    Direct3D_Window.hDeviceWindow = frmMain.hWnd '使用frmMain作为设备窗口。
    
    '使用一些有用的信息以及信息创建渲染设备
     '我们已经设置了Direct3D_Window。
    Set Direct3D_Device = Direct3D.CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, frmMain.hWnd, D3DCREATE_SOFTWARE_VERTEXPROCESSING, Direct3D_Window)

    Running = True '全部初始化。 现在可以激活游戏循环了。

    Do While Running = True
        
        DoEvents '允许事件发生,以便程序不会锁定。
        
        '------------------------------------------------- ---
         'DirectX会自动为您处理帧速率
         '这使其运行(最多)与监视器一样快
'         刷新率高,因此您无需在其中添加额外的代码
'         降低循环速度并以一定数量的帧运行
         '每秒。
         '------------------------------------------------- ---
        
        '清除后缓冲区。
        Direct3D_Device.Clear 0, ByVal 0, D3DCLEAR_TARGET, D3DColorRGBA(0, 0, 0, 0), 1#, 0
        
'            渲染代码在这里,但是在本教程中,它现在是空的。
        
         '将后缓冲区翻转到窗体窗口中。
        Direct3D_Device.Present ByVal 0, ByVal 0, 0, ByVal 0
        
    Loop

End Sub

Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)

    If KeyCode = vbKeyEscape Then '如果用户按Esc键...
    
        Running = False '帮助程序退出游戏循环。
        
        '卸载所有DirectX对象
        
        Set Direct3D_Device = Nothing
        Set Direct3D = Nothing
        Set DirectX8 = Nothing
        
        Unload Me '卸载窗口
        
        End '结束程序
        
        '尽管上方的Unload语句退出了程序,但是您
         '这样做后将导致自动化错误?
         'END 命令 将有助于防止这种情况,并彻底结束该应用程序。
    
    End If

End Sub

Private Sub Form_Unload(Cancel As Integer)

    Running = False '帮助程序退出游戏循环。
    
    '卸载所有DirectX对象
    
    Set Direct3D_Device = Nothing
    Set Direct3D = Nothing
    Set DirectX8 = Nothing
    
    Unload Me '卸载窗口
    
    End '结束程序
    
   '尽管上方的Unload语句退出了程序,但是您
     '这样做后将导致自动化错误?
     'END 命令 将有助于防止这种情况,并彻底结束该应用程序。

End Sub

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值