SWT的視覺化控制元件的X11視窗控制程式碼簡介
每一個swt和awt的視窗都對應一個本地視窗(native window),自然也會有一個視窗控制程式碼。而swing則不同,是沒有本地視窗控制程式碼的。在獲得視窗控制程式碼之後,就可以和用其他的語言(比如C++)實現的 GUI應用程式進行一些互操作。比如我們可以呼叫一些SetParene()之類的方法把一個本地的視窗嵌入到一個SWT的視窗裡來,反之亦然。這樣就提供了一個建立更豐富美觀的,可擴充性更強的GUI應用程式的手段。
關於AWT的視窗控制程式碼如何獲得,就不多說了。大家可以參考一下你的jdk的安裝目錄的include子目錄,可以看到裡面有一個jawt.h,裡面有一個很容易看懂的得到系統的window handle的sample. 我是用的Linux上的SUN j2sdk 1.4,在include/linux子目錄裡還可以看到jawt_md.h.裡面定義了一個struct:
typedef struct jawt_X11DrawingSurfaceInfo { Drawable drawable; Display* display; VisualID visualID; Colormap colormapID; int depth; /* * Since 1.4 * Returns a pixel value from a set of RGB values. * This is useful for paletted color (256 color) modes. */ int (JNICALL *GetAWTColor)(JAWT_DrawingSurface* ds, int r, int g, int b); } JAWT_X11DrawingSurfaceInfo;
platforminfo轉換成 jawt_X11DrawingSurfaceInfo型別,就可以得到X11的resource ID了,是不是很容易呢。
至於SWT,所有控制元件和視窗的父類org.eclipse.swt.widgets.Control有一個成員變數handle.按照SWT的官方API 的說法:the handle to the OS resource (Warning: This fIEld is platform dependent) 。如果是Win32平臺上,那麼這個handle其實就是Win32 API裡的那個最常見的HWND。如果用spy++的話可以很容易看到。在linux上就不是這樣了。——終於說到正題了看來我還真是能拖戲啊……, hoho ^O^ )。
由於在Linux上,swt是基於不同的本地視窗風格來構建自己的視窗的,所以就有了Motif版的和gtk版的SWT。不知道會不會有QT版的,呵呵。我是用的gtk版本的SWT,所以org.ecllipse.swt.widgets.Control的成員handle並不是X11的resource ID,通過察看swt的source code發現,這個handle其實是一個GtkWidget*型別的變數。OK,我們就可以通過類似這樣一段程式碼來得到X11的resource ID:
JNIEXPORT jlogn JNICALL Java_.......getX11Handle(JNIEnv* env, jobject obj_this, jlong swt_handle) { GtkWidget* pWidget = (GtkWidget*)((int)swt_handle); GdkWindow* pWindow = pWidget->window; int x11id = GDK_WINDOW_XWINDOW(pWindow); }
這樣我們就得到了這個swt控制元件的X11 ID了。
相關文章
- SWT的視覺化控制元件的X11視窗控制程式碼簡介(轉)視覺化控制元件
- 子視窗控制元件(轉)控制元件
- MFC操作父視窗的子控制元件控制元件
- 免費的swing/swt視覺化開發工具windowbuilder視覺化UI
- 視覺化程式設計工具Blockly 1.0簡介視覺化程式設計BloC
- dotnet 如何從 Gtk 3 的視窗到對應的 X11 視窗
- 程式碼視覺化的自動化之路視覺化
- mfc+最大最小化視窗+控制元件變化+圖片(視訊幀)顯示在控制元件上控制元件
- QT 讓視窗(或控制元件)居中QT控制元件
- 淺析“程式碼視覺化”視覺化
- PyQt5視窗繪圖控制元件QT繪圖控制元件
- 視錯覺:從一個看似簡單的自定義控制元件說起控制元件
- 一份視覺化特徵圖的程式碼視覺化特徵
- 隱藏控制檯應用程式的視窗
- PyQt5——視窗繪圖類控制元件QT繪圖控制元件
- jQuery iframe子視窗獲取父視窗元素簡單介紹jQuery
- 圖表控制元件AnyChart令人敬畏的資料視覺化示例靈感控制元件視覺化
- C#遍歷窗體控制元件程式碼,遍歷窗體所有按鈕控制元件程式碼C#控制元件
- 測試你的前端程式碼:視覺化測試前端視覺化
- VC 各種情況下的視窗控制程式碼的獲取
- 視窗程式的框架框架
- jQuery獲取瀏覽器視窗和文件視窗的高度程式碼jQuery瀏覽器
- 廣告彈窗/小視窗程式碼
- 根據一個點獲取視窗控制程式碼的APIAPI
- Tableau簡單的資料視覺化操作視覺化
- win32的建立視窗程式碼Win32
- 如何使用純前端控制元件集 WijmoJS 中的視覺化線上設計器前端控制元件JS視覺化
- 彈出視窗程式碼
- 用Python程式碼實現5種最好的、簡單的資料視覺化!Python視覺化
- tensorboard 視覺化的最詳細介紹ORB視覺化
- 面向研發的低程式碼、程式碼視覺化設計編排視覺化
- Windows常見視窗樣式和控制元件風格Windows控制元件
- PyQT5之設定視窗控制元件風格QT控制元件
- 聊聊程式碼倉庫視覺化:gource 篇視覺化Go
- dotnet 理解 X11 的 24 位或 32 位色深視窗
- 視窗鎖王ver5.10簡介
- Hiddex -視窗管理工具簡介
- 視窗程式框架示例程式碼框架