• ベストアンサー

次のGTK+の一連のコマンドが

GTK_WIDGET_SET_FLAGS(button,GTK_CAN_DEFAULT); gtk_widget_grab_default(button); が何をするものか分かりません buttonは gtk_button_new_from_stock(GTK_STOCK_CLOSE); によって作られたものです 実験をしたのですが動作に違いがないようです GTK_WIDGET_SET_FLAGS GTK_CAN_DEFAULT gtk_widget_grab_default の説明を読んでもいまいち理解でいません やさしく解説してください

質問者が選んだベストアンサー

  • ベストアンサー
  • mcWalker
  • ベストアンサー率69% (27/39)
回答No.1

dialog に button が2つ以上あるときは、 通常、どちらかを default button にします。 通常、enter key を押すと、その button が押されたように 反応します。default button は default であることを 示すため、二重枠で囲まれている場合が多いです。   VC++ では、リソースファイル(.rc)でよく指定します。   default 指定がないときは、必ずマウスでクリックしないと   選べませんが、default 指定があると、key 操作ができます。 GTK_CAN_DFAULT は button の default 属性指定でしょう。 gtk_widget_grab_default() は引数の button を default 指定に するものでしょう。   通常、OK button を default にしますが、cancel button を   default にしてもよいわけです。   因みに cancel button には、ESC key を当てる指定も   できるでしょう。   幸いなことに、Macintosh, UNIX, Windows の GUI は   これらの処理が de facto で共通化されています。   まだ慣れておられないなら、GUI の説明をご覧になると   よろしいかと思います。Macintosh Application Standard とか   が参考になるのでは思います。

keyguy
質問者

補足

ありがとうございます GTK_WIDGET_SET_FLAGS(button,GTK_CAN_DEFAULT); はbuttonのdefault属性指定でしょう。 gtk_widget_grab_default(button); は引数のbuttonをdefault指定にするものでしょう。: 両方とも同じことをしているのならば1つでいいような気がしますね? diarogではなく小さなWindowです buttonは1つです 他にテキストボックス(gtk_entry_new()で生成)1つ チェックボックス(gtk_check_button_new_with_label()で生成)2つが有ります 実験の結果: (無い場合) 2重枠で無い フォーカスがbuttonにあるときruturnを押すと終了する buttonをクリックすると終了する Alt+Cで終了する ctnl+Cで終了しない ----------------------- フォーカスがチェックボックスに有るときreturnを押しても終了しない(チェックの内容が変わる) (ある場合) 2重枠で無い フォーカスがbuttonにあるときruturnを押すと終了する buttonをクリックすると終了する Alt+Cで終了する ctnl+Cで終了しない ----------------------- フォーカスがチェックボックスに有るときreturnを押すと終了する ということでこの場合は無いほうがむしろいいほどですね? 具体的にはプログラムは http://www.gtk.org/tutorial/sec-textentries.html (gtk+2.0のチュートリアルサイト) の下にあります

その他の回答 (1)

  • mcWalker
  • ベストアンサー率69% (27/39)
回答No.2

goo で検索すると、使用例、説明例があります。 下記のURLはその一つです。→中の9.4参照方 尚、google では、これらの関数の使い方でうまく行かない 場合の質疑があります。

参考URL:
http://www.kitanet.ne.jp/~asler/linux/gtk/ja/gtk_tut_ja-9.html
keyguy
質問者

補足

ありがとうございます このプログラムをそのままコンパイルしてもエラーになるのでキャスティングしてエラーを回避しました /* ボタンをデフォルトにするために行う */ GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT); /* これはこのボタンをデフォルトボタンに設定する。 "Enter" キーを押すだけでこのボタンは起動される */ gtk_widget_grab_default (button); と有りますが最初のほうでデフォルトなれば後のほうはいらないような気がしますがなぜ2つもならべないといけないようにしているのでしょうね? コメントアウトで実験したことによると この場合もフォーカスがクローズ用ボタンに無くてもリターンでクローズできるようにするためだけのもののようですね?

関連するQ&A

専門家に質問してみよう