SWT框架下的消息机制解析
需积分: 9 26 浏览量
更新于2024-07-29
收藏 383KB PDF 举报
"本文深入探索了SWT(Standard Widget Toolkit)框架的消息机制,作者Treenode在2006年分享了他对C/S开发中面向对象框架如何与Windows操作系统消息机制交互的理解。文章主要讨论了SWT如何在Java环境中实现与底层操作系统的通信,特别是如何在非面向对象的Windows消息系统和面向对象的SWT之间建立桥梁。"
在Windows编程中,消息机制是核心部分,而SWT作为一个用Java编写的GUI框架,需要在Java虚拟机中与Windows的消息系统交互。这通常涉及到通过JNI(Java Native Interface)来与底层操作系统通信。SWT的独特之处在于它提供了接近原生的用户体验,同时保持了Java的跨平台特性。
文章指出,界面组件的包装是一个相对简单的过程,主要是将HWND相关的函数进行面向对象的封装。然而,处理系统消息机制,特别是窗口过程(Window Procedure),是一个更为复杂的任务。窗口过程是一个非面向对象的全局函数,但为了实现面向对象编程,需要找到合适的方法让窗口过程能操纵对象。
MFC(Microsoft Foundation Classes)采用窗口查找表技术,为每个窗口及其对应的窗口过程建立映射。尽管这种方法可以工作,但它存在效率问题,因为每次查找都会消耗时间。此外,由于映射表与线程相关,跨线程传递窗口指针会导致错误。因此,使用MFC需要遵循严格的线程规则,否则可能会遇到不易察觉的错误。
相比之下,VCL(Visual Component Library)和ATL(Active Template Library)使用了更巧妙的Thunk技术。这种方法利用函数调用时堆栈的工作原理,隐蔽地将对象指针传递给窗口过程,从而在不违反面向对象原则的情况下处理消息。
SWT如何解决这个问题呢?SWT采取了一种不同于MFC和VCL/ATL的策略。它创建了一个称为“事件循环”的机制,将Java事件模型与Windows的消息队列相结合。在SWT中,当用户界面发生交互,如点击按钮或移动鼠标,Windows会产生相应的消息并将其放入消息队列。SWT的事件循环会不断地检查这个队列,将接收到的消息转换为Java事件,然后分发给适当的SWT对象进行处理。
SWT的这种设计使得开发者可以在Java环境中使用面向对象的方式来处理Windows消息,而无需直接与底层的窗口过程打交道。同时,由于SWT是开源的,开发者可以直接查看其源代码,了解并学习其内部实现,这对于理解和优化基于SWT的应用程序非常有帮助。
SWT的消息机制是其能够在Java平台上提供高性能、原生用户体验的关键。通过结合Windows的消息系统和Java的事件模型,SWT成功地在两者之间构建了一个高效的桥梁,实现了跨平台的图形用户界面开发。
点击了解资源详情
点击了解资源详情
点击了解资源详情
2008-10-25 上传
2008-03-07 上传
2019-03-29 上传
2019-07-31 上传
2019-03-20 上传
cellcomcnhr
- 粉丝: 0
- 资源: 12
最新资源
- 凌力尔特:汽车电子解决方案-电路方案
- PHP实例开发源码—雪晖 PHP投票系统xhvote 发布.zip
- 16-2nd-market-ssua-frontend:Kim Dongha Kim,Jaeyoon Jung,Pilje Lee,Gyuchan Moon
- go-simple-token-auth
- sublime-personal-custom:GitHub Repo 旨在克隆以自动配置您的崇高环境
- 毕业设计(论文)范本-论文.zip
- jianxie_单自由度_简谐振动_principle5m5_振动程序_
- Excel表格+Word文档各类各行业模板-发票领用报表.zip
- PHP实例开发源码—消息果留言板php源码.zip
- 《JAVA课程设计》--java程序设计课程设计——应用swt和sql server实现商城管理系统.zip
- fractals:分形等
- Python-Heritage:该资产包括技术实现和设计模式
- Excel表格+Word文档各类各行业模板-度科研成果统计表.zip
- esformatter-jquery-chain:用于根据 jQuery 样式指南格式化成员表达式的 Esformatter 插件
- microstat:自托管的Micropub端点,用于静态生成的微博。 :high_voltage:
- 毕业设计(论文)写作规范-论文.zip