1

ユーザーが Motif ウィンドウの (ウィジェットの) クローズ ボックスをクリックしたときにインターセプトする方法と、Motif ウィンドウ マネージャーがクリックされたクローズ ボックスで呼び出し元のアプリケーション全体を閉じないようにする方法 (私のアプリが Motif アプリケーション コンテキストを閉じることができるようにするため)と Windows を実行し続けます)? 私はGoogle、tuts、docsで自分自身を見つけようとしましたが、サイコロはありません. C++ が必要です。

4

3 に答える 3

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;
}

このようなコールバックを設定すると、closeイベントがデフォルトのイベントハンドラーとして処理された結果としてアプリケーションが閉じられるのを防ぐことができます。

于 2009-09-07T14:54:44.273 に答える
1

vendorShellWidgetClassはあなたのためにトリックをしませんか?のように、ウィンドウではなく、モチーフアプリのコンテキストのみを閉じます。

于 2012-07-30T17:21:59.753 に答える
0

X11 の IIRC では、ウィンドウのクローズ ボックスをクリックすると、ウィンドウ マネージャーがアプリケーションにシグナルを送信し、アプリケーションに終了を指示します。クローズボックスはアプリケーションではなく WM に属しているため、モチーフ、gtk、または Qt のいずれを使用するかは関係ありません。

アプリケーションが閉じないようにするには、UNIX シグナルをキャッチする必要があります。

于 2009-09-07T13:30:58.540 に答える