是否有人知道是否可以在e4应用程序中禁用或覆盖“alt + f4”(在Windows上关闭应用程序)的本机行为? 有什么建议的解决方案来实现这一目
最好的问候
答案 0 :(得分:0)
我的解决方案是 NOT 纯SWT解决方案。 仅适用于Windows 。但你提到了Windows,如果你只针对一个平台,这就足够了。它使用来自SWT的内部代码,但它映射到Microsoft API记录的Windows API,因此不会更改。
public static void main(String[] args) {
final Display display = new Display();
final Shell shell = new Shell(display);
shell.addListener(SWT.Close, new Listener() {
@Override
public void handleEvent(Event event) {
if (OS.GetKeyState(OS.VK_MENU) < 0 && OS.GetKeyState(OS.VK_F4) < 0) {
event.doit = false;
}
}
});
shell.open();
while (!shell.isDisposed()) {
if (!display.readAndDispatch()) {
display.sleep();
}
}
display.dispose();
}
答案 1 :(得分:0)
找到了解决方案,但我不满意。
创建了一个插件:
即在UIEvents.UILifeCycle.APP_STARTUP_COMPLETE
主题上注册事件处理程序。
然后以某种方式从主题元数据中检索shell并在显示器上注册过滤器。
@PostConstruct
void hookListeners() {
eventHandler = new EventHandler() {
@Override
public void handleEvent(Event arg0) {
MElementContainer property = (MElementContainer) arg0.getProperty("org.eclipse.e4.data");
final Shell shell = (Shell) property.getSelectedElement().getWidget();
final Display display = shell.getDisplay();
display.addFilter(SWT.Close, new Listener() {
@Override
public void handleEvent(org.eclipse.swt.widgets.Event event) {
if (!MessageDialog.openQuestion(shell, "Exit",
"Do you really want to close the Application?")) {
//see api documentation display.addFilter(
event.type = SWT.NONE;
event.doit = false;
}
}
});
}
};
eventBroker.subscribe(UIEvents.UILifeCycle.APP_STARTUP_COMPLETE, eventHandler);
}
这个解决方案对我来说似乎不对,所以如果有人有更好的解决方案请分享: - )