QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 4188|回复: 3

Xwindow 杂谈----(1)

[复制链接]
发表于 2006-12-29 14:47:50 | 显示全部楼层 |阅读模式
这篇文章是关于Xwindow的杂谈,我或许有很多的东西要说明。每个要说明的东西都是一些独立点。

所以显得有点杂乱,故取名杂谈。
  我写这篇文章的目的是将我做eGUI过程中学习Xwindow的一些心得告诉大家。
  我的联系方式:[email protected],www.egui.org,www.akaedu.org 研发部。希望大家多交流。

    关于Xwindow的学习,大家可以看看 《Xwindow 系统使用指南》《xlib manual》。

1. Display *XOpenDisplay(display_name)
      char *display_name;

  理解XOpenDisplay,这个函数的作用是打开一个显示。
 大家都知道X11(Xwindow),是server/client模式。
 客户端运行前,需要启动server。Xserver,支持多个Xserver同时运行,
 并且可以支持在多个 screen (screen 是指显示器,一般一个显卡对应一个显示器,有的一个显卡支

持多个显示器)。
 C/S结构通过网络通讯。所以基于以上原因,我们应用程序需要确定显示的server是什么?
  * hostname; 对应的服务器的网络IP。
    * server ;对应的Xserver启动号。
    * screen ;对应的显示器。
  
  hostname,screen我都解释过了。
  那么server是什么呢?是指“Xserver,支持多个Xserver同时运行”
  
  当我们运行
  bash # X &;X
  
  肯定会报错。系统提示你,已经运行了一个Xserver.

    有没有人这样做过呢?
   bash # X& ;X :1

  如果你做了这个实验,你会发现。系统在控制台7和控制台8上都有Xserver。
  (关于控制台7,8我要申明的是:RedHat Linux 系统启动后默认启动 6个字符终端)
   
    现在大家理解了server了吗?

  那么我们看看 xlib manual对display_name参数的说明:  hostname:number.screen_number
  这里hostname和我说的hostname相同,number就是我结识的server,screen_number就是screen

    如果大家写程序的时候没有设置 char *display_name;也就是说 XOpenDisplay参数为空,那么系

统会从DISPLAY环境变量去寻找参数。
  


   现在大家理解了,当你启动了Xserver,再从另一个控制台启动xterm为什么出错了吧?那就是你的DISPLAY环境变量没有设置好。
 楼主| 发表于 2006-12-30 13:24:05 | 显示全部楼层
2.   XWindowAttributes;
  typedef struct {
        int x, y;                        /* location of window */
        int width, height;                /* width and height of window */
        int border_width;                /* border width of window */
        int depth;                        /* depth of window */
        Visual *visual;                        /* the associated visual structure */
        Window root;                        /* root of screen containing window */
        int class;                        /* InputOutput, InputOnly*/
        int bit_gravity;                /* one of the bit gravity values */
        int win_gravity;                /* one of the window gravity values */
        int backing_store;                /* NotUseful, WhenMapped, Always */
        unsigned long backing_planes;        /* planes to be preserved if possible */
        unsigned long backing_pixel;        /* value to be used when restoring planes */
        Bool save_under;                /* boolean, should bits under be saved? */
        Colormap colormap;                /* color map to be associated with window */
        Bool map_installed;                /* boolean, is color map currently installed*/
        int map_state;                        /* IsUnmapped, IsUnviewable, IsViewable */
        long all_event_masks;                /* set of events all people have interest in*/
        long your_event_mask;                /* my event mask */
        long do_not_propagate_mask;        /* set of events that should not propagate */
        Bool override_redirect;                /* boolean value for override-redirect */
        Screen *screen;                        /* back pointer to correct screen */
} XWindowAttributes;

有一定窗口设计经验的人都知道,一个窗口有很多描述。例如:x,y,width,height。一看就知道。我就不

多说了。

从图形库和窗口设计角度我要和大家谈谈 map_state。它有如下三个值。
  * IsUnmapped 没有被允许显示;
  * IsViewable 可以显示;
  * IsUnviewable 这个窗口被设置为可显示;但是他的父辈不能显示。

  当一个窗口被建立时他们的属性是:IsUnmapped;当使用XMapWindow,函数后表明该窗口可以显示。
  属性应该:IsViewable。 但是当它判断它的父辈的map_state != IsViewable;他应该为:

IsUnviewable。
回复

使用道具 举报

发表于 2008-1-18 02:52:12 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

 楼主| 发表于 2008-1-27 12:51:34 | 显示全部楼层
我是,

neogreat? 是?当年做cnix的朋友?
我的邮件[email protected]
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

GMT+8, 2024-4-20 07:04 , Processed in 0.069458 second(s), 15 queries .

© 2021 Powered by Discuz! X3.5.

快速回复 返回顶部 返回列表