我正在使用Windows和DirectX制作游戏。我已将窗口和设备设置为1024x768两者
Windows:
RECT r={0,0,1024,768};
int style = WS_OVERLAPPED | WS_MINIMIZEBOX | WS_SYSMENU;
AdjustWindowRect(&r,style,false);
CreateWindow...
DirectX:
d3dpp.BackBufferWidth=1024;
d3dpp.BackBufferHeight=768;
CreateDevice...
然而,当我使用
读取鼠标位置时GetCursorPos(&p);
ScreenToClient(g_hWnd, &p);
某些返回的坐标位于1024x768边框之外。我不得不说如果我使用(0,0,1024,768)坐标限制渲染一个精灵,DirectX会将它显示为使用1024x768。
如何将DirectX的1024x768转换为Windows的1024x768?
提前致谢
答案 0 :(得分:1)
就是这样。非常感谢这段代码,它非常有用。比我的解决方案更好。无论如何,我的测试向我展示了打印p的值
GetCursorPos(&p);
ScreenToClient(g_hWnd, &p);
对于某些映射,坐标甚至在窗口的边界之外。因此我不认为只考虑窗口的边框和标题。是否可能与
有关AdjustWindowRect(&r,style,false); ?
最后一个问题。你知道标题和边框的偏移量(+ 6,+ 28)是否总是相同的?如果没有,您是否知道要求这些值的通用方法?
再次,非常感谢你的帮助。我真的很感激。
答案 1 :(得分:0)
我对你的问题不是很清楚。但是如果你的问题是从directX切换到窗口,那是因为窗口有标题和边框的空间。因此,将窗口设置为800x600(如果您的视频大小为800x600)将不起作用!
windowHwnd = CreateWindow(windowClass.lpszClassName, L"love", MY_WINDOW_STYLE , preWindowPosX,preWindowPosY,
Video.Width+6, Video.Height+28, GetDesktopWindow(), NULL, windowClass.hInstance, NULL);
d3dpp.BackBufferWidth=Video.Width;
d3dpp.BackBufferHeight=Video.Height;
相反,你有+ 6和+28。进入窗口大小,一切都会好的! 我的应用程序在窗口模式和全屏模式下工作正常,支持多种分辨率!