ダイアログボックス内のボタンなどを動的に表示するには

[戻る]
imeu 2006/10/09(月) 23:52:44
ダイアログボックスで、メインフレーム内で入力された引数(vector)の要素数から、
ボタン、エディットコントロール、BMPアイコンなどを動的に表示するダイアログボック
スを作りたいのですが、どのように作成すればよいでしょうか。

具体的に、
要素数xなら、ボタン、エディットコントロールをx個ダイアログボックスに表示すると
いったものです。

今わかっている方法で、ダイアログエデェタにすべてのボタンを作成しておき、
引数によって、ボタン等を表示、非表示を行っていますが、これだとあまり効率的ではな
いです。

何かヒントになる内容、サイト場所でも結構です。ご教授お願いします。

開発環境:VC++ 2003.net (MFC)
OS: WinXP(SP2)

επιστημη 2006/10/10(火) 00:04:04
欲しい数だけnewとCreateを繰り返せばいい。

CButton* buttons = new CButton[欲しい数];
for ( int i = 0; i < 欲しい数; ++i ) {
  buttons[i].Create(.....);
}

PATIO 2006/10/10(火) 13:36:34
何を持って効率的でないといっているのかなんですが、
単純にメモリの使用効率の事を言われているんでしょうか?
確かに非表示のコントロールが多い場合は効率が悪いと言えば、
言えなくもなさそうですが。
この辺は考え方一つだと思うし、どの部分の性能を重視するのかにも
よるのではないでしょうか。
作成する上限がわかっていてそれが現実的に予め作成しておくことが
可能な数であれば、予め作成しておいた方が表示/非表示の切り替えだけで
済むのでスピードは速いと思います。ですが、非表示のコントロールに
割り当てられているメモリは無駄と言えなくもありません。
これに対してεπιστημηさんが書かれているように
その都度、必要な数だけ生成、ウインドウ表示を行う方法なら
無駄なメモリは使用しませんけれど、毎回、インスタンスの生成から
行う事になるので切り替えは重くなると思います。
但し、この重くなると言うのはPCのハードの性能にもよるでしょうから
一概に気になるほどの差が出るとは言えません。

しょっちゅう切り替えるのであれば、予め作成しておいた方が
きびきびした動きになると思いますし、起動時に決めたら後は対して変えないと
話なら必要な分だけ作成でも良いかも知れません。

注目すべき性能や動作環境によっても考え方は変わると思います。

imeu 2006/10/10(火) 14:49:01
[[解決]]
επιστημηさん、PATIOさん、ありがとうございます。
説明不足ですいません。
「効率的ではない」というのは、メモリ使用効率についてです。

PATIOさんのおっしゃるとおり、
new,Createで切り替えが遅くなることを考慮すべきなのかもしれません。
しかし、性能、動作環境は一般的なPCが対象ですので、あまり速度は重視していないと
思います。

επιστημηさんの方法を行ってみたところ、
特に気になる差はなく動作しました。

問題は解決しました。
ありがとうございました。

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