如何在用xlib建立的窗口上显示文字?

发布于 2022-08-17 02:51:09 字数 6050 浏览 14 评论 1

int i = 0;
        int xfd;
        int max_fd;
       
        ts_fd = open (TS_DEVICE, O_RDONLY);

        if (ts_fd < 0)
        {
                perror (TS_DEVICE);
                exit (1);
        }

        rect_sideLength = 8;
        for (i = 1; i < argc; i++)
        {
                if (argv[0] > 0x30 && argv[0] < 0x3a)
                        rect_sideLength = atoi(argv);
        }
       
        for (i = 1; i < argc; i++)
        {
                if (!strcmp (argv, "-debug"))
                        flag_debug = 1;
        }

        dsp = XOpenDisplay(NULL);
        if (dsp == NULL)
        {
                printf("Cannot connect to X server %sn", XDisplayName(NULL));
                exit(1);
        }
//        else
//                printf("Open X successfuln");

        xfd = ConnectionNumber (dsp);
        max_fd = (xfd > ts_fd) ? xfd : ts_fd;

        screen = DefaultScreen(dsp);

        XSetWindowAttributes attributes;
        attributes.override_redirect = True;//flag_debug ? False : True;
        attributes.background_pixel = WhitePixel(dsp, screen);

        win = XCreateWindow(dsp, DefaultRootWindow(dsp), 0, 0,
                                DisplayWidth(dsp, 0), DisplayHeight(dsp, 0),
                                0,
                                DefaultDepth(dsp, 0),
                                InputOutput,
                                DefaultVisual(dsp, 0),
                                CWOverrideRedirect | CWBackPixel,
                                &attributes);

        unsigned long valuemask = 0;
        XGCValues values;
        gc = XCreateGC(dsp, win, valuemask, &values);
       
  XDrawString(dsp,win,gc,10,10,strdraw,strlen(strdraw));

  
        XMapWindow(dsp,win);
        XSelectInput (dsp, win, StructureNotifyMask | ButtonPressMask | KeyPressMask);
        XGrabKeyboard (dsp, win, True, GrabModeAsync, GrabModeAsync, CurrentTime);

#if 1
        draw_XYlines(0, 0, DisplayWidth(dsp, 0), DisplayHeight(dsp, 0));
#endif

        struct timeval timeout;
        timeout.tv_sec = 0;
        timeout.tv_usec = 100*1000; /* 100ms */
  
  printf("xfd: %dn",xfd);
  printf("ts_fd: %dn",ts_fd);

        while(1)
        {
                fd_set fds;

                handle_events ();

                FD_ZERO (&fds);
                FD_SET (xfd, &fds);
                if (ts_fd != -1)
                        FD_SET (ts_fd, &fds);

                select (max_fd + 1, &fds, NULL, NULL, &timeout);

                if (ts_fd != -1 && FD_ISSET (ts_fd, &fds))
                        read_ts ();
                else
                        XRaiseWindow(dsp, win);
        }

        close(ts_fd);
        XCloseDisplay(dsp);
       
        return 0;
}

红色部分为我想窗口初始化时显示的字符串strdraw,可是只显示窗口,没显示字符串,是怎么回事?
XDrawString(dsp,win,gc,10,10,strdraw,strlen(strdraw)这个函数是怎么使用的呢?哪位大侠知道,请指教。。谢谢。。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

合久必婚 2022-08-18 15:00:02

XftTextExtentsUtf8()
你试试这个函数行吗

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文