キーボード操作のサポート

スペース、リターン、ESCキー

ボタンの上にフォーカスがある時、スペースキーを押すとそのボタンを押したことになります。 この機能は全てのボタン類に自動でつきます。

DEFPUSHBUTTONスタイルをもつプッシュボタンは、そのボタンにフォーカスがないときでも リターンキーで押すことができます。これは他のボタンとは枠線の太さが違うので見分けがつきます。 もしDEFPUSHBUTTONスタイルのボタンが無いときは、IDOKのボタンがその動作をします。(ただし このとき枠線は太くなりません。)

IDCANCELというIDをもつボタンは、ESCキーの押し下げで、押したことになります。というか、ボタンが なくても、ダイアログプロシージャがIDCANCELを処理しているなら、ESCキーを押すとそれが動作します。

TABキー

TABおよびShift+TABは、コントロール間の移動に使われます。この機能は自動で入りますが、そのためには TABで移動したいコントロールのスタイルにWS_TABSTOPを指定する必要があります。一部のコントロールには デフォルトでこのスタイルがついています。もちろん移動しても意味のないコントロール(ラベル文字列等) には、このスタイルをつけてはいけません。

また、移動する順番は、ダイアログテンプレートにコントロールを記述した順番なので、 望み通りに動かすには、順番を入れ換える必要があります。

(捕捉。他のコントロールは、フォーカスの移動が目で見てはっきり分かりますが、 リストボックスだけは、ほとんど分かりません。注意を要するところです。)

矢印キー

コントロール間での移動(WS_GROUPで囲まれた範囲)
矢印キーでのコントロール間の移動は、同一グループ内でしか行わないのが普通なので、 移動したらまずい所に移動する場合、WS_GROUPをつけてそれを防ぎます。

	GROUPBOX "ビット数", -1, 125, 48, 68, 23, WS_GROUP
	CONTROL        "8", IDRB8, "Button", BS_AUTORADIOBUTTON, 134, 57, 16, 10
	CONTROL       "16", IDRB16, "Button", BS_AUTORADIOBUTTON, 162, 57, 21, 10
	CONTROL "ステレオ", IDCHK, "Button", BS_AUTOCHECKBOX | WS_TABSTOP| WS_GROUP, 130, 77, 54, 10
ここで最後のチェックボックスにWS_GROUPの指定が無いと、矢印キーでラジオボタンからチェックボックスに 移動してしまいます。これは不自然なので、WS_GROUPをつけて防ぎます。 単独のプッシュボタンやチェックボックスには全部WS_GROUPを指定した方が良いと思います。
コントロール内での移動
エディットコントロール内ではもちろん矢印キー:HOME,ENDが使えます。 マルチラインならPageUp, PageDownも使えます。

スクロールバーにフォーカスがあるときは、HOME, END, PageUp, PageDown, 矢印キーが使えます。

リストボックスやコンボボックスもHOME, END, PageUp, PageDown,矢印キーで操作可能です。 コンボボックスのドロップタウンはALT+↓キーです。

ALT+英字キー

WS_TABSTOPつきのコントロールそのもの、もしくは直前のラベルに
"参照(\036B\037サ)"もしくは "参照(&B)"等と書いておくと、ALT+Bキーでここに移動します。英語表記の場合、"&Help"等と 書くと、ALT+Hで移動します。もちろんこのアクセスキーは、コントロール毎に違う必要があります。

なお、"参照(\036B\037サ)"のような書き方は、Windows3.1でコントロールパネル→キーボード→ アクセスキーでアルファベットとカタカナを選択可能なのに対応した書き方ですが、Windows95では この設定が見当たらないようです。

以上をすべて考慮して、前回のダイアログテンプレートを書き直すと、以下のようになります。

dialog DIALOG 6, 18, 199, 118
STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
CAPTION "マルチメディアレコーダ"
FONT 12, "System"
BEGIN
	LTEXT "ファイル名(\036F\037フ)", -1, 6, 6, 60, 8
	EDITTEXT            IDEDIT, 46, 4, 96, 12, ES_AUTOHSCROLL
	PUSHBUTTON  "参照(\036B\037サ)", IDBROWSE, 150, 3, 40, 14, WS_GROUP
	LTEXT       "種類(\036T\037シ)", -1, 6, 24, 30, 8
	COMBOBOX            IDTYPE, 38, 23, 91, 50, CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
	PUSHBUTTON  "&Help", IDHELP, 160, 22, 30, 10, WS_GROUP
	PUSHBUTTON  "&About", IDABOUT, 160, 35, 30, 10
	GROUPBOX    "動作(\036M\037ト)", -1, 8, 39, 50, 49,  WS_GROUP
	CONTROL     "記録", IDREC, "Button", BS_AUTORADIOBUTTON, 13, 48, 30, 10
	CONTROL     "再生", IDPLY, "Button", BS_AUTORADIOBUTTON, 13, 59, 30, 10
	CONTROL   "コンバート", IDCON, "Button", BS_AUTORADIOBUTTON, 14, 70, 36, 10
	LTEXT     "周波数(\036R\037ハ)", -1, 68, 45, 47, 8
	LISTBOX             IDLIST, 68, 56, 48, 33, WS_VSCROLL | WS_TABSTOP
	GROUPBOX "ビット数(\036I\037ヒ)", -1, 125, 48, 68, 23, WS_GROUP
	CONTROL        "8", IDRB8, "Button", BS_AUTORADIOBUTTON, 134, 57, 16, 10
	CONTROL       "16", IDRB16, "Button", BS_AUTORADIOBUTTON, 162, 57, 21, 10
	CONTROL "ステレオ(\036O\037ス)", IDCHK, "Button", BS_AUTOCHECKBOX | WS_TABSTOP| WS_GROUP, 130, 77, 54, 10
	LTEXT     "レベル(\036L\037レ)", -1, 5, 97, 29, 8
	SCROLLBAR           IDSCR, 42, 97, 86, 8, WS_TABSTOP
	PUSHBUTTON  "開始(\036S\037カ)", IDOK, 147, 92, 40, 14, WS_GROUP
	LTEXT   "停止中", IDSTATUS, 2, 108, 200, 8
END

その他定義済みキー

ALT+SPACE システムメニュー
ALT+F4 閉じる
などが、自動的につきます。

前のページ

次のページ

一つ上のページに戻る