ラジオボタンの操作について・・・

[戻る]
ぷりっつ 2005/08/22(月) 16:35:21
現在ラジオボタンを10個設定しています。
他の設定項目に応じて、有効/無効の設定をしようと思ってます。

有効/無効の処理をする際に、わざわざ

GetDlgItem(IDC_RADIO1)->EnableWindow(FALSE);
GetDlgItem(IDC_RADIO2)->EnableWindow(FALSE);
・・・(以下略)

と書きたくないので、ClassWizardで変数を割り当てようと
思ったのですが、現在グループ化している為にClassWizard上では
一番最初のコントロールIDしか表示されていません。

int型の変数(ラジオボタングループ型転送)だとUpdateData()で
現在の設定されてる番号のやりとりは出来ますが、有効無効の設定は
出来ませんよね?
CButtonメンバにマッピングすると、グループの先頭のみしか制御
出来ないと思うのですが・・・。
例えば、m_Radio[xxx].EnableWindow(TRUE);
なんて簡単かつスマートにやる方法ないでしょうか?

環境はVC6++です。

Blue 2005/08/22(月) 16:40:34
コントロールを配列にしてしまうとか。
http://www.asahi-net.or.jp/~uq7k-hrsm/vcdev2fr.htm#39

いろは 2005/08/22(月) 16:58:50
私はリソースIDを連続的に割り当てて、for文を使ってGetDlgItemする方法を使ったりしてま
す。

たとえば、、
IDC_RADIO1からIDC_RADIO5までのIDを101から105に割り当てて、
for( int id = IDC_RADIO1; id <= IDC_RADIO5; id++ )
  GetDlgItem(id)->EnableWindow();
みたいな。

ぷりっつ 2005/08/22(月) 17:13:44
[[解決]]
Blueさん、いろはさんありがとうございます。

なるほど、自動的に・・・と言うかVC上で、
お手軽に設定は出来ないんですね。
お二人の回答を参考にソース書いて見ます。有難うございました。

tib 2005/08/22(月) 19:23:46
私は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」
なども不可です。

RAPT 2005/08/22(月) 21:55:16
一人で作っていてもリソースエディタを弄っていると、番号がおかしくなる場合が
あるようです(VC++6.0)。そのため、私もtibさんのようなやり方で行なっています。
# 一人だったらいっそ、resource.hの値を書き換えるってこともできますが。

のり〜 2005/08/22(月) 23:22:13
グループの先頭を処理後、GW_HWNDNEXT を取得して、そのウインドウのウインドウスタイ
ルとして、BS_AUTORADIOBUTTON があり、且つ WS_GROUP が無いものが続く限り処理する
ようにすれば、2つ目以降のリソースIDは知らなくても汎用的に処理できます。

古いスレッドには追加発言できません。