Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Visual c++ Direct3D窗口->;Bounds.Width/Height与实际分辨率不同_Visual C++_Directx 11 - Fatal编程技术网

Visual c++ Direct3D窗口->;Bounds.Width/Height与实际分辨率不同

Visual c++ Direct3D窗口->;Bounds.Width/Height与实际分辨率不同,visual-c++,directx-11,Visual C++,Directx 11,我注意到在执行操作时Direct3D有一种奇怪的行为 我从窗口对象获得的尺寸与配置的窗口分辨率不同。在那里我设置了1920*1080,从Winows对象的宽度和高度是1371*771 CoreWindow^ Window = CoreWindow::GetForCurrentThread(); // set the viewport D3D11_VIEWPORT viewport = { 0 }; viewport.TopLeftX = 0; viewport.TopLeftY = 0; vi

我注意到在执行操作时Direct3D有一种奇怪的行为

我从窗口对象获得的尺寸与配置的窗口分辨率不同。在那里我设置了1920*1080,从Winows对象的宽度和高度是1371*771

CoreWindow^ Window = CoreWindow::GetForCurrentThread();
// set the viewport
D3D11_VIEWPORT viewport = { 0 };

viewport.TopLeftX = 0;
viewport.TopLeftY = 0;
viewport.Width = Window->Bounds.Width; //should be 1920, actually is 1371
viewport.Height = Window->Bounds.Height;  //should be 1080, actually is 771

我正在Alienware 14上开发,可能这导致了这个问题,但我找不到任何答案。

核心窗口大小、指针位置等都不是以像素表示的。它们以设备独立像素(DIP)表示。要转换为/转换为像素,需要使用每英寸点数(DPI)值

m_DPI
来自
DisplayInformation::GetForCurrentView()->LogicalDpi
,如果它发生更改,您将获得
DpiChanged
事件

有关更多详细信息,请参阅


您应该查看上的Direct3D UWP游戏模板,并查看如何在
Main.cpp

中处理此问题。感谢您提供有关dpi的信息!我还没有被这件事绊倒。顺便说一句:你的回购协议中的代码似乎对我很有帮助,编码风格与我现在学到的非常相似。所以,也谢谢你:)
inline int ConvertDipsToPixels(float dips) const
{
    return int(dips * m_DPI / 96.f + 0.5f);
}

inline float ConvertPixelsToDips(int pixels) const
{
    return (float(pixels) * 96.f / m_DPI);
}