あなたの習慣について教えてください!!

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
の説明を読んでもいまいち理解でいません
やさしく解説してください

A 回答 (2件)

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 とか
  が参考になるのでは思います。

この回答への補足

ありがとうございます

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のチュートリアルサイト)
の下にあります

補足日時:2004/04/22 11:59
    • good
    • 0

goo で検索すると、使用例、説明例があります。


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

参考URL:http://www.kitanet.ne.jp/~asler/linux/gtk/ja/gtk …

この回答への補足

ありがとうございます
このプログラムをそのままコンパイルしてもエラーになるのでキャスティングしてエラーを回避しました

/* ボタンをデフォルトにするために行う */
GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);

/* これはこのボタンをデフォルトボタンに設定する。
"Enter" キーを押すだけでこのボタンは起動される */
gtk_widget_grab_default (button);

と有りますが最初のほうでデフォルトなれば後のほうはいらないような気がしますがなぜ2つもならべないといけないようにしているのでしょうね?

コメントアウトで実験したことによると
この場合もフォーカスがクローズ用ボタンに無くてもリターンでクローズできるようにするためだけのもののようですね?

補足日時:2004/04/22 17:28
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!