Изучаю программирование под X-венду. Написал простейшую программу:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <X11/Xlib.h>
#include <X11/Xutil.h>
#include <X11/Xos.h>
#define X 0
#define Y 0
#define WIDTH 200
#define HEIGHT 200
#define WIDTH_MIN 50
#define HEIGHT_MIN 50
#define BORDER_WIDTH 4
char* szHello = "Hello, World!";
int main(int argc, char* argv[])
{
Display* disp;
int scr;
GC gc;
XEvent event;
Window wnd;
Atom wmdestroy;
Atom wmprotocols;
// connect to X server
disp = XOpenDisplay(NULL);
if (disp==NULL) {
fprintf(stderr, "Unable to connect to X server.\n");
exit(1);
}
// create window
scr = DefaultScreen(disp);
wnd = XCreateSimpleWindow(disp, RootWindow(disp, scr),
X, Y, WIDTH, HEIGHT, BORDER_WIDTH,
BlackPixel(disp, scr), WhitePixel(disp, scr));
XSelectInput(disp, wnd, ExposureMask|KeyPressMask);
// set WM_PROTOCOLS property
wmdestroy = XInternAtom(disp, "WM_DESTROY", 1);
wmprotocols = XInternAtom(disp, "WM_PROTOCOLS", 1);
XSetWMProtocols(disp, wnd, &wmdestroy, 1);
// show window
XMapWindow(disp, wnd);
// main loop
while (1) {
XNextEvent(disp, &event);
switch(event.type) {
case ClientMessage:
if (event.xclient.message_type==wmprotocols) {
if (event.xclient.data.l[0]==wmdestroy) {
fprintf(stderr, "Close button pressed!\n");
XCloseDisplay(disp);
exit(0);
}
}
break;
case Expose:
if (event.xexpose.count!=0) break;
gc = XCreateGC(disp, wnd, 0, NULL);
XSetForeground(disp, gc, BlackPixel(disp, 0));
XDrawString(disp, wnd, gc, 20, 20, szHello, strlen(szHello));
XFreeGC(disp, gc);
XFlush(disp);
break;
case KeyPress:
XCloseDisplay(disp);
exit(0);
}
}
return 0;
}
Запускаю прогу из консоли, появляется окошко с текстом... При нажатии ESCAPE успешно завершается, но когда нажимаю кнопку закрытия окна, выдается такая ошибка:
X connection to :0.0 broken (explicit kill or server shutdown).
Похоже, не обрабатывается сообщение ClientMessage (текст "Close button pressed!\n" не выводится).
Что нужно сделать, чтобы корректно обрабатывалось закрытие окна?
Ответ на:
комментарий
от mv
Ответ на:
комментарий
от mv
Ответ на:
комментарий
от lemas
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.
Похожие темы
- Форум Segmentation fault (2009)
- Форум Вопросы по компиляции программ (2004)
- Форум Как в XLib Вывести русские буквы ( в окне ) (2006)
- Форум socket error (2009)
- Форум XFontSet и все что с ним связано (2017)
- Форум Раньше работал СОМ порт, теперь не работает помогите разобраться.! HELP!!!!!!!!! (2004)
- Форум Правильно ли я открываю СОМ порт? ХХХХХХХЕЕЕЕЕЛЛЛЛЛППППППП!!!!!!!!!!! (2004)
- Форум ffmpeg создание видео (2010)
- Форум [hook][mipsel]падает при вызове оригинального метода (2010)
- Форум разбираюсь с классами непонятные ошибки при компиляции объясните в чем я неправ??? (2010)