2012-11-15 6 views
5

क्या एक्सलिब के साथ एक विंडो बनाने का कोई तरीका है जो केवल सीमा रेखाएं, शीर्षक, बंद बटन प्रदर्शित करता है और आप माउस के साथ स्थानांतरित कर सकते हैं? खिड़की की सामग्री खाली होनी चाहिए (या "पूरी तरह से पारदर्शी", हालांकि "पारदर्शिता" एक प्रभाव की तरह लगता है जिसकी मुझे आवश्यकता नहीं है)। असल में खिड़की पृष्ठभूमि क्षेत्र दिखाना चाहिए।एक्सलिब के साथ खाली या पारदर्शी विंडो केवल सीमा रेखाएं दिखाती है

उत्तर

11

मुझे यकीन नहीं है कि यह वही है जो आप चाहते हैं, लेकिन कोड के बाद पारदर्शी पृष्ठभूमि के साथ एक एक्स विंडो बनाता है लेकिन फिर भी आपके विंडो प्रबंधक की विंडो सजावट का उपयोग करता है।

यह केवल तभी काम करेगा जब आपका एक्स 11 और ग्राफिक्स हार्डवेयर कॉन्फ़िगरेशन 32 बिट की गहराई के साथ दृश्यों का समर्थन करता है।

#include <X11/Xlib.h> 
#include <X11/Xutil.h> 

int main(int argc, char* argv[]) 
{ 
    Display* display = XOpenDisplay(NULL); 

    XVisualInfo vinfo; 
    XMatchVisualInfo(display, DefaultScreen(display), 32, TrueColor, &vinfo); 

    XSetWindowAttributes attr; 
    attr.colormap = XCreateColormap(display, DefaultRootWindow(display), vinfo.visual, AllocNone); 
    attr.border_pixel = 0; 
    attr.background_pixel = 0; 

    Window win = XCreateWindow(display, DefaultRootWindow(display), 0, 0, 300, 200, 0, vinfo.depth, InputOutput, vinfo.visual, CWColormap | CWBorderPixel | CWBackPixel, &attr); 
    XSelectInput(display, win, StructureNotifyMask); 
    GC gc = XCreateGC(display, win, 0, 0); 

    Atom wm_delete_window = XInternAtom(display, "WM_DELETE_WINDOW", 0); 
    XSetWMProtocols(display, win, &wm_delete_window, 1); 

    XMapWindow(display, win); 

    int keep_running = 1; 
    XEvent event; 

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

     switch(event.type) { 
      case ClientMessage: 
       if (event.xclient.message_type == XInternAtom(display, "WM_PROTOCOLS", 1) && (Atom)event.xclient.data.l[0] == XInternAtom(display, "WM_DELETE_WINDOW", 1)) 
        keep_running = 0; 

       break; 

      default: 
       break; 
     } 
    } 

    XDestroyWindow(display, win); 
    XCloseDisplay(display); 
    return 0; 
} 
संबंधित मुद्दे