2013-11-24 61 views
0

我正在使用Windows和DirectX制作游戏。我给自己定的窗口和设备1024×768两者Windows到DirectX鼠标坐标

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一样。

我该如何将1024x768的DirectX转换为1024x768的Windows?

在此先感谢

+0

...或从Windows到DirectX。如果不使用适当的值配置DirectX设备,我至少需要适当的公式来进行转换 – user1625678

回答

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

0

就是这样。非常感谢这段代码,它非常好用。比我的更好的解决方案。无论如何,我的测试表明我的p是打印值从

GetCursorPos(&p); 
ScreenToClient(g_hWnd, &p); 

一些映射坐标甚至窗外的边界。因此,我不认为只考虑窗口的边框和标题。这可能与

有关
AdjustWindowRect(&r,style,false); ? 

最后一个问题。你知道偏移(+ 6,+ 28)对于标题和边界是否总是相同?如果不是,你知道一个通​​用的方法来要求这些值吗?

再次,非常感谢您的帮助。对此,我真的非常感激。