把rcp最小化到系统托盘

本文介绍如何在Eclipse中使用WorkbenchWindowAdvisor实现类来初始化系统托盘图标(tray item),包括创建托盘图标、设置上下文菜单(context menu)及自定义窗口最小化到系统托盘和恢复的行为。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. 在WorkbenchWindowAdvisor实现类中初始化trayitem

public void postWindowOpen() {
        initStatusLine();
        
final IWorkbenchWindow window = getWindowConfigurer().getWindow();
        trayItem 
= initTaskItem(window);
        
if (trayItem != null{
            hookPopupMenu(window);
            hookMinimize(window);
        }


}


//初始化trayitem
private TrayItem initTaskItem(IWorkbenchWindow window) {
        
final Tray tray = window.getShell().getDisplay().getSystemTray();
        
if (tray == null)
            
return null;
        TrayItem trayItem 
= new TrayItem(tray, SWT.NONE);
        trayImage 
= Activator.getImageDescriptor(IImageKeys.ONLINE)
                .createImage();
        trayItem.setImage(trayImage);
        trayItem.setToolTipText(
"test");
        
return trayItem;
}


//初始化trayItem上的context menu
private void hookPopupMenu(final IWorkbenchWindow window) {
        trayItem.addListener(SWT.MenuDetect, 
new Listener() {
            
public void handleEvent(Event event) {
                MenuManager trayMenu 
= new MenuManager();
                Menu menu 
= trayMenu.createContextMenu(window.getShell());
                actionBarAdvisor.fillTrayItem(trayMenu);
                menu.setVisible(
true);
            }

        }
);
}

//自定义minimize到系统托盘和恢复的行为
private void hookMinimize(final IWorkbenchWindow window) {
        window.getShell().addShellListener(
new ShellAdapter() {
            
public void shellIconified(ShellEvent e) {
                window.getShell().setVisible(
false);
            }

        }
);
       
        trayItem.addListener(SWT.DefaultSelection, 
new Listener() {
            
public void handleEvent(Event event) {
                Shell shell 
= window.getShell();
                
if (!shell.isVisible()) {
                    shell.setVisible(
true);
                    window.getShell().setMinimized(
false);
                }

            }

        }
);
}


2. fillTrayItem可以写在ActionBarAdvisor的实现类中
protected void fillTrayItem(IMenuManager trayItem) {
     trayItem.add(aboutAction);
     trayItem.add(exitAction);
}
 

转自http://www.ceclipse.org/bbs/read-cec-tid-12193.html
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值