主题:拦截关闭框事件并阻止应用程序退出? (C ++)

时间:2009-09-07 13:23:16

标签: c++ exit motif

当用户点击motif窗口(widget)的关闭框时如何拦截,以及如何阻止Motif窗口管理器关闭被点击的关闭框上的整个调用应用程序(以便我的应用程序可以关闭Motif应用程序上下文和windows继续运行)?我试图通过Google,tuts和docs找到自己,但没有骰子。需要C ++。

3 个答案:

答案 0 :(得分: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;
}

设置这样的回调将阻止应用程序被关闭,因为关闭事件被处理为默认事件处理程序。

答案 1 :(得分:1)

不是vendorShellWidgetClass会为你做的伎俩吗?就像在,关闭主题应用程序上下文而不是窗口..

答案 2 :(得分:0)

IIRC,在X11上,当您单击窗口的关闭框时,窗口管理器会向您的应用程序发送一个信号,告知其退出。无论你使用motif还是gtk或Qt都无关紧要,因为关闭框属于WM,而不是你的应用程序。

您需要捕获unix信号以防止应用程序关闭。