今回作るプログラムは、以下のようなものです。(ダイアログのコントロールの説明が目的なので、 外見だけです。中身の処理を作ろうとすると、マルチメディアの全解説になってしまいますので。)
今から説明するコントロールは、スクロールバーを除いてすべて、 状態の変更をWM_COMMANDで送ってきます。だからこれを捕まえればコントロールが どういう状態にいるか分かります。しかし、任意のタイミングで 状態を取得したい場合もあります。そういうとき、ボタン系のコントロールでは IsDlgButtonChecked()というAPIが使えます。
LTEXT "ファイル名", -1, 6, 6, 43, 8のように書きます。これだと左揃えになります。RTEXT(右揃え)やCTEXT(センタリング)もあります。 SetDlgItemText()を使えば、実行中に文字列を書き換えることもできます。
似たような物として、アイコンもあります(これも以前使いました)。また、 白もしくは黒の長方形を表示するだけのスタティックコントロールもあります。
PUSHBUTTON "参照", IDBROWSE, 150, 3, 40, 14のように書きます。 SetDlgItemText()を使えば、ボタン文字列を変更できます。
EDITTEXT IDEDIT, 56, 4, 86, 12, ES_AUTOHSCROLLのように書きます。文字列の取得は
GetDlgItemText(hDlg, IDEDIT, buf, sizeof(buf));のように書きます。設定は
SetDlgItemText(hDlg, IDEDIT, buf);です。
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;のように書きます。
長くなったので、残りは次回。
一つ上のページに戻る