应用setWindowLong和setWindowPos函数后,窗口的局部坐标发生了变化。

时间:2014-07-30 13:19:51

标签: c# unity3d jna user32 kernel32

我正在尝试从unity3d中制作的游戏应用程序中删除边框和标题栏。

这样做我正在做以下操作

private HWND removeWindowBorders(HWND hWnd) {
    try {
        long lStyle = GetWindowLongW(hWnd.getPointer(), GWL_STYLE);
        long WS_CAPTION = 0x00C00000L;
        long WS_THICKFRAME = 0x00040000L;
        long WS_SYSMENU = 0x00080000L;
        lStyle &= ~(WS_CAPTION | WS_THICKFRAME | WS_MINIMIZE | WS_MAXIMIZE | WS_SYSMENU);
        SetWindowLongW(hWnd,GWL_STYLE,lStyle);

        long lExStyle = GetWindowLongW(hWnd.getPointer(), GWL_EXSTYLE);
        long WS_EX_DLGMODALFRAME = 0x00000001L;
        long WS_EX_CLIENTEDGE = 0x00000200L;
        long WS_EX_STATICEDGE = 0x00020000L;
        lExStyle &= ~(WS_EX_DLGMODALFRAME | WS_EX_CLIENTEDGE | WS_EX_STATICEDGE);
        SetWindowLongW(hWnd,GWL_EXSTYLE,lExStyle);
    }
    catch (LastErrorException e) {
        System.out.println("HELLO WORLD");
    }
    return hWnd;
}

unityHandle = removeWinBorders(unityHandle); // unityHandle is HWND of unity app.
SetWindowPosF(unityHandle,null,100,50,0,0,0x0020 | 0x0001 | 0x0008);

现在,执行此操作后,Unity应用程序窗口的边框和标题栏已成功删除,但起始像素的坐标已更改。换句话说,它就像是:

  • 当Unity应用程序边框和标题栏完好无损时,(0,0,0)位置位于游戏的左下角,
  • 现在删除边框和标题栏后,(0,0,0)位置向上移动到等于标题栏宽度的像素数(我想是这样,大约20-30像素)。我不明白为什么会这样。我在unity3d游戏中放了一些鼠标控件,在删除边框后无效。我知道我可以将unityGame放在全屏模式下,我想让它只在没有标题栏和边框的情况下加窗。

任何帮助都会很明显。 谢谢。

0 个答案:

没有答案