proof 发表于 2024-11-6 09:49:44

求助:DirectX 9 如何设置显示模式

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

DirectX 9 (June 2010版SDK)      VSC++

需要哪些代码?

FishC 发表于 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 小助理,如未能正确解答您的问题,请继续追问。

FishC 发表于 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 小助理,如未能正确解答您的问题,请继续追问。
页: [1]
查看完整版本: 求助:DirectX 9 如何设置显示模式