現在ラジオボタンを10個設定しています。
他の設定項目に応じて、有効/無効の設定をしようと思ってます。
有効/無効の処理をする際に、わざわざ
GetDlgItem(IDC_RADIO1)->EnableWindow(FALSE);
GetDlgItem(IDC_RADIO2)->EnableWindow(FALSE);
・・・(以下略)
と書きたくないので、ClassWizardで変数を割り当てようと
思ったのですが、現在グループ化している為にClassWizard上では
一番最初のコントロールIDしか表示されていません。
int型の変数(ラジオボタングループ型転送)だとUpdateData()で
現在の設定されてる番号のやりとりは出来ますが、有効無効の設定は
出来ませんよね?
CButtonメンバにマッピングすると、グループの先頭のみしか制御
出来ないと思うのですが・・・。
例えば、m_Radio[xxx].EnableWindow(TRUE);
なんて簡単かつスマートにやる方法ないでしょうか?
環境はVC6++です。
私はリソースIDを連続的に割り当てて、for文を使ってGetDlgItemする方法を使ったりしてま
す。
たとえば、、
IDC_RADIO1からIDC_RADIO5までのIDを101から105に割り当てて、
for( int id = IDC_RADIO1; id <= IDC_RADIO5; id++ )
GetDlgItem(id)->EnableWindow();
みたいな。
Blueさん、いろはさんありがとうございます。
なるほど、自動的に・・・と言うかVC上で、
お手軽に設定は出来ないんですね。
お二人の回答を参考にソース書いて見ます。有難うございました。
私はVC++のリソースIDを、数値としては信用していないので、
UINT *p, radiobuttons[] = { IDC_RADIO1, IDC_RADIO2, ..., IDC_RADIOn, 0 };
for( p=radiobuttons; *p; p++ )
{
GetDlgItem(*p)->EnableWindow(FALSE);
}
という風にしています。
一人で作っているならともかく、複数人でリソースをいじって、マージとかを繰り返して
いると、リソースIDの連続性なんて信用できません。そんなわけで「ON_COMMAND_RANGE」
なども不可です。
一人で作っていてもリソースエディタを弄っていると、番号がおかしくなる場合が
あるようです(VC++6.0)。そのため、私もtibさんのようなやり方で行なっています。
# 一人だったらいっそ、resource.hの値を書き換えるってこともできますが。
グループの先頭を処理後、GW_HWNDNEXT を取得して、そのウインドウのウインドウスタイ
ルとして、BS_AUTORADIOBUTTON があり、且つ WS_GROUP が無いものが続く限り処理する
ようにすれば、2つ目以降のリソースIDは知らなくても汎用的に処理できます。