游戏开发论坛

 找回密码
 立即注册
搜索
查看: 3493|回复: 5

求助:在DX9中如何实现窗口和全屏的切换

[复制链接]

37

主题

171

帖子

177

积分

注册会员

Rank: 2

积分
177
发表于 2005-8-14 22:04:00 | 显示全部楼层 |阅读模式
我正在学习DX9,我知道在建立设备的时候
Dim pp As New PresentParameters
            pp.Windowed = true
这样就是窗口模式
            pp.Windowed = false
这样就是全屏模式
可是在程序中如何想在窗口和全屏中切换 我该怎么办呢?
请教各位高手!

89

主题

822

帖子

847

积分

高级会员

Rank: 4

积分
847
发表于 2005-8-15 10:28:00 | 显示全部楼层

Re:求助:在DX9中如何实现窗口和全屏的切换

VB.NET把

IDirect3DDevice9::Reset Method

130

主题

2714

帖子

2714

积分

金牌会员

Rank: 6Rank: 6

积分
2714
发表于 2005-8-15 10:45:00 | 显示全部楼层

Re:求助:在DX9中如何实现窗口和全屏的切换

我只会DX7的

'声明:
Option Explicit
Dim objDX As New DirectX7
Dim objDD As DirectDraw7


'进入全屏:
'///////////////////////////DIRECTX 800 X 600 满屏显示//////////////////////
Set objDD = objDX.DirectDrawCreate("")
Call objDD.SetCooperativeLevel(Me.hWnd, DDSCL_FULLSCREEN Or DDSCL_ALLOWMODEX Or DDSCL_EXCLUSIVE)
objDD.SetDisplayMode 800, 600, 16, 0, DDSDM_DEFAULT


'退出全屏:
'Call objDD.RestoreDisplayMode '重置显示模式
'Call objDD.SetCooperativeLevel(Me.hWnd, DDSCL_NORMAL)   

37

主题

171

帖子

177

积分

注册会员

Rank: 2

积分
177
 楼主| 发表于 2005-8-15 17:03:00 | 显示全部楼层

Re: Re:求助:在DX9中如何实现窗口和全屏的切换

bigbook2000: Re:求助:在DX9中如何实现窗口和全屏的切换

VB.NET把

IDirect3DDevice9::Reset Method


多谢了,我试过了,的确可以改变窗口的模式,不过又出现了一个问题就是一但窗口改变,我的Render函数好像就不起作用了.
以下是编的窗口改变的小函数.不知道对不对.
Public Shared M_D3DDev As Microsoft.DirectX.Direct3D.Device '设备
     Public Shared Sub ChangeDX(Optional ByVal M_Window As Boolean = True, Optional ByVal M_Width As Integer = 800, Optional ByVal M_Height As Integer = 600, Optional ByVal M_Depth As Integer = 32)
            Dim pp As New PresentParameters
            pp.Windowed = M_Window
            pp.SwapEffect = SwapEffect.Discard
            'pp.EnableAutoDepthStencil = True
            'pp.AutoDepthStencilFormat = DepthFormat.D16   '16位位深   

            If M_Window = False Then
                If IsDisplayModeOK(M_Width, M_Height, M_Depth) = True Then
                    pp.BackBufferHeight = M_Height
                    pp.BackBufferWidth = M_Width
                    Select Case M_Depth
                        Case 16
                            pp.BackBufferFormat = Format.R5G6B5
                        Case 32
                            pp.BackBufferFormat = Format.X8R8G8B8
                    End Select
                Else
                    MessageBox.Show("显示模式初始化失败")
                End If
            End If
            M_D3DDev.Reset(pp)
        End Sub
      Public Shared Function IsDisplayModeOK(ByVal M_Width As Integer, ByVal M_Height As Integer, ByVal M_Depth As Integer) As Boolean
            Try
                Dim AdapterInfo As AdapterInformation
                Dim DispMode As DisplayMode
                Dim fmt As Format
                Dim D3DM As Manager
                Select Case M_Depth
                    Case 16
                        fmt = Format.R5G6B5
                    Case 32
                        fmt = Format.X8R8G8B8
                End Select
                For Each AdapterInfo In D3DM.Adapters
                    For Each DispMode In AdapterInfo.SupportedDisplayModes(fmt)
                        If DispMode.Width = M_Width And DispMode.Height = M_Height Then Return True
                    Next
                Next
            Catch ex As Exception
                Return False
            End Try
            Return False
        End Function

32

主题

1583

帖子

1589

积分

金牌会员

Rank: 6Rank: 6

积分
1589
发表于 2005-8-15 19:23:00 | 显示全部楼层

Re: Re:求助:在DX9中如何实现窗口和全屏的切换

游戏之家: Re:求助:在DX9中如何实现窗口和全屏的切换

我只会DX7的

'声明:
Option Explicit
Dim objDX As New DirectX7
Dim objDD As DirectDraw7


'进...


光重新设定协作层是不够的,需要改变主表面,因为窗口模式的需要Clipper。

130

主题

2714

帖子

2714

积分

金牌会员

Rank: 6Rank: 6

积分
2714
发表于 2005-8-15 23:15:00 | 显示全部楼层

Re: Re: Re:求助:在DX9中如何实现窗口和全屏的切换

sandy_zc_1: Re: Re:求助:在DX9中如何实现窗口和全屏的切换



光重新设定协作层是不够的,需要改变主表面,因为窗口模式的需要Clipper。


我在这个模式下用BITBLT,就这么简单。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2025-12-27 10:22

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表