リソースIDを配列で扱うことはできませんか? – プログラミング – Home

リソースIDを配列で扱うことはできませ...
 
通知
すべてクリア

[解決済] リソースIDを配列で扱うことはできませんか?


火星人
 火星人
(@火星人)
ゲスト
結合: 13年前
投稿: 5
Topic starter  

無理だとは思うのですが、よろしくお願いします。
環境はVS10 MFCです。
リソースIDを配列で扱うことは不可能なのでしょうか。
IDC_BUTTON[0]
IDC_BUTTON[1]
IDC_BUTTON[2]
....
IDC_BUTTON[100]
とか・・・・無理ですよね。


引用未解決
トピックタグ
επιστημη
 επιστημη
(@επιστημη)
ゲスト
結合: 15年前
投稿: 64
 

> 無理ですよね。

なぜ?


返信引用
火星人
 火星人
(@火星人)
ゲスト
結合: 13年前
投稿: 5
Topic starter  

お世話になります。
できないものと思い込んでいて、試してもいませんでした。
ありがとう御座います、試してみます。


返信引用
火星人
 火星人
(@火星人)
ゲスト
結合: 13年前
投稿: 5
Topic starter  

よろしくですリソースエディタで
チェックボタンのリソースIDを
IDC_CHECK1
から
IDC_CHECK[1]
と変更しようとすると、識別子IDC_CHECK[1]に無効な文字が含まれています。
このようになるのですがどのようにして配列のように指定すれば良いのでしょうか?


返信引用
επιστημη
 επιστημη
(@επιστημη)
ゲスト
結合: 15年前
投稿: 64
 

ところでリソースIDを格納する配列作りましたか?
そのナカミに適切なリソースIDをセットしましたか?


返信引用
火星人
 火星人
(@火星人)
ゲスト
結合: 13年前
投稿: 5
Topic starter  

お世話になります。
>ところでリソースIDを格納する配列作りましたか?
申し訳ないのですが、作っていません、といいますか、やり方がよくわかりません
参考になるサイトとか、ご存知でしたら教えていただけませんか。


返信引用
επιστημη
 επιστημη
(@επιστημη)
ゲスト
結合: 15年前
投稿: 64
 

>>ところでリソースIDを格納する配列作りましたか?
> 申し訳ないのですが、作っていません、といいますか、やり方がよくわかりません

WORD id[N];
id[0] = IDC_XXX;
id[1] = IDC_YYY;
...

てやるダケちゃうかと。


返信引用
ryo
 ryo
(@ryo)
ゲスト
結合: 23年前
投稿: 252
 

>よろしくですリソースエディタで
>チェックボタンのリソースIDを
と、あるから、
火星人さんが現在やりたいといってる内容は
実質、.rcファイルにて、通常、定義されたIDにて定数でかくところを
配列でリソースを設定したいということ
で、
それは無理だと思います (RC2014エラーでるはず)

ただ、今やろうとしてることではなく、本当の目的は別にあって
たとえば、処理を書くときに配列を使いたいということなのだと思うが…
このさきは本人待ち


返信引用
subaru
 subaru
(@subaru)
ゲスト
結合: 19年前
投稿: 381
 

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は
定数に戻ってしまうので注意が必要だ。


返信引用
bun
 bun
(@bun)
ゲスト
結合: 24年前
投稿: 761
 

本当に配列で扱いたいのはリソース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が連番である必要性すら
ありません。


返信引用
てんてく
 てんてく
(@てんてく)
ゲスト
結合: 20年前
投稿: 92
 

あまり凝ったことはしたくないからresource.hを
IDC_BUTTON1 1000
IDC_BUTTON2 1001

IDC_BUTTON200 1199

IDC_CHECK1 1500

ってやってるよ
エクセルで連番処理やって後でテキストエディタなりで開いてDefine書いたり
余計な文字消したりすれば数千まで決め打ちしても時間もかからん
リソースエディタでコントロール置いてデフォのIDが振られれば
同系コントロールは内部的にはほぼ必ず連番になるから配列にしたいとも思わない

何が理由で本当は何を配列で扱いたいかが分からないのでなんともいえませんけど


返信引用
火星人
 火星人
(@火星人)
ゲスト
結合: 13年前
投稿: 5
Topic starter  

みなさん大変お世話になります。

subaru さん
>こうするとIDC_BUTTON_BASE+Nと書くことでIDC_BUTTON[N]のように扱える。
おかげさまでうまくいきました。
bun さん
>本当に配列で扱いたいのはリソースIDではなく、処理の対象じゃありませんか?
その両方です。
ryo さん
てんてくさん
>何が理由で本当は何を配列で扱いたいかが分からないのでなんともいえませんけど
目的は20も30もあるエデットボックスなどを初期化したり、同じ処理を実行する際
同じコードをリソースのID名がたかだか、ひとつや、ふたつ異なるために、何十行も
あるのはカッコ悪いと思った次第です。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました