X11 入門練習

2021-08-25 20:32:50 字數 1930 閱讀 7800

大家都說x是 客戶端-伺服器 的架構。那麼這一定是真的了,可是,這到底是什麼意思呢?

既然是x11程式設計,首先我們需要相應的標頭檔案

#includeint main()

建立連線後,就可以請求建立視窗了:

int screennumber = defaultscreen(dsp);

unsigned long white = whitepixel(dsp,screennumber);

unsigned long black = blackpixel(dsp,screennumber);

window win = xcreate******window(dsp,

defaultrootwindow(dsp),

50, 50, // origin

200, 200, // size

0, black, // border

white ); // backgd

僅僅建立還不行,還需要map(想象成從記憶體拷貝到視訊記憶體?)

xmapwindow( dsp, win );
long eventmask = structurenotifymask;

xselectinput( dsp, win, eventmask );

然後等待server的 map 完成的通知

xevent evt;

dowhile( evt.type != mapnotify ); );

收到通知以後,我們就可以在上面畫線了:

gc gc = xcreategc(dsp, win, 0, null );

xsetforeground( dsp, gc, black );

xdrawline(dsp, win, gc, 10, 10,190,190);

eventmask = buttonpressmask|buttonreleasemask;

xselectinput(dsp,win,eventmask); // override prev

等待滑鼠釋放的事件:

do  while (evt.type != buttonrelease);
收到滑鼠按鍵後:銷毀視窗,斷開連線,退出程式。

xdestroywindow(dsp, win);

xclosedisplay(dsp);

return 0;

}

前面有一點沒說,當我們執行了 xcreate******window、xmapwindow 等操作時,資料還快取在客戶端。我們要確保資料送到server,需要呼叫 xflush()。這一點我們可以類似寫檔案操作或網路寫socket操作。

可是例子中為什麼沒有呼叫xflush()能,這是由於xnextevent()內部會呼叫xflush(),所以我們省略了。

如果我們程式後面不是等待滑鼠按鍵來退出,而是睡眠10秒鐘再退出,那麼就需要顯式呼叫xflush()了

#include#include...

xdrawline(dsp, win, gc, 10, 10,190,190);

// send the "drawline" request to the server

xflush(dsp);

// wait for 10 seconds

sleep(10);

xdestroywindow(dsp, win);

xclosedisplay(dsp);

return 0;

}

編譯就很簡單了:

g++ hello.cpp -o hello -lx11
或正式一點

g++ hello.cpp -o hello `pkg-config --cflags --libs x11`

X11 入門練習

2016年01月27日 09 16 47 應該用不了多久,wayland 就會取代 x window system 在linux系統下的地位了。儘管如此,稍微了解一點點x11程式設計的東西應該沒有壞處。大家都說x是 客戶端 伺服器 的架構。那麼這一定是真的了,可是,這到底是什麼意思呢?既然是x11程...

X11遠端顯示

client a 192.168.17.125,無顯示器 client b 192.168.17.116,有顯示器,display 0.0 1.開啟sshd服務,參考 2.export display 192.168.17.116 0.0 1.配置client a擁有訪問許可權 xhost 192....

Linux桌面系統x11原理簡介

x視窗系統 x window system,也常稱為x11或x 是一種以位圖方式顯示的軟體視窗系統。最初是1984年麻省理工學院的研究,之後變成unix 類unix 以及openvms等作業系統所一致適用的標準化軟體工具包及顯示架構的運作協議。x視窗系統通過軟體工具及架構協議來建立作業系統所用的圖形...