2015-01-09 2 views
0

xlib에서 테두리없이 창을 만들려고합니다 (팝업?). 이 코드를 사용하고 있습니다 :테두리가없는 창은 항상 맨 위에 있습니다.

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

int main(int argc, char **argv) 
{ 
    Display *display = NULL; 
    Window window; 
    XSetWindowAttributes attribs; 

    display = XOpenDisplay(NULL); 
    if(!display) 
    { 
     printf("Cannot to open display."); 
     return 1; 
    } 

    attribs.override_redirect = 1; 

    window = XCreateWindow(display, RootWindow(display, 0), 20, 20, 400, 300, 0, CopyFromParent, CopyFromParent, CopyFromParent, CWOverrideRedirect, &attribs); 
    XSetWindowBackground(display, window, 0x00F0FF); 
    XClearWindow(display, window); 

    XMapWindow(display, window); 
    XFlush(display); 

    getchar(); 
    return 0; 
} 

테두리가없는 창을 만들지 만이 창은 항상 위에 있습니다. 질문 : xlib에서 일반 윈도우로 표시하는 이유와 그 동작.

답변

3

오버 라이드 리다이렉트 윈도우가 동작하는 방식입니다. 이들은 일시적이며 다른 창 위에 머무르는 팝업 메뉴 및 유사한 창을 구현하기 위해 설계되었습니다.

이것이 원하는 것이 아니라면 override-redirect 플래그를 사용하지 마십시오. 대신 WM 힌트를 사용하십시오. 힌트의 전체 목록은 here을 참조하십시오. WM에 어떤 창 유형 (_NET_WM_WINDOW_TYPE_TOOLBAR 등)이 있는지 알려주고 장식하는 방법이 아닙니다. 사용 예는 here을 참조하십시오.

그래도 원하는 것이 아니라면 (다소 오래된) Motif WM 힌트를 사용하십시오. 예를 들어 here을 참조하십시오.

+0

예, 그게 전부입니다. 도와 주셔서 감사합니다 :) – Popiel

관련 문제