Я пытаюсь использовать чисто 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 (строки 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, кажется, что размер все еще зависит от полосы заголовка и границы, но я просто не знаю, как это остановить. Я попробовал кучу стилей окон и расширенных стилей окон , но безуспешно.
Просто чтобы быть уверенным, что я могу получить все так, как я хотел, я создал простой JFrame:
JFrame frame = new JFrame("Title");
frame.setUndecorated(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(50, 50);
frame.setVisible(true);
Используя Microsoft Spy ++, я перекрестно ссылался на стили окон, чтобы убедиться, что они совпадают, и даже с одинаковыми стилями, я просто не мог изменить его на нужный мне размер. Так что я предполагаю, что это не связано со стилями окон, но я не знаю, куда идти дальше. У кого-нибудь есть информация по этому поводу?
Заранее спасибо.