1
我很困擾我做錯了什麼,我試圖複製示例代碼,我試過改變顏色。這裏是我的代碼:Xlib不會畫任何
//Headers
#include <stdio.h>
#include <stdlib.h>
#include <X11/Xlib.h>
#include <X11/Xatom.h>
int main(int argc, char *argv[])
{
//Vars to create a window
Display *dis;
int screen;
Window win;
XEvent event;
//Graphics content
XGCValues values;
unsigned long valuemask = 0;
GC gc;
//To store mouse location
int mouseX[2], mouseY[2];
//Stores screen dimensions
XWindowAttributes xwa;
int screenHeight, screenWidth;
//Colors
Colormap colormap;
XColor backgroundColor, white;
//Checks for open display
dis = XOpenDisplay(NULL);
//Displays error
if(dis == NULL)
{
fprintf(stderr, "Cannot open display\n");
exit(1);
}
//Sets screen
screen = DefaultScreen(dis);
colormap = DefaultColormap(dis, screen);
//Background color
XParseColor(dis, colormap, "#75677e", &backgroundColor);
XAllocColor(dis, colormap, &backgroundColor);
//White
XParseColor(dis, colormap, "#ffffff", &white);
XAllocColor(dis, colormap, &white);
//Creates window
win = XCreateSimpleWindow(dis, RootWindow(dis, screen), 100, 100, 500, 300, 1, BlackPixel(dis, screen), backgroundColor.pixel);
//Changes window to be full screen
//Atom atoms[2] = { XInternAtom(dis, "_NET_WM_STATE_FULLSCREEN", False), None };
//XChangeProperty(dis, win, XInternAtom(dis, "_NET_WM_STATE", False), XA_ATOM, 32, PropModeReplace, (unsigned char *)atoms, 1);
//Allocates graphics content
gc = XCreateGC(dis, win, valuemask, &values);
XSetLineAttributes(dis, gc, 2, LineSolid, CapButt, JoinBevel);
XSetFillStyle(dis, gc, FillSolid);
XSync(dis, False);
//Stores screen dimensions
//TODO: test
XGetWindowAttributes(dis, win, &xwa);
screenWidth = xwa.width;
screenHeight = xwa.height;
//Inner circle
//XFillArc(dis, win)
XSetForeground(dis, gc, BlackPixel(dis, screen));
XFillRectangle(dis, win, gc, 0, 100, 50, 50);
//Listens for input
XSelectInput(dis, win, ExposureMask | KeyPressMask);
//Maps window
XMapWindow(dis, win);
while(1)
{
XNextEvent(dis, &event);
}
XCloseDisplay(dis);
return 0;
}
當我運行它時,控制檯中沒有錯誤,沒有任何關於BadDrawable或任何東西。它打開窗口很好,但沒有矩形出現在屏幕上。我也試着畫一條線,一個點和一條弧線。
繪製未映射的窗口上是沒用的,一旦它的映射,你從來不畫任何東西。 –