DirectX 当前参数 Windowed=false 不工作

DirectX Present Parameters Windowed=false not working

我正在尝试制作游戏。我正在使用 directx 9 这样做,但在尝试进入全屏模式时遇到了一些问题。我做了一个初始化所有当前参数的函数。一切都很好,除非我使 windowed = false (即我将全屏设置为 true)。

这是我现在的参数变量:D3DPRESENT_PARAMETERS d3dpp;

这里是 d3dpp 变量的代码。大多数(如果不是全部)代码都来自 charles kelley 的一本名为 Programming 2d Games 的书。

void Graphics::initD3Dpp()
{
try {
    ZeroMemory(&d3dpp, sizeof(d3dpp));              

    d3dpp.BackBufferWidth = width;
    d3dpp.BackBufferHeight = height;
    if (fullscreen)                                  
        d3dpp.BackBufferFormat = D3DFMT_X8R8G8B8;  
    else
        d3dpp.BackBufferFormat = D3DFMT_UNKNOWN;   
    d3dpp.BackBufferCount = 1;
    d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD;
    d3dpp.hDeviceWindow = mainhwnd;
    d3dpp.Windowed = (!fullscreen); //THIS LINE RIGHT HERE IS THE ISSUE
    d3dpp.PresentationInterval = D3DPRESENT_INTERVAL_IMMEDIATE;
}
catch (...)
{
    throw(GameError(gameErrorNS::FATAL_ERROR,
        "Error initializing D3D presentation parameters"));

}

} 

我不明白为什么 .windowed 对我不起作用。请询问我是否需要更多上下文。

根据评论,您建议您使用的是 600x480。非常怀疑这是您的系统支持的分辨率,更有可能的是,您打算使用 640x480。据我所知,基本上每个 D3D9 驱动程序都支持此分辨率。

但是,对分辨率进行硬编码并不是一个稳健的解决方案,遵循 documentation for D3DPRESENT_PARAMETERS, and use the EnumAdapterModes 函数中所述的建议获取设备的有效分辨率和显示格式列表更为实用。