- 浏览: 10726 次
- 性别:
- 来自: 济南
最新评论
SWT程序设计中,Display充当SWT与底层操作系统、UI线程之间的桥梁,而OS类是Display实现的基础。
OS对界面部分操作系统底层API进行了封装,其父类C实现了内存操作函数,从而使得java中也可以像C/C++一样设计界面。
我们知道,基本的windows程序设计一般需要注册窗口类、创建窗口、处理消息循环三个过程,通过OS我们完全可以用java代码实现以上过程,看例子:纯OS实现的hello world!
import org.eclipse.swt.SWT; import org.eclipse.swt.internal.Callback; import org.eclipse.swt.internal.win32.MSG; import org.eclipse.swt.internal.win32.OS; import org.eclipse.swt.internal.win32.PAINTSTRUCT; import org.eclipse.swt.internal.win32.RECT; import org.eclipse.swt.internal.win32.TCHAR; import org.eclipse.swt.internal.win32.WNDCLASS; public class App { public static void main(String[] args) { App app = new App(); app.registerClass(); app.InitInstance(); app.readAndDispatchMessage(); } private TCHAR windowClass; private int hInstance; private Callback windowCallback; private int windowProc; private int hwndMessage; private boolean quit; private final PAINTSTRUCT lpPaint = new PAINTSTRUCT(); private final RECT rect = new RECT(); private void error(int errorNoMoreCallbacks) { throw new RuntimeException("error"); } private void InitInstance() { // 创建窗口 hwndMessage = OS.CreateWindowEx(0, windowClass, null, OS.WS_BORDER | OS.WS_VISIBLE | OS.WS_SYSMENU, 0, 0, 0, 0, 0, 0, hInstance, null); String title = "SWT_Window"; OS.SetWindowText(hwndMessage, new TCHAR(0, title, true)); OS.SetWindowPos(hwndMessage, 0, 100, 100, 400, 300, 0); OS.ShowWindow(hwndMessage, OS.SW_SCROLLCHILDREN); OS.UpdateWindow(hwndMessage); } // 消息循环 public void readAndDispatchMessage() { MSG msg = new MSG(); while (!quit) { if (OS.PeekMessage(msg, 0, 0, 0, OS.PM_REMOVE)) { OS.TranslateMessage(msg); OS.DispatchMessage(msg); } OS.WaitMessage(); } } // 注册窗口类 protected void registerClass() { // 回调函数 windowCallback = new Callback(this, "windowProc", 4); //$NON-NLS-1$ windowProc = windowCallback.getAddress(); if (windowProc == 0) { error(SWT.ERROR_NO_MORE_CALLBACKS); } // 注册窗口类 windowClass = new TCHAR(0, "SWT_Window", true); int hHeap = OS.GetProcessHeap(); hInstance = OS.GetModuleHandle(null); WNDCLASS lpWndClass = new WNDCLASS(); lpWndClass.hInstance = hInstance; lpWndClass.lpfnWndProc = windowProc; lpWndClass.style = OS.CS_HREDRAW | OS.CS_VREDRAW | OS.CS_GLOBALCLASS; lpWndClass.hCursor = OS.LoadCursor(0, OS.IDC_ARROW); lpWndClass.hbrBackground = OS.BLACK_BRUSH; int byteCount = windowClass.length() * TCHAR.sizeof; lpWndClass.lpszClassName = OS.HeapAlloc(hHeap, OS.HEAP_ZERO_MEMORY, byteCount); OS.MoveMemory(lpWndClass.lpszClassName, windowClass, byteCount); OS.RegisterClass(lpWndClass); OS.HeapFree(hHeap, 0, lpWndClass.lpszClassName); } // 回调函数 int windowProc(int hwnd, int msg, int wParam, int lParam) { String helloWorld = "hello World!"; switch (msg) { case OS.WM_PAINT: int hDC = OS.BeginPaint(hwnd, lpPaint); OS.GetWindowRect(hwndMessage, rect); rect.right -= rect.left; rect.left = 0; rect.bottom -= rect.top; rect.top = 0; OS.DrawTextW(hDC, helloWorld.toCharArray(), helloWorld.length(), rect, OS.DT_CENTER); OS.EndPaint(hwnd, lpPaint); break; case OS.WM_CLOSE: quit = true; break; default: return OS.DefWindowProc(hwnd, msg, wParam, lParam); } return 0; } }
运行上面的程序生成窗口如下:
发表评论
-
HTML Elements
2010-07-12 22:54 852转载 HTML documents are define ... -
HTML Basic - 4 Examples
2010-07-12 22:42 777转载 Don't worry if the exam ... -
HTML - Getting Started
2010-07-12 22:38 467转载 What You Need You don't ... -
HTML introduction
2010-07-12 22:33 607转载 What is HTML? HTML ... -
inside SWT: what does Display bring to SWT
2010-07-03 23:53 688写在德国4:0领先阿根廷时... 前一篇说到OS将部分 ... -
eclipse 扩展点与命令等
2010-06-22 09:26 763org.eclipse.ui.***.jar 中plugin. ... -
eclispe IExportWizard
2010-06-21 20:21 1085通过使用eclipse的org.eclispe.ui.expo ... -
使用eclipse已有命令
2010-06-21 15:26 695ApplicationActionBarAdvisor中: ... -
SimpleDateFormat
2010-06-14 15:25 864d = (new SimpleDateFormat(" ... -
java多态性测试
2010-06-08 13:36 653public class HelloWorld { ... -
eclipse droplet 1
2010-06-04 20:22 707普通RCP程序的入口:org.eclipse.equinox. ... -
打印Class Path
2010-06-03 13:49 888import java.io.IOException; ...
相关推荐
### 《Rising - Inside Your Calculator - From Simple Programs to Significant Insights》关键知识点解析 #### 标题解析 - **Rising - Inside Your Calculator**: 标题暗示了本书将深入探讨计算器内部的工作原理...
### Inside MFC: Handle Maps and Temporary Objects #### 引言 在阅读MSDN文档时,我们经常遇到这样一句话:“返回的指针可能是临时的,不应存储以供以后使用。” 这句话背后的含义是什么?本文将深入探讨MFC...
行业洞察报告 reimagining f&b :insights from the inside.pdf
《Inside ORGE:ogre引擎内核分析》是一份深入探讨OGRE3D引擎核心技术的资料,由燕良撰写,首发于2006年的个人博客,后转载至gplusplus.net。这份资料不仅为游戏开发者提供了宝贵的参考,也为对3D图形引擎感兴趣的...
Rhino.Inside:registered:.Revit 请参阅 ,以获取有关如何使用该项目的更多信息。 下面列出的部分为想要为该项目或Wiki做出贡献的开发人员提供了有关代码库的更多信息。 概述 Rhino.Inside:registered:技术允许...
Multimedia on Symbian OS: Inside the Convergence Device Paperback: 276 pages Publisher: Wiley (December 10, 2008) Language: English ISBN-10: 0470695072 ISBN-13: 978-0470695074 Format: PDF You can buy...
其中包括了对受益于华为Inside子品牌相关公司、电动智能化相关公司和无人驾驶领域的公司的投资推荐。同时,分析师也提到了可能影响投资回报的潜在风险,如房地产对消费的挤压、芯片供应问题和原材料成本上涨等。 ...
《Inside Basket:NBA, NCAA, WNBA-crx插件详解》 在互联网时代,获取实时体育资讯变得越来越便捷,尤其是对于篮球爱好者来说,能够快速掌握NBA、NCAA及WNBA的比赛动态至关重要。"Inside Basket : NBA, NCAA, WNBA-...
Welcome to Windows Server 2012 R2 Inside Out: Configuration, Storage, & Essentials. As the author of many popular technology books, I’ve been writing professionally about Windows and Windows Server ...
《高德Inside:位置·共享的安全与智能应用》 高德Inside是高德地图开放平台的核心战略,旨在通过提供智能定位、精准路径规划和导航服务,以及丰富的LBS(Location-Based Services,基于位置的服务),赋能各行各业...
- **发布日期**:本书撰写于2003年2月,是当时针对Mac OS X系统的深入解析。 - **目标读者**:旨在为开发者和技术人员提供深入的技术指南,帮助他们更好地理解和利用Mac OS X操作系统。 #### 第一章 关于本书 - **...
1.从版下载最新版本,解压并重命名为inside ,然后将其放入主题目录。 2.如下配置HEXO/_config.yml : theme : inside 3.阅读以配置主题。 浏览器支持 常绿 变更日志 常问问题 在哪里可以找到前端源代码? 由于...
《Java ME on Symbian OS: Inside the Smartphone Model》一书深入探讨了 Java ME 如何与 Symbian OS 结合,并在智能型手机上运行。本书由 Roy Ben Hayun 编写,多位专家参与审阅,确保了内容的专业性和准确性。 ##...
Who: who lost the data from the organisation? What: what actually went missing? Why: why did the data go missing? When: when did the data go missing? How: how did the data go missing? Now it’s ...
WEB应用防火墙 高德Inside:位置·共享 - 七牛云存储 法律法规 物联网安全 APT 风险评估 web安全
Stack Frames A Look From Inside 英文epub 本资源转载自网络,如有侵权,请联系上传者或csdn删除 本资源转载自网络,如有侵权,请联系上传者或csdn删除
Experiencing Schema Therapy from the Inside Out A Self-PracticeSelf-Reflection Workbook for Therapists 英文无水印原版pdf pdf所有页面使用FoxitReader、PDF-XChangeViewer、SumatraPDF和Firefox测试都可以...
Inside Host OS select destination folder, right-click the mouse and choose "Paste files from the Guest OS Clipboard" Note: 'CTRL-V' keyboard shortcut is not supported here Transferring files from ...
Inside SQL Server 2005: Query Tuning and Optimization <br>不用多说,Kalen Delaney 关于Inside SQL Server 2005的第四卷(查询调校和最优化)
通过阅读《Java ME on Symbian OS Inside the Smartphone Model》这本书或PDF文档,开发者可以全面掌握在Symbian OS上构建和优化Java ME应用程序的技能,这对于那些希望进入或已经从事移动开发的人员来说,是一项...