鱼C论坛

 找回密码
 立即注册
查看: 99|回复: 2

[已解决]求助:DirectX 9 如何设置显示模式

[复制链接]
发表于 2024-11-6 09:49:44 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
想把显示器设置成800×600模式,或者设置成(1024×768 1920×1080)模式。

DirectX 9 (June 2010版SDK)      VS  C++

需要哪些代码?
最佳答案
2024-11-6 10:21:01
在 DirectX 9 中设置显示模式需要使用 `IDirect3DDevice9` 接口。你需要提供一个 `D3DPRESENT_PARAMETERS` 结构来设置显示模式,然后创建或重置设备。以下是一个简单的示例代码用来显示如何设置显示模式:
#include <d3d9.h>

#pragma comment (lib, "d3d9.lib")

int main() {
    // 初始化 Direct3D
    IDirect3D9* d3d = Direct3DCreate9(D3D_SDK_VERSION);
    if (d3d == nullptr) {
        return -1;  // 初始化失败
    }

    // 设置显示模式参数
    D3DPRESENT_PARAMETERS d3dpp = {};
    d3dpp.Windowed = FALSE;  // 全屏模式
    d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD;
    d3dpp.hDeviceWindow = GetForegroundWindow();  // 窗口句柄
    d3dpp.BackBufferFormat = D3DFMT_X8R8G8B8;  // 背景缓冲区格式
    d3dpp.BackBufferWidth = 800;  // 设置宽度,例如800
    d3dpp.BackBufferHeight = 600;  // 设置高度,例如600
    d3dpp.BackBufferCount = 1;  // 缓冲区数量

    // 创建 Direct3D 设备
    IDirect3DDevice9* d3dDevice = nullptr;
    HRESULT result = d3d->CreateDevice(
        D3DADAPTER_DEFAULT,
        D3DDEVTYPE_HAL,
        d3dpp.hDeviceWindow,
        D3DCREATE_SOFTWARE_VERTEXPROCESSING,
        &d3dpp,
        &d3dDevice
    );

    if (FAILED(result)) {
        d3d->Release();
        return -1;  // 设备创建失败
    }

    // 可以在这里添加渲染循环,或者修改显示模式...

    // 释放资源
    d3dDevice->Release();
    d3d->Release();

    return 0;
}

### 说明:
- 使用 `Direct3DCreate9` 初始化 DirectX 9。
- `D3DPRESENT_PARAMETERS` 用来设置显示模式的参数。
- `Windowed` 设置为 `FALSE` 表示全屏模式,`TRUE` 则为窗口模式。
- `BackBufferWidth` 和 `BackBufferHeight` 用来设定显示分辨率。
- 创建设备后,你可以进入渲染循环进行绘制。

修改 `BackBufferWidth` 和 `BackBufferHeight` 的值为你的目标分辨率(例如1024×768或1920×1080),记得根据需要调整其他参数以适应你的应用环境。根据需求,也可以通过调用 `Reset` 方法来切换显示模式。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2024-11-6 10:21:01 | 显示全部楼层    本楼为最佳答案   
在 DirectX 9 中设置显示模式需要使用 `IDirect3DDevice9` 接口。你需要提供一个 `D3DPRESENT_PARAMETERS` 结构来设置显示模式,然后创建或重置设备。以下是一个简单的示例代码用来显示如何设置显示模式:
#include <d3d9.h>

#pragma comment (lib, "d3d9.lib")

int main() {
    // 初始化 Direct3D
    IDirect3D9* d3d = Direct3DCreate9(D3D_SDK_VERSION);
    if (d3d == nullptr) {
        return -1;  // 初始化失败
    }

    // 设置显示模式参数
    D3DPRESENT_PARAMETERS d3dpp = {};
    d3dpp.Windowed = FALSE;  // 全屏模式
    d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD;
    d3dpp.hDeviceWindow = GetForegroundWindow();  // 窗口句柄
    d3dpp.BackBufferFormat = D3DFMT_X8R8G8B8;  // 背景缓冲区格式
    d3dpp.BackBufferWidth = 800;  // 设置宽度,例如800
    d3dpp.BackBufferHeight = 600;  // 设置高度,例如600
    d3dpp.BackBufferCount = 1;  // 缓冲区数量

    // 创建 Direct3D 设备
    IDirect3DDevice9* d3dDevice = nullptr;
    HRESULT result = d3d->CreateDevice(
        D3DADAPTER_DEFAULT,
        D3DDEVTYPE_HAL,
        d3dpp.hDeviceWindow,
        D3DCREATE_SOFTWARE_VERTEXPROCESSING,
        &d3dpp,
        &d3dDevice
    );

    if (FAILED(result)) {
        d3d->Release();
        return -1;  // 设备创建失败
    }

    // 可以在这里添加渲染循环,或者修改显示模式...

    // 释放资源
    d3dDevice->Release();
    d3d->Release();

    return 0;
}

### 说明:
- 使用 `Direct3DCreate9` 初始化 DirectX 9。
- `D3DPRESENT_PARAMETERS` 用来设置显示模式的参数。
- `Windowed` 设置为 `FALSE` 表示全屏模式,`TRUE` 则为窗口模式。
- `BackBufferWidth` 和 `BackBufferHeight` 用来设定显示分辨率。
- 创建设备后,你可以进入渲染循环进行绘制。

修改 `BackBufferWidth` 和 `BackBufferHeight` 的值为你的目标分辨率(例如1024×768或1920×1080),记得根据需要调整其他参数以适应你的应用环境。根据需求,也可以通过调用 `Reset` 方法来切换显示模式。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-11-6 10:23:10 | 显示全部楼层
要使用 DirectX 9 在 C++ 中设置显示模式,您需要通过 Direct3D 接口来调整设备(Device)的显示参数。以下是一个基本的代码示例,演示如何设置显示模式为 800×600:

1. 初始化 Direct3D 对象。
2. 创建并设置 D3DPRESENT_PARAMETERS 结构。
3. 创建 Direct3D 设备。
4. 使用设备设置显示模式。

以下是实现这些步骤的代码示例:
#include <d3d9.h>

#pragma comment (lib, "d3d9.lib")

int main()
{
    // 创建 Direct3D 对象
    IDirect3D9* pD3D = Direct3DCreate9(D3D_SDK_VERSION);
    if (!pD3D) {
        return 1; // 检查创建是否成功
    }

    // 准备设备参数
    D3DPRESENT_PARAMETERS d3dpp;
    ZeroMemory(&d3dpp, sizeof(d3dpp));
    d3dpp.Windowed = FALSE; // 设置为全屏模式
    d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD; // 后台缓冲区的使用方式
    d3dpp.hDeviceWindow = GetForegroundWindow(); // 应用程序窗口句柄
    d3dpp.BackBufferFormat = D3DFMT_X8R8G8B8; // 背景缓冲区格式
    d3dpp.BackBufferWidth = 800; // 设置宽度为800
    d3dpp.BackBufferHeight = 600; // 设置高度为600

    // 创建设备
    IDirect3DDevice9* pDevice = nullptr;
    HRESULT hr = pD3D->CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, d3dpp.hDeviceWindow,
        D3DCREATE_SOFTWARE_VERTEXPROCESSING, &d3dpp, &pDevice);
    if (FAILED(hr)) {
        pD3D->Release();
        return 1; // 检查设备创建是否成功
    }

    // 这里可以设置进一步的渲染逻辑或进入消息循环

    // 清理
    if (pDevice) pDevice->Release();
    if (pD3D) pD3D->Release();

    return 0;
}

注意事项:
- `d3dpp.Windowed` 被设置为 `FALSE` 以启用全屏模式。要在窗口模式下使用这个分辨率,改为 `TRUE`。
- 确保窗口句柄有效并且在前台。
- 检查设备和分辨率支持情况,以免出现不兼容的问题。

更改其他分辨率(如 1024×768 或 1920×1080)只需修改 `d3dpp.BackBufferWidth` 和 `d3dpp.BackBufferHeight` 的值即可。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-4 01:59

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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