LISTBOX IDLIST, 68, 56, 48, 33, WS_VSCROLL | WS_TABSTOPのように書きます。中身のデータは、ダイアログテンプレートには書けないので、 ダイアログプロシージャ内で、
SendDlgItemMessage(hDlg, IDLIST, LB_ADDSTRING, 0, (LONG)(LPSTR)"8000"); SendDlgItemMessage(hDlg, IDLIST, LB_ADDSTRING, 0, (LONG)(LPSTR)"11025"); SendDlgItemMessage(hDlg, IDLIST, LB_ADDSTRING, 0, (LONG)(LPSTR)"22050"); ……のようにして与えます。また、最初にどれか一つを選択状態にしておくために、
SendDlgItemMessage(hDlg, IDLIST, LB_SETCURSEL, 1, 0L);のように書きます。何番目の項目が選ばれたかは
type = (int)SendDlgItemMessage (hDlg, IDLIST, LB_GETCURSEL, 0, 0L);のように調査します。
COMBOBOX IDTYPE, 38, 23, 91, 50, CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOPのように書きます。 中身のデータ(最初に与える選択肢)は、ダイアログテンプレートには書けないので、 ダイアログプロシージャ内で、
SendDlgItemMessage(hDlg, IDTYPE, CB_ADDSTRING, 0, (LONG)(LPSTR)"PCM"); SendDlgItemMessage(hDlg, IDTYPE, CB_ADDSTRING, 0, (LONG)(LPSTR)"Microsoft ADPCM"); SendDlgItemMessage(hDlg, IDTYPE, CB_ADDSTRING, 0, (LONG)(LPSTR)"IEEE Froat"); ……のように書きます。また、最初にどれか一つを選択状態にしておくために、
SendDlgItemMessage(hDlg, IDTYPE, CB_SETCURSEL, type, 0L);のように書きます。何番目の項目が選ばれたかは
type = (int)SendDlgItemMessage (hDlg, IDTYPE, CB_GETCURSEL, 0, 0L);のように調査します。文字列が編集可能な場合、編集結果はGetDlgItemText() を使って取得します。
これは他のコントロールとはちょっと変わったコントロールです。 まず他のコントロールはすべて、状態の変化をWM_COMMANDで親ウィンドウに伝えますが、これは WM_HSCROLLかWM_VSCROLLを送ってきます。 ダイアログテンプレートには
SCROLLBAR IDSCR, 42, 97, 86, 8のように書きます。ソース中では初期化動作として
SetScrollRange(GetDlgItem(hDlg, IDSCR), SB_CTL, 0, 100, FALSE); SetScrollPos(GetDlgItem(hDlg, IDSCR), SB_CTL, 50, TRUE); level=50;メッセージ処理として
void OptionClass_OnHScroll(HWND hDlg, HWND hwndCtl, UINT code, int pos){ switch(code){ case SB_LINEUP: level--; break; case SB_LINEDOWN: level++; break; case SB_PAGEUP: level-=10; break; case SB_PAGEDOWN: level+=10; break; case SB_THUMBTRACK: case SB_THUMBPOSITION: level=pos; break; } if (level<0) level=0; if (level>100) level=100; SetScrollPos(GetDlgItem(hDlg, IDSCR), SB_CTL, level, TRUE); if (code!=SB_THUMBPOSITION) RedrawWindow(GetDlgItem(hDlg,IDSCR), NULL, NULL, RDW_FRAME|RDW_INVALIDATE/*|RDW_ALLCHILDREN*/); } 中略 case WM_HSCROLL: HANDLE_WM_HSCROLL(hDlg, wParam, lParam, OptionClass_OnHScroll); break;のように書きます。
ここで、HANDLE_WM_HSCROLLというのは、<windowsx.h>(注意:<windows.h>ではない)で 定義されたメッセージクラッカマクロです。実は、WM_HSCROLLというメッセージは、Win16とWin32で パラメータの意味が変更になってしまいました。それをソース共通に記述するためのマクロが メッセージクラッカです。(crack(割る)より。32ビットパラメータを16ビットに適切に分割) <windowsx.h>には、他にも便利なマクロが沢山入っています。
一つ上のページに戻る