使用CreateWindowEx创建绝对大小的无边界窗口

时间:2019-03-09 04:45:40

标签: java winapi window jna

我正在尝试使用纯JNA创建无边界窗口并控制其大小。我可以使用以下方法创建窗口:

String windowClass = new String("NewWindowClass");
HMODULE hInst = Kernel32.INSTANCE.GetModuleHandle("");

WNDCLASSEX wClass = new WNDCLASSEX();
wClass.hInstance = hInst;
wClass.lpfnWndProc = Main.this;
wClass.lpszClassName = windowClass;
User32.INSTANCE.RegisterClassEx(wClass);

HWND hWnd = User32.INSTANCE.CreateWindowEx(User32.WS_EX_TOPMOST, windowClass, "This is the window title", 0, 0, 0, 50, 50, null, null, hInst, null);
User32.INSTANCE.ShowWindow(hWnd, 1);

50, 50是窗口的宽度和高度。这来自某些JNA demo code(第54-74行)。我可以通过在其后添加以下代码来删除边框:

long style = User32.INSTANCE.GetWindowLong(hWnd, User32.GWL_STYLE);
style &= (~User32.WS_CAPTION);
User32.INSTANCE.SetWindowLong(hWnd, User32.GWL_STYLE, (int) style);

因此,现在您可以看到有一个未装饰的窗口,但是与预期的50x50尺寸不同,该尺寸似乎仍受字幕栏和边框的影响,但我只是不知道如何停止它。我尝试了一堆windows stylesextended window styles时没有运气。 为了确保我能以自己想要的方式获得它,我创建了一个简单的JFrame:

    JFrame frame = new JFrame("Title");
    frame.setUndecorated(true);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setSize(50, 50);
    frame.setVisible(true);

使用Microsoft Spy ++,我交叉引用了窗口样式以确保它们匹配,即使使用相同的样式,我也无法将其更改为所需的大小。因此,我猜想这与窗口样式无关,但我不知道从这里去哪里。有人对此有任何信息吗?

谢谢。

0 个答案:

没有答案