隔叶黄莺 The Blog of Unmi

〖隔叶黄莺三四声,挂壁飞瀑千万尘。若是人间无净土,此处为何妙语真! 隔叶黄莺四字,本非取自此句,而有寄寓他意,因见妙语,亦与予心合!〗

BlogJava 首页 新随笔 联系 聚合 管理
  202 Posts :: 84 Stories :: 380 Comments :: 0 Trackbacks

我们有些程序会想要托盘处显示图标,最小化到系统栏;关闭按钮不关闭程序,也是最小化到系统栏;点击托盘图标激活窗口,通过托盘图标的弹出菜单来退出程序。

本段代码就是要完成这样的功能,是 SWT  来实现的。

直接代码给出,代码中有较详细的注释,说明了本程序的功能及实现。文中的任务栏和系统栏应该知道是指哪一段吧,微软就是这么定义的,用 spyxx 的 findwindow 窥探一下就知道了。



实现效果如下:

SwtNoTray.jpg                    SwtHasTray.jpg

左图是窗口显示时,系统栏中无图标,而任务栏中有图标。右图是窗口隐藏时,只有系统栏有图标。

过后,看了翻译软件 LINGOES 灵格斯的表现形式是:

1. 任何时候系统栏都有图标
2. 最小化按钮不会隐藏窗口,只是最小化到任务栏
3. 关闭按钮也是不会关闭程序,而是最小化到系统栏
4. 也是只能通过托盘图标的弹出菜单项“退出” 来关闭程序

参考:http://www.eclipseworld.org/bbs/read-cec-tid-15458-fpage-9.html

但最后还留有一个问题:如何实现窗口可见状态时,任务栏里什么都不显示呢?




[版权声明]
本站内文章,如未标注 [转载],均系原创或翻译之作,本人 Unmi 保留一切权利。本站原创及译作未经本人许可,不得用于商业用途及传统媒体。网络媒体可随意转载,或以此为基础进行演译,但务必以链接形式注明原始出处和作者信息,否则属于侵权行为。另对本站转载他处文章,俱有说明,如有侵权请联系本人,本人将会在第一时间删除侵权文章。及此说明,重之之重。
posted on 2008-03-23 16:05 隔叶黄莺 阅读(1060) 评论(3)  编辑  收藏

Feedback

# re: SWT 中实现最小化到托盘图标,并只能通过托盘的弹出菜单关闭程序 2008-03-24 23:45 千里冰封
你写的窗口如果是继承自JDialog的话,则任务栏什么也不会显示  回复  更多评论
  

# re: SWT 中实现最小化到托盘图标,并只能通过托盘的弹出菜单关闭程序 2008-03-24 23:46 千里冰封
# while (!shell.isDisposed()) {
# if (!display.readAndDispatch())
# display.sleep();
# }
怎么像MFC的事件循环哦,
唉,SWT就是和SWING没法比了  回复  更多评论
  

# re: SWT 中实现最小化到托盘图标,并只能通过托盘的弹出菜单关闭程序 2008-03-25 10:38 隔叶黄莺
SWT的程序如果继承自 JDialog 就不伦不类了,也没这么试过,用SWT一般也不建议这么做,虽然SWT也提供了 SWT-AWT 相应类

SWT 确实很多东西太像 MFC 的,比如
窗口构造方式:
final Shell shell = new Shell(display,SWT.SHELL_TRIM ^ SWT.MAX);

SWT中很多变量在MFC都有相应的全局常量对应

资源的获取方式:
display.getSystemImage(SWT.ICON_WORKING

不过SWT可还是比MFC简单多了。
  回复  更多评论
  


标题  
姓名  
主页
验证码 *  
内容(请不要发表任何与政治相关的内容)  
  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      
该文被作者在 2008-03-23 16:33 编辑过