当用户点击一个主题窗口(widget)的关闭框时,我该如何拦截,以及如何阻止Motif窗口管理器关闭被点击的关闭框上的整个调用应用程序(以便我的应用程序可以关闭Motif应用程序上下文和窗口并继续运行)?我试图用Google,tuts和docs来发现自己,但没有骰子。需要C++。Motif:拦截关闭盒事件并阻止应用程序退出? (C++)
1
A
回答
1
这似乎是工作(在INET找到):
#include <Xm/Protocols.h>
Boolean SetCloseCallBack (Widget shell, void (*callback) (Widget, XtPointer, XtPointer))
{
extern Atom XmInternAtom (Display *, char *, Boolean);
if (!shell)
return False;
Display* disp = XtDisplay (shell);
if (!disp)
return False;
// Retrieve Window Manager Protocol Property
Atom prop = XmInternAtom (disp, const_cast<char*>("WM_PROTOCOLS"), False);
if (!prop)
return False;
// Retrieve Window Manager Delete Window Property
Atom prot = XmInternAtom (disp, const_cast<char*>("WM_DELETE_WINDOW"), True);
if (!prot)
return False;
// Ensure that Shell has the Delete Window Property
// NB: Necessary since some Window managers are not
// Fully XWM Compilant (olwm for instance is not)
XmAddProtocols (shell, prop, &prot, 1);
// Now add our callback into the Protocol Callback List
XmAddProtocolCallback (shell, prop, prot, callback, NULL);
return True;
}
设置这样的回调将阻止应用程序被关闭的关闭事件是手柄是默认的事件处理程序的结果。
0
IIRC,在X11上,当你点击一个窗口的关闭框,窗口管理器将信号发送到您的应用程序,告诉它退出。无论您使用motif还是gtk或Qt都无关紧要,因为关闭框属于WM,而不是您的应用程序。
您需要捕获unix信号以防止应用程序关闭。
1
vendorShellWidgetClass不会为您做诡计吗?如在,关闭只是图案的应用程序上下文,而不是窗口..
相关问题
- 1. 阻止控制台关闭时应用程序退出
- 2. Castle Windsor拦截器阻止PropertyChanged事件
- 3. 退出事件处理程序强制应用程序关闭
- 4. Android Phonegap App - 退出时关闭并停止应用程序
- 5. 阻止移动应用程序退出
- 6. MessageBox阻止从应用程序退出
- 7. 拦截页面退出事件
- 8. 阻止应用程序关闭
- 9. Qt - 如何拦截应用程序的关闭事件(如果有的话)
- 10. 阻止提琴手拦截应用程序
- 11. 如何拦截swift iOS应用程序的关键事件?
- 12. 如果window.open()被弹出窗口拦截器阻止,则回退?
- 13. NSWindow关闭时退出应用程序
- 14. 退出时应用程序关闭Android
- 15. 在Windows关闭应用程序退出
- 16. Java并发。阻止应用程序退出
- 17. C#COM DLL阻止VBA应用程序退出
- 18. C#Windows应用程序阻止Windows关闭/注销
- 19. 如何阻止C#控制台应用程序自动关闭?
- 20. golang - 阻止应用退出
- 21. “拦截”Windows关闭并执行命令
- 22. 阻止应用关闭
- 23. 阻止Android应用。关闭
- 24. 如何判断setInterval是否阻止应用程序退出最后一件事
- 25. QT:如何退出应用程序并关闭UI
- 26. 关闭并退出我的应用程序在android
- 27. 如何正确关闭应用程序并退出代码
- 28. 如何关闭所有活动并退出应用程序
- 29. 后退线程不关闭退出应用程序
- 30. 如何在C#windows应用程序中单击关闭按钮时阻止应用程序关闭?
我问*怎么做到这一点。我已经知道,我必须以某种方式拦截涉及的事件,并防止默认的退出处理程序被调用。 – karx11erx 2009-09-07 13:46:21
我*已*告诉你如何去做。谷歌“unix信号”,你会得到答案。 – 2009-09-07 14:54:28
你什么都没有。你的提示是毫无价值的。看到我自己给出的答复,这是一个很好的答复。 – karx11erx 2009-09-07 21:45:14