電子書籍の厳選無料作品が豊富!

プログラム初心者です。
よろしくお願いします!

現在私は、visualstudio6.0のソフトで、リソース機能を持ちいてある機能の実現に向けてプログラムを書いています。

そこで質問なのですが、
たとえばリソース機能を用いてダイアログボックスにエディットボックスを20つ設けますと、それぞれIDC_EDIT1~IDC_EDIT20と計20個IDができますよね?

その20個を私の書いているソースの中にそれぞれ違う値をいれたいので、
イメージでは
for(i=1;i<21;i++){
IDC_EDIT[i]
}
というようにしたいのですが、IDC_EDIT[i]ではやはりコンパイルエラーが出てしまいます。ソースをずらずら長く書けばできないこともないのですが、大変な量になるので簡単にできないだろうかと検討中です。
この場合、ソースをコンパクトにすることは可能でしょうか?ご教授よろしくお願い致します。

A 回答 (4件)

テーブルにすればどうですか?


int idc_table[]={
IDC_EDIT1,
IDC_EDIT2,



};

for(i=0;i<20;i++){
HWND hWnd = GetDlgItem( hDlg , idc_table[i] );
SetWindowText( hWnd , "あああ" );
}

あるいはリソースは使わず
CreateWindowでEditボックスを作るという方法もあります。
    • good
    • 0
この回答へのお礼

テーブルにすることでたった今できることができました!質問内容が説明不足であったのに、的確なアドバイスを頂き本当に感謝しております!
ありがとうございました!

お礼日時:2006/07/03 18:12

MFCだと勝手に仮定してお話します。


ます、正攻法なのは#3さんがおっしゃっているIDC_EDIT1~IDC_EDIT20を連番にする方法です。
クラスウィザードを使わなくてもプログラムが組めるのであれば
ややイレギュラーな方法もあります。
まずダイアログクラスのメンバ変数として配列を用意します。

int m_nValue[20]; //あるいはCString m_szValue[20];

次にソースファイルのDoDataExchange内で

void CHogeDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CHogeDlg)
DDX_Text(pDX, IDC_EDIT1, m_nValue[0]);
DDX_Text(pDX, IDC_EDIT2, m_nValue[1]);
(中略)
DDX_Text(pDX, IDC_EDIT20, m_nValue[19]);
//}}AFX_DATA_MAP
}

とします。
すると、UpdateData()とm_nValue[]の操作でエディットボックスの値の制御ができます(代わりにこのクラスをクラスウィザードで使うことができなくなりますが)。
    • good
    • 0
この回答へのお礼

ご教授ありがとうございます!
実は私はMFCを使っていなくて。。
言葉足らずで本当に申し訳ございません!
ですが、せっかくFAYさんからお返事を頂いたので、MFCを勉強した時には参考にさせていただきます。
ありがとうございました。

お礼日時:2006/07/03 18:15

"違う値を入れる"というのが意味不明。



DDXを用いてリンクされた変数の値をそれぞれ用意する、
ということであれば、、

リソースIDは確かresource.hで#defineされており、
実際はunsigned int の値を取るはずです。

従ってIDC_EDIT1~IDC_EDIT20が連番になっていれば、
ループで何とかなるでしょう。

連番になっていなければ、値設定用のマップでも作って対処するのが良いと思いますよ
    • good
    • 0
この回答へのお礼

申し訳ございません!
知識不足のため言葉たいへん足らずでした。
頑張って勉強して早く熟練者になれるようにがんばります。ありがとうございました。

お礼日時:2006/07/03 18:14

IDC_EDIT1 に設定される値は基本的にはシステムで決定されますが、


その値自体は resource.h (だっけかな)に書かれています。

なのでこのファイルを直接編集すると任意の値を設定できますよ。

※ちなみに「IDC_EDIT1」というのはそれ自体でDEFINEされちゃってるので、
 「IDC_EDIT[i]」などという書き方は出来ないのではないかと・・
 
    • good
    • 0
この回答へのお礼

迅速なお返事ありがとうございます。
たった今、sha-girlさんの方法でやることができました!ですが、こんなに早くお返事をしていただき本当にうれしいです。アドバイスありがとうございました!

お礼日時:2006/07/03 18:11

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!