Использование CreateWindowEx для создания окна без полей абсолютного размера - PullRequest
0 голосов
/ 09 марта 2019

Я пытаюсь использовать чисто 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 ++, я перекрестно ссылался на стили окон, чтобы убедиться, что они совпадают, и даже с одинаковыми стилями, я просто не мог изменить его на нужный мне размер. Так что я предполагаю, что это не связано со стилями окон, но я не знаю, куда идти дальше. У кого-нибудь есть информация по этому поводу?

Заранее спасибо.

...