Windows到DirectX鼠标坐标

时间:2013-11-24 13:57:05

标签: windows directx

我正在使用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?

提前致谢

2 个答案:

答案 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。进入窗口大小,一切都会好的! 我的应用程序在窗口模式和全屏模式下工作正常,支持多种分辨率!