色々なコントロール(1)

ダイアログボッスクには、今まで出てきたものだけではなく、様々なコントロールを並べることができます。 ここでは、Windows 3.x当時から使えるものだけを取り上げます。(Windows95以降に追加されたものは、 私が知らないからです)

今回作るプログラムは、以下のようなものです。(ダイアログのコントロールの説明が目的なので、 外見だけです。中身の処理を作ろうとすると、マルチメディアの全解説になってしまいますので。)

ダイアログ 全ソース

今から説明するコントロールは、スクロールバーを除いてすべて、 状態の変更をWM_COMMANDで送ってきます。だからこれを捕まえればコントロールが どういう状態にいるか分かります。しかし、任意のタイミングで 状態を取得したい場合もあります。そういうとき、ボタン系のコントロールでは IsDlgButtonChecked()というAPIが使えます。

スタティックテキスト(ラベル)

これは、すでに使ってきました。 "ファイル名"などのように、他のコントロールの直前に置いて、そのコントロール の説明に使ったりします。ダイアログテンプレートには
    LTEXT "ファイル名", -1, 6, 6, 43, 8
のように書きます。これだと左揃えになります。RTEXT(右揃え)やCTEXT(センタリング)もあります。 SetDlgItemText()を使えば、実行中に文字列を書き換えることもできます。

似たような物として、アイコンもあります(これも以前使いました)。また、 白もしくは黒の長方形を表示するだけのスタティックコントロールもあります。

プッシュボタン

これも、すでに使ってきました。
押すとへこむボタンです。もっともなじみのあるコントロールですね。 ダイアログテンプレートには
    PUSHBUTTON  "参照", IDBROWSE, 150, 3, 40, 14
のように書きます。 SetDlgItemText()を使えば、ボタン文字列を変更できます。

エディットコントロール

これも、すでに使ってきました。
キーボードからの文字列の入力をうけつけます。通常は1行ですが 複数行にすることもできます。ダイアログテンプレートには
    EDITTEXT            IDEDIT, 56, 4, 86, 12, ES_AUTOHSCROLL
のように書きます。文字列の取得は
			GetDlgItemText(hDlg, IDEDIT, buf, sizeof(buf));
のように書きます。設定は
			SetDlgItemText(hDlg, IDEDIT, buf);
です。

グループボックスとラジオボタン

二者択一など、わりと少なめの複数の選択肢から一つを選ばせるときに使うコントロールです。選択肢が 多い場合は、これは使わずにコンボボックス等を使うべきです。
図のように縦にならべても
図のように横にならべてもOKです。
ダイアログテンプレートには
    GROUPBOX    "動作", -1, 8, 39, 50, 49
    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
のように書きます。ソース中では初期化動作として
		CheckRadioButton(hDlg, IDREC, IDCON, IDPLY);
のようにしておきます。これは、どれか一つを最初に選択状態にしておくためです。 状態の取得は
	if      (IsDlgButtonChecked(hDlg, IDREC)) mode=IDREC;
	else if (IsDlgButtonChecked(hDlg, IDPLY)) mode=IDPLY;
	else                                      mode=IDCON;
のように書きます。

なおグループボックスの無いラジオボタンはちょっと考えにくいですが、 グループポックス自体はラジオボタンに限らず、色々なものを視覚的にまとめるのに利用できます。

チェックボックス

オンとオフの二つの状態を選択するコントロールです。
図のような外観をしてます。 ダイアログテンプレートには
    CONTROL "ステレオ", IDCHK, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 130, 77, 54, 10
のように書きます。状態の取得は
	if (IsDlgButtonChecked(hDlg, IDCHK)) stereo=1; else stereo=0;
のように書きます。

長くなったので、残りは次回。

前のページ

次のページ

一つ上のページに戻る