無理だとは思うのですが、よろしくお願いします。
環境はVS10 MFCです。
リソースIDを配列で扱うことは不可能なのでしょうか。
IDC_BUTTON[0]
IDC_BUTTON[1]
IDC_BUTTON[2]
....
IDC_BUTTON[100]
とか・・・・無理ですよね。
> 無理ですよね。
なぜ?
お世話になります。
できないものと思い込んでいて、試してもいませんでした。
ありがとう御座います、試してみます。
よろしくですリソースエディタで
チェックボタンのリソースIDを
IDC_CHECK1
から
IDC_CHECK[1]
と変更しようとすると、識別子IDC_CHECK[1]に無効な文字が含まれています。
このようになるのですがどのようにして配列のように指定すれば良いのでしょうか?
ところでリソースIDを格納する配列作りましたか?
そのナカミに適切なリソースIDをセットしましたか?
お世話になります。
>ところでリソースIDを格納する配列作りましたか?
申し訳ないのですが、作っていません、といいますか、やり方がよくわかりません
参考になるサイトとか、ご存知でしたら教えていただけませんか。
>>ところでリソースIDを格納する配列作りましたか?
> 申し訳ないのですが、作っていません、といいますか、やり方がよくわかりません
WORD id[N];
id[0] = IDC_XXX;
id[1] = IDC_YYY;
...
てやるダケちゃうかと。
>よろしくですリソースエディタで
>チェックボタンのリソースIDを
と、あるから、
火星人さんが現在やりたいといってる内容は
実質、.rcファイルにて、通常、定義されたIDにて定数でかくところを
配列でリソースを設定したいということ
で、
それは無理だと思います (RC2014エラーでるはず)
ただ、今やろうとしてることではなく、本当の目的は別にあって
たとえば、処理を書くときに配列を使いたいということなのだと思うが…
このさきは本人待ち
resource.hに定義されたIDを以下のように修正する。
#define IDC_BUTTON_BASE 1000
#define IDC_BUTTON1 IDC_BUTTON_BASE + 1
#define IDC_BUTTON2 IDC_BUTTON_BASE + 2
#define IDC_BUTTON3 IDC_BUTTON_BASE + 3
...
#define IDC_BUTTON100 IDC_BUTTON_BASE + 100
こうするとIDC_BUTTON_BASE+Nと書くことでIDC_BUTTON[N]のように扱える。
ただしリソースエディタを使うとresource.hに定義されているIDは
定数に戻ってしまうので注意が必要だ。
本当に配列で扱いたいのはリソースIDではなく、処理の対象じゃありませんか?
>IDC_BUTTON[0]
>IDC_BUTTON[1]
>IDC_BUTTON[2]
>....
と言っていることからして、ボタン配列を使いたいのでは?
であるなら、以下のコードのほうが簡単です。
class CXXXDlg : public CDialog
{
CButton m_Button[4];
(以下略)
};
void CXXXDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
DDX_Control(pDX, IDC_BUTTON1, m_Button[0]);
DDX_Control(pDX, IDC_BUTTON2, m_Button[1]);
DDX_Control(pDX, IDC_BUTTON3, m_Button[2]);
DDX_Control(pDX, IDC_BUTTON4, m_Button[3]);
}
これなら、IDC_BUTTON1 ~ IDC_BUTTON4 のリソースIDが連番である必要性すら
ありません。
あまり凝ったことはしたくないからresource.hを
IDC_BUTTON1 1000
IDC_BUTTON2 1001
…
IDC_BUTTON200 1199
IDC_CHECK1 1500
…
ってやってるよ
エクセルで連番処理やって後でテキストエディタなりで開いてDefine書いたり
余計な文字消したりすれば数千まで決め打ちしても時間もかからん
リソースエディタでコントロール置いてデフォのIDが振られれば
同系コントロールは内部的にはほぼ必ず連番になるから配列にしたいとも思わない
何が理由で本当は何を配列で扱いたいかが分からないのでなんともいえませんけど
みなさん大変お世話になります。
subaru さん
>こうするとIDC_BUTTON_BASE+Nと書くことでIDC_BUTTON[N]のように扱える。
おかげさまでうまくいきました。
bun さん
>本当に配列で扱いたいのはリソースIDではなく、処理の対象じゃありませんか?
その両方です。
ryo さん
てんてくさん
>何が理由で本当は何を配列で扱いたいかが分からないのでなんともいえませんけど
目的は20も30もあるエデットボックスなどを初期化したり、同じ処理を実行する際
同じコードをリソースのID名がたかだか、ひとつや、ふたつ異なるために、何十行も
あるのはカッコ悪いと思った次第です。