Xlib :Почему мне приходится закрывать экран для сопоставления и отмены сопоставления окон?

Вот вариант использования для понимания wget -O.

для загрузки одного файла

wget http://machineintellect.cn/testfile.zip

эта команда загрузит файл и назовет его testfile.zip, что следует за последним/

, но если вы используете wgetнепосредственно в URL-адресе, подобном этому

wget http://machineintellect.cn/download?id=1

загруженный файл будет называться как download.aspx?id=1080, а это не то, что вам нужно.

поэтому вы можете использовать -O, чтобы указать имя целевого локального файла,вот так

wget -O target-local.zip http://machineintellect.cn/download.aspx?id=1080

эта команда даст вам файл с именем target -local.zip

0
04.08.2020, 21:48
1 ответ

Вам не нужно вызывать XCloseDisplay после XUnmapWindow. Если это не сработает, значит, в вашей программе есть какая-то другая ошибка, которая может испортить какую-то переменную?

Вот пример, который я попробовал быстро. Он отменяет отображение и отображает окно, и между ними не требуется XCloseDisplay/XOpenDisplay.

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <X11/Xlib.h>
 
int main (int argc, char *argv[])
{
    Display *display;
    Window window;
    XSetWindowAttributes attributes;
    XGCValues gr_values;
    XFontStruct *fontinfo;
    GC gr_context;
    Visual *visual;
    int depth;
    int screen;
    XEvent event;
    XColor color, dummy;

    display = XOpenDisplay (NULL);
    screen = DefaultScreen (display);
    visual = DefaultVisual (display,screen);
    depth  = DefaultDepth (display,screen);
    attributes.background_pixel = XWhitePixel (display,screen);
 
    window = XCreateWindow (display, XRootWindow (display, screen), 200, 200, 350, 200, 5, depth, InputOutput, visual, CWBackPixel, &attributes);
    XSelectInput (display, window, ExposureMask | KeyPressMask) ;
    fontinfo = XLoadQueryFont (display, "6x10");

    XAllocNamedColor (display, DefaultColormap (display, screen), "red", &color, &dummy);
 
    gr_values.font = fontinfo->fid;
    gr_values.foreground = color.pixel;
    gr_context = XCreateGC (display, window, GCFont + GCForeground, &gr_values);
    XFlush (display);
    XMapWindow (display, window);
    XFlush (display);

    int keypressed = 0;
    while (!keypressed) {
        XNextEvent (display, &event);

        switch (event.type) {
            case Expose:
                XDrawLine (display, window, gr_context, 0, 0, 100, 100);
                XDrawString (display, window, gr_context, 100, 100, "hello1", 6);
                break;
            case KeyPress: 
                keypressed = 1;
                XUnmapWindow (display, window);
                XFlush (display);
                break;
        }
    }

    sleep (1);
    XMapWindow (display, window);
    XFlush (display);

    while (1) {
        XNextEvent (display, &event);

        switch (event.type) {
            case Expose:
                XDrawLine (display, window, gr_context, 50, 50, 100, 100);
                XDrawString (display, window, gr_context, 50, 50, "hello2", 6);
                break;
            case KeyPress: 
                XCloseDisplay (display); 
                exit (0);
        }
    }
}

Программа ждет, пока вы не нажмете клавишу. Затем он отключается и снова сопоставляется. При следующем нажатии клавиши он выходит. Скомпилируйте его с

gcc -o programname programname.c -lX11

Образец взят отсюда:http://www-h.eng.cam.ac.uk/help/tpl/graphics/X/X11R5/node21.html

1
18.03.2021, 23:15

Теги

Похожие вопросы