1

この最小限の例では、プッシュ ボタン ウィジェットを含む Motif ウィンドウを作成します。

#include <Xm/PushB.h>

int main(int argc, char **argv) {
  XtAppContext app;
  Widget       toplevel, b;
  char         *translations="<Key>Escape: ArmAndActivate()\n\
                              <Key>a:      ArmAndActivate()";

  toplevel = XtVaOpenApplication(&app, "tl", NULL, 0, &argc, argv, NULL,
                                 sessionShellWidgetClass, NULL);
  
  b = XtVaCreateManagedWidget("button", xmPushButtonWidgetClass, toplevel, NULL);
  XtOverrideTranslations(b, XtParseTranslationTable(translations));

  XtRealizeWidget(toplevel);
  XtAppMainLoop(app);
  return(0);
}

Escとの両方aが同じアクション にマップされ ますが、ウィジェットはではなくキー押下に ArmAndActivateのみ応答します。に応答させるにはどうすればよいですか?によると、実際には正しいキーシムであることに注意してください 。aEscEscEscapexev

4

1 に答える 1

0

EscapeosfCancelMotif 仮想バインディングです。その意味では、すでに「占有」されています。だから使う

<Key>osfCancel: ArmAndActivate()

仮想バインディングは、~/.motifbindファイルを介して変更できます。Motif プログラミング モデルおよびを参照してくださいman VirtualBindings

于 2021-03-16T19:19:27.190 に答える