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