2013-11-24 62 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)對於標題和邊界是否總是相同?如果不是,你知道一個通​​用的方法來要求這些值嗎?

再次,非常感謝您的幫助。對此,我真的非常感激。