Я начал изучать программирование приложений GUI непосредственно на основе XLib и пытаюсь создать центрированное окно на экране. Я не знаю обычной техники, используемой для достижения этой цели. Мой код (который не работает) это (я использую CodeBlocks)
#include <stdio.h>
#include <stdlib.h>
#include <X11/Xlib.h>
#include <X11/Xutil.h>
#include <X11/Xos.h>
#include <X11/Xatom.h>
#include <X11/keysym.h>
#include <GL/glew.h>
#include <GL/freeglut.h>
int screen;
Display *display;
XSetWindowAttributes window_attributes;
Window mainwindow;
XEvent events;
int main(int argc, char** argv) {
display = XOpenDisplay(NULL);screen = DefaultScreen(display);
window_attributes.background_pixel = XWhitePixel(display, screen);
window_attributes.border_pixel = XBlackPixel(display, screen);
window_attributes.win_gravity = SouthWestGravity;
mainwindow = XCreateWindow(display,
RootWindow(display, screen),
1, 1,
600, 400,
0,
CopyFromParent,
InputOutput,
CopyFromParent,
CWBackPixel|CWBorderPixel,
&window_attributes
);
XMapWindow(display, mainwindow);
XFlush(display);
XSelectInput(display, mainwindow, ExposureMask|KeyPressMask|ButtonPressMask);
while (1) {
XNextEvent(display, &events);
switch (events.type) {
case Expose:
// Lots of code that doesn't matter for my problem
break;
}
}
return 0;
}
Итак, я думал, что window_attributes.win_gravity
сделал бы уловку, но кажется, что я делаю что-то не так, или это должно быть связано с ОС.
Спасибо за вашу помощь!
ОБНОВИТЬ
Я изменил X (левая позиция) на 100 и y (верхняя позиция) на 100, но позиция окна не меняется. Итак, моя проблема в том, что положение окна не может быть изменено, независимо от того, что это.
XMoveWindow
после XMapWindow
вызов.В вашей функции, где вы создаете окно, вы должны вычислить начальные координаты x, y вашего окна на экране:
XDisplayWidth(dpy, sreen); XDisplayHeight(dpy, sreen);
После этого вы должны сделать свой расчет (например … / 2 + win.size.x ….), чтобы центрировать ваше окно.