c – 带有Xlib的空或透明窗口仅显示边框线

c – 带有Xlib的空或透明窗口仅显示边框线,第1张

概述有没有办法用Xlib创建一个窗口,它只显示边框线,标题,关闭按钮,你可以用鼠标移动?窗口的内容必须为空(或“完全透明”,尽管“透明度”听起来更像是我不需要的效果).基本上窗口应该显示背景区域. 我不确定它是否是您想要的,但是下面的代码创建了一个透明背景的X窗口,但仍然使用窗口管理器的窗口装饰. 只有当您的X11和图形硬件配置支持深度为32位的视觉效果时,它才会起作用. #include <X11/ 有没有办法用Xlib创建一个窗口,它只显示边框线,标题,关闭按钮,你可以用鼠标移动?窗口的内容必须为空(或“完全透明”,尽管“透明度”听起来更像是我不需要的效果).基本上窗口应该显示背景区域.解决方法 我不确定它是否是您想要的,但是下面的代码创建了一个透明背景的X窗口,但仍然使用窗口管理器的窗口装饰.

只有当您的X11和图形硬件配置支持深度为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,300,200,vinfo.depth,inputOutput,CWcolormap | CWborderPixel | CWBackPixel,&attr);    XSelectinput(display,win,StructureNotifyMask);    GC gc = XCreateGC(display,0);    Atom wm_delete_window = XInternAtom(display,"WM_DELETE_WINDOW",0);    XSetWMProtocols(display,&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,1))                    keep_running = 0;                break;            default:                break;        }    }    XDestroyWindow(display,win);    XClosedisplay(display);    return 0;}
总结

以上是内存溢出为你收集整理的c – 带有Xlib的空或透明窗口仅显示边框线全部内容,希望文章能够帮你解决c – 带有Xlib的空或透明窗口仅显示边框线所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1245933.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-07
下一篇 2022-06-07

发表评论

登录后才能评论

评论列表(0条)

保存