我有一个SWT窗口,我希望它在任务栏中最小化时可以闪烁。
我的一个朋友告诉我,我应该尝试激活(setActive())最小化的窗口然后它应该闪烁..但这不起作用..你有什么建议吗?
感谢您的帮助!
亲切的问候!
答案 0 :(得分:0)
经过大量实验,我最终想出了自己的方法。如果外壳没有焦点,它甚至会在5次之后继续闪烁!
public static final void flashTaskBar(Runnable code) {
TaskItem item = getTaskBarItem();
long startTime = System.currentTimeMillis();
int state = item.getProgressState();
int progress = item.getProgress();
item.setProgressState(SWT.PAUSED);
item.setProgress(100);
boolean flashOn = true;
int flashes = 0;
int maxFlashes = 5;
while(true) {
long now = System.currentTimeMillis();
if(now - startTime >= 500L) {
startTime = now;
item.setProgressState(flashOn ? SWT.DEFAULT : SWT.PAUSED);
flashOn = !flashOn;
if(!flashOn) {
flashes++;
}
if(flashes >= maxFlashes) {
item.setProgressState(state);
item.setProgress(progress);
return;
}
}
if(code == null) {
try {
Thread.sleep(10L);
} catch(InterruptedException ignored) {
Thread.currentThread().interrupt();
}
} else {
try {
code.run();
} catch(Throwable e) {
e.printStackTrace();
item.setProgressState(state);
item.setProgress(progress);
return;
}
}
}
}
对于getTaskBarItem():
public static TaskItem getTaskBarItem() {
TaskBar bar = display.getSystemTaskBar();
if(bar == null) return null;
TaskItem item = bar.getItem(shell);
if(item == null) item = bar.getItem(null);
return item;
}