XSetWindowAttributes(3) ウィンドウの生成、ウィンドウ属性構造体

Other Alias

XCreateWindow, XCreateSimpleWindow

書式

Window XCreateWindow(display, parent, x, y, width, height, border_width, depth,

                       classvisualvaluemaskattributes)

      Display *display;

      Window parent;

      int xy

      unsigned int widthheight;

      unsigned int border_width;

      int depth;

      unsigned int class;

      Visual *visual

      unsigned long valuemask;

      XSetWindowAttributes *attributes;

Window XCreateSimpleWindow(display, parent, x, y, width, height, border_width,

                             borderbackground)

      Display *display;

      Window parent;

      int xy;

      unsigned int widthheight;

      unsigned int border_width;

      unsigned long border;

      unsigned long background;

引き数

attributes
値を取り出す構造体(マスク値として指定)を指定する。 構造体でどの属性がセットされているかを示すため、マスク値には適切なビット がセットされていなければならない。
background
ウィンドウの背景のピクセル値を指定する。
border
ウィンドウの境界のピクセル値を指定する。
border_width
生成されるウィンドウの境界の幅をピクセル単位で指定する。
class
生成されるウィンドウのクラスを指定する。 これには InputOutput, InputOnly, CopyFromParent のいずれかを指定する。 CopyFromParent クラスの時は、親と同じクラスになる。
depth
ウィンドウの深さを指定する。 深さを CopyFromParent とした場合、深さは親と同じになる。
display
X サーバへの接続を指定する。
parent
親ウィンドウを指定する。
valuemask
引き数 attributes で定義されるウィンドウ属性を指定する。 このマスクは、複数の有効な属性マスクに対して、ビットごとの論理和を取っ たものである。 マスク値が 0 ならば引き数 attributes は無視され、参照されない。
visual
ビジュアル型を指定する。 ビジュアルに CopyFromParent を指定した場合は親と同じビジュアル型になる。
width

height
高さと幅を指定する。 これは生成されるウィンドウの内側の大きさであり、境界は含まない。
x

y
x, y 座標を指定する。これはウィンドウの境界の左上外側の隅であり、 親ウィンドウの境界の内側からの相対座標で指定する。

説明

関数 XCreateWindow は、マップされていないサブウィンドウを指定した親ウィンドウに対して生成し、 生成したウィンドウのウィンドウIDを返す。また、X サーバに CreateNotify イベントを生成させる。 生成されたウィンドウは兄弟ウィンドウに対してスタックの一番上に配置され る。

座標系はX軸が水平方向、Y軸が垂直方向であり、左上隅が原点[0, 0]である。 座標は整数で、ピクセルが基準であり、ピクセルの中心と一致する。 各ウィンドウとピックスマップは自分自身の座標系を持つ。 ウィンドウについては、原点は左上隅の境界の内側である。

InputOnly のウィンドウの場合は border_width は 0 でなければならない。 そうでない場合、エラー BadMatch となる。 InputOutput クラスの場合、スクリーンに対してビジュアル型と深さの組み合わせが サポートされていなければならない。そうでない場合には、エラー BadMatch となる。 深さは親ウィンドウと同じである必要は無いが、親ウィンドウのクラスは InputOnly であってはならない。そうでない場合、エラー BadMatch となる。 InputOnly のウィンドウは深さが 0 でなければならず、スクリーンがサポートしている ビジュアルでなければならいない。 いずれかの条件が満たされない場合、エラー BadMatch となる。 しかし、親ウィンドウは任意の深さとクラスを持つことが考えられる。 ウィンドウに対して不正なウィンドウ属性を指定した場合、エラー BadMatch となる。

生成されたウィンドウは、その時点ではディスプレイに表示(マップ)されない。 ウィンドウを表示するには、 XMapWindow を呼び出す。 新しいウィンドウは初期状態では親ウィンドウと同じカーソルを使用する。 新しいウィンドウに新しいカーソルを定義する時は、 XDefineCursor を使う。 生成されたウィンドウは全ての祖先ウィンドウがマップされ、自身が祖先ウィ ンドウの陰に隠されないようになるまではスクリーンに表示されない。

XCreateWindow はエラー BadAlloc, BadColor, BadCursor, BadMatch, BadPixmap, BadValue, BadWindow を起こすことがある。

関数 XCreateSimpleWindow は指定した親ウィンドウに対して、マップされていない InputOutput のサブウィンドウを作り、そのウィンドウIDを返す。また、X サーバに CreateNotify イベントを生成させる。 生成されたウィンドウは兄弟ウィンドウに対してスタックの最も上に配置され る。 親ウィンドウの外にはみ出る部分は全てクリップされる。 InputOnly のウィンドウの border_width は 0 でなければならない。そうでない場合に は、エラー BadMatch となる。 XCreateSimpleWindow は親ウィンドウより深さ、クラス、ビジュアルを継承する。 これ以外のウィンドウ属性は、背景色を除いて全てデフォルト値になる。

XCreateSimpleWindow はエラー BadAlloc, BadMatch, BadValue, BadWindow を起こすことがある。

構造体

XSetWindowAttributes 構造体の内容を示す。

#define CWBackPixmap (1L<<0)
#define CWBackPixel (1L<<1)
#define CWBorderPixmap (1L<<2)
#define CWBorderPixel (1L<<3)
#define CWBitGravity (1L<<4)
#define CWWinGravity (1L<<5)
#define CWBackingStore (1L<<6)
#define CWBackingPlanes (1L<<7)
#define CWBackingPixel (1L<<8)
#define CWOverrideRedirect (1L<<9)
#define CWSaveUnder (1L<<10)
#define CWEventMask (1L<<11)
#define CWDontPropagate (1L<<12)
#define CWColormap (1L<<13)
#define CWCursor (1L<<14)
typedef struct {
     Pixmap background_pixmap;
     unsigned long background_pixel;
     Pixmap border_pixmap;    
     unsigned long border_pixel;
     int bit_gravity;         
     int win_gravity;         
     int backing_store;       
     unsigned long backing_planes;
     unsigned long backing_pixel;
     Bool save_under;         
     long event_mask;         
     long do_not_propagate_mask;
     Bool override_redirect;  
     Colormap colormap;       
     Cursor cursor;           
} XSetWindowAttributes;

この構造体のメンバの詳しい説明については Xlib - C Language X Interface を参照すること。

返り値

BadAlloc
要求されたリソースやサーバメモリの割り当てにサーバが失敗した。
BadColor
引き数 Colormap の値が、定義されている Colormap を指していない。
BadCursor
引き数 Cursor の値が、定義されている Cursor を指していない。
BadMatch
InputOnly のウィンドウに対する値が存在しない。
BadMatch
引き数や引き数の組は正しい型・範囲を持っているが、そのリクエストが要求する 他の条件に適合できなかった。
BadPixmap
引き数 Pixmap の値が、定義されている Pixmap を指していない。
BadValue
指定された数値にリクエストの許容範囲を越えているものがある。引き数に対 して特定の範囲が指定されていなければ、引き数の型で定義されている全ての範 囲が許される。選択肢として定義されている引き数はこのエラーを起こすことが ある。
BadWindow
引き数 Window の値が、定義されている Window を指していない。