我已经开始直接研究基于XLib的GUI应用程序编程,我试图在屏幕上创建一个居中的窗口。我不知道用于实现此目的的常用技术。我的代码(不起作用)是这个(我使用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,但窗口的位置不会改变。所以,我的问题是窗口的位置无论如何都无法改变。
答案 0 :(得分:3)
XMoveWindow
电话之后使用XMapWindow
。答案 1 :(得分:1)
在您创建窗口的函数中,您应该在屏幕中计算窗口的起始x,y坐标:
XDisplayWidth(dpy, sreen); XDisplayHeight(dpy, sreen);
之后你应该进行计算(比如...... / 2 + win.size.x ....)以使你的窗口居中。