【发布时间】:2020-04-11 11:06:14
【问题描述】:
我使用 DirectX9 构建了一个非常简单的 C++ 程序,可以在屏幕上显示图像和文本。我已经将它编译为 1024 x 768,我想确保它在任何屏幕分辨率上都兼容。当尝试在 1920 x 1080 显示器上运行我的可执行文件时,程序会自动水平拉伸(因为此显示器是宽屏)并扭曲图像和文本。有人告诉我,在初始化 DirectX 时我可以更改一个标志,这将防止任何拉伸,并确保程序打开时两侧都有垂直黑条,以保留所有我想要的格式。有人知道怎么做这个吗?这是我初始化 DirectX 的代码的摘录。 PS:我将刷新率设置为 0,这样我的程序就可以在任何显示器的原生刷新率上运行。 谢谢!
/*-----------------------------------------------------------------------------
Name: InitD3D()
Desc: Creates the D3D object using Direct3D
-------------------------------------------------------------------------------*/
HRESULT InitD3D(HWND hWnd) {
if (NULL == (pD3D = Direct3DCreate9(D3D_SDK_VERSION)))
return E_FAIL;
D3DPRESENT_PARAMETERS d3dpp;
ZeroMemory(&d3dpp, sizeof(d3dpp));
d3dpp.Windowed = FALSE;
d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD;
d3dpp.BackBufferFormat = D3DFMT_A8R8G8B8;
d3dpp.BackBufferCount = 1;
d3dpp.BackBufferWidth = 1024;
d3dpp.BackBufferHeight = 768;
d3dpp.FullScreen_RefreshRateInHz = 0;
if (FAILED(pD3D->CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, hWnd,
D3DCREATE_SOFTWARE_VERTEXPROCESSING,
&d3dpp, &pd3dDevice)))
return E_FAIL;
return S_OK;
}
【问题讨论】:
-
无关:你为什么要在这个时候学习directx9?如果您的目标是构建游戏,那么您不应该真正关心学习图形 API,除非您对 GPU 的大量优化感兴趣,也许学习 Unity 或 Unreal Engine 来构建游戏。但是,了解和了解幕后工作原理是个好主意,如果是这样,我建议您选择 Directx 11.2,因为 Directx9 是旧版。
标签: c++ winapi visual-studio-2017 directx screen-resolution