dポイントプレゼントキャンペーン実施中!

MFCで二次元配列のCEditコントロールを作成しようと
思いましたがうまくできません。
どこがいけないのでしょうか?
void CProject2View::OnBnClickedButton1()
{
CEdit **ed;
ed=new CEdit*[10];
for(int i=0;i<10;i++)
{
ed[i]=new CEdit[10];
for(int j=0;j<10;j++)
{
ed[i][j].Create(ES_LEFT,CRect(60*i, 40*j, 60, 40),this,5588+10*i+j);
}
}
}

A 回答 (3件)

>では、ないのですか?



はい。
newに対するdeleteは呼ばれてますが、
CEdit::Create()に対するDestroyWindowが呼ばれていません。

>new演算子を使用して、
>テキストコントロールを追加した場合、
>テキストの内容が変更されたときに、
>メッセージボックスが表示されるようにするにはどうすればいいですか?

OnCommand()のメッセージハンドラを処理する。

もしくは、CEditをそのまま使うのではなく、CEditの派生クラスを定義して使います。で、メッセージハンドラを定義すればできます。

この回答への補足

>>OnCommand()のメッセージハンドラを処理する。

>>もしくは、CEditをそのまま使うのではなく、
>>CEditの派生クラスを定義して使います。
>>で、メッセージハンドラを定義すればできます。

よくわかりませんでした。
すみません。
あちこちHPもまわりましたが、
理解できませんでした。

>>newに対するdeleteは呼ばれてますが、
>>CEdit::Create()に対するDestroyWindowが
>>呼ばれていません。

よくわかりました。
ありがとうございます。

補足日時:2004/05/11 06:17
    • good
    • 0
この回答へのお礼

MFCのことをもう少し理解してから改めて質問させていただきます。
ありがとうございました。

お礼日時:2004/05/11 06:22

>あっていると思います。



って言われてもよくわからないのですが・・・

補足に書かれたコードで動くようになったってことですか?

で、どうすればいいのでしょうか?


ちなみにこのソースをぱっと見る限りは、
エディットの破棄が行われていない、ってのが抜けてますね。
あとは
static bol=true;ってありますけど、
正しくは
static bool bol=true;
ってとこですかね?

この回答への補足

エディットの破棄が行われていない
というのは、
for(int i=0;i<10;i++)
{
delete[] cd[i];
}
delete[] cd;
bol=true;
}
では、ないのですか?
それと、
new演算子を使用して、
テキストコントロールを追加した場合、
テキストの内容が変更されたときに、
メッセージボックスが表示されるようにするにはどうすればいいですか?

補足日時:2004/05/10 17:48
    • good
    • 0

>思いましたがうまくできません。



どのようにうまくいかないんですか?
1つのときは作成できるのですか?
落ちるんですか?
表示されないんですか?
Createの戻り値とか調べましたか?

#ちなみにこれだと2次元配列じゃないんですけど。
似てるけど違います。CEditの配列を要素に持つ1次元配列なんです。

この回答への補足

回答ありがとうございました。
すみません、少しぼけていました。
正しくは、
CEdit **cd;
void CProject2View::OnBnClickedButton1()
{
static bol=true;
char str[100][12];
if(bol)
{
cd=new CEdit*[10];
for(int i=0;i<10;i++)
{
cd[i]=new CEdit[10];
for(int j=0;j<10;j++)
{
cd[i][j].Create(WS_CHILD|WS_VISIBLE|ES_LEFT,CRect(i*45,j*30,i*45+40,j*30+25),this,10*i+j);
}
}
ransu(str);
for(int i=0;i<10;i++)
{
for(int j=0;j<10;j++)
{
cd[i][j].SetWindowText(str[i*10+j]);
}
}
bol=false;
}
else
{
for(int i=0;i<10;i++)
{
delete[] cd[i];
}
delete[] cd;
bol=true;
}
}
でした。
あっていると思います。

補足日時:2004/05/10 12:56
    • good
    • 0

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