我正在尝试使用纯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 styles和extended 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 ++,我交叉引用了窗口样式以确保它们匹配,即使使用相同的样式,我也无法将其更改为所需的大小。因此,我猜想这与窗口样式无关,但我不知道从这里去哪里。有人对此有任何信息吗?
谢谢。