首页 文章

Windows到DirectX鼠标坐标

提问于
浏览
0

我正在使用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一样 .

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

提前致谢

2 回答

  • 1

    就是这样 . 非常感谢这段代码,它非常有用 . 比我的解决方案更好 . 无论如何,我的测试向我展示了p的打印值

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

    对于某些映射,坐标甚至在窗口的边界之外 . 因此我不认为只考虑窗口的边框和 Headers . 它可能是与之相关的东西吗?

    AdjustWindowRect(&r,style,false); ?
    

    最后一个问题 . 你知道 Headers 和边框的偏移量(6,28)是否总是相同的吗?如果没有,您是否知道要求这些值的通用方法?

    再次,非常感谢你的帮助 . 对此,我真的非常感激 .

  • 0

    我不太清楚你的问题 . 但是如果你的问题是从directX切换到窗口,那是因为窗口有 Headers 和边框的空间 . 因此,将窗口设置为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个进入窗口大小,一切都会好的!我的应用程序在窗口模式和全屏模式下工作正常,支持多种分辨率!

相关问题