本文详细介绍SWT的可视化控件的X11窗口句柄简介
SWT与AWT本质上都是一套依赖于操作系统具体实现的GUI库。与swing在所有操作系统上外观一致的做法不同,awt和swt在不同的操作系统上的外观是和本地窗口一样的。
每一个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;drawable这个成员其实就是X11的Resource ID.在jawt.h的那个sample中,只要把dsi->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了。
责编:豆豆技术应用
- Linux/Unix新闻
- Linux/Unix入门
- Linux/Unix命令
- Linux/Unix安装
- Linux/Unix编程
- Linux/Unix管理
- Linux/Unix桌面
- Linux/Unix内核
- Linux/Unix软件
- Linux/Unix发行版
- redhat/Fedora
- Ubuntu Linux
- IBM AIX
- FreeBSD
- Solaris
- NetBSD
- SCO Unix
- find基本用法
- ldd命令原理及用法例子
- su和sudo命令的区别与使用技巧
- Linux操作系统下的dd命令技巧
- 关于Top命令的参数详解
- 关于Tar命令的使用
- SSH实用技巧及常用命令使用
- Linux后台执行命令
- VI命令使用技巧集锦
- Vmstat命令列出的属性详解
- 如何查看及修改文件读写权限
- 最大可存储的单文件容量
- ext2/ext3文件系统介绍
- 常用压缩格式的压缩解压方法
- Linux系统的引导过程详细解析
- Configure参数解释说明
- Linux下硬盘和分区的命名方法
- 硬链接与软链接的区别
- 权限和所有权模型
- 存储设备的两种表示方法