大家都說x是 客戶端-伺服器 的架構。那麼這一定是真的了,可是,這到底是什麼意思呢?
既然是x11程式設計,首先我們需要相應的標頭檔案
#includeint main()建立連線後,就可以請求建立視窗了:
int screennumber = defaultscreen(dsp);僅僅建立還不行,還需要map(想象成從記憶體拷貝到視訊記憶體?)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
xmapwindow( dsp, win );
long eventmask = structurenotifymask;然後等待server的 map 完成的通知xselectinput( dsp, win, eventmask );
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);前面有一點沒說,當我們執行了 xcreate******window、xmapwindow 等操作時,資料還快取在客戶端。我們要確保資料送到server,需要呼叫 xflush()。這一點我們可以類似寫檔案操作或網路寫socket操作。xclosedisplay(dsp);
return 0;
}
可是例子中為什麼沒有呼叫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視窗系統通過軟體工具及架構協議來建立作業系統所用的圖形...