
VC++6.0 SDIです。
CString型の変数に、コンボボックスのデータを所得し、
選択したコンボボックスの内容に応じて異なった処理をさせたいのですが、どうしたら良いでしょうか?
私は、下記コードで出来るかな??ってイメージしていたのですが・・。
下記コードを改造してなんとか・・・
という拘り無く、コンボボックスの内容によって違う処理をする分岐の一般的な方法が知りたいと思っています。
よろしくお願い致します。
CString A;
GetWindowText(A);
switch(A){
case '文字列1':{
処理
break;
}
case '文字列2':{
処理
break;
}
・
・
・
default :{
処理
break;
}
}

No.3ベストアンサー
- 回答日時:
#2です。
コンボボックスからいずれかのアイテムが選択された際、
その選択に呼応して処理を分岐させるのですよね。
サンプルとして提示した構造体の3番目のメンバは、
関数へのポインタです。
>int (*method)(void*);
#説明は割愛します。[関数へのポインタ]でweb検索どうぞ。
#[メンバ関数へのポインタ]とする必要があるかどうかは全体の設計次第
考え方は次のとおり。
それぞれの処理(捌き方、method)を、それぞれ関数にしてやることで
switchによる分岐自体を排除する。
提示した構造体の使い方ですが、
例えばですね、
[1] この構造体の配列を定義して、
[2] コンボボックスの初期化で、配列要素のcombo_item_index, item_textを用いて
CComboBox::InsertString()
[3] 選択された暁には、配列名[GetCurSel()].method(適当な引数へのポインタ)
以上。参考にしてくださいね。鵜呑みはだめよ。
このような方法があるのですね!
大変勉強になりました。
ddnp009さんありがとう御座いました。
ちなみに下記サイトを参考にしました。
http://www5b.biglobe.ne.jp/~kouta_y/c/c08.html

No.2
- 回答日時:
コンボボックスのアイテム(列挙されたテキスト)が決まっていて、
かつSortオプションも切るのであれば、GetCurSel()に依る方法がとれますよね。
この場合、値はintをとるのでswitchによる分岐が普通に可能です。
また、次のような仕掛けを用意しておけば、
希望する列挙位置に所定のテキストを載せられるはずですよね。
struct StringType
{
int combo_item_index;
CString item_text;
int (*method)(void*);
};
これによりパフォーマンスを維持しつつ、目的を達成できるでしょう。
他にも定石らしいのはあるかもしれませんが、
要はプログラマの工夫と経験とセンス次第。
この回答への補足
GetCurSel()を使って分岐することが出来ました。
ただ、この構造体の使い方がよくわかりません。
>struct StringType
>{
> int combo_item_index;
> CString item_text;
> int (*method)(void*);
>};
int combo_item_index;//コンボックスのインデックスの番号この値でswitch文の分岐をする。
CString item_text;//インデックス番号のコンボボックスのテキストを入れる変数。
int (*method)(void*);//??
今回は、コンボボックスのテキストデータは、選ぶために使用するだけで、分岐した先で実際の処理をさせるため必要ないのですが、勉強のために知っておきたいです。
ddnp009さんアドバイスありがとう御座います。
色々なパターンを経験できるように、
これからddnp009さんがアドバイスしてくださった方法で試してみます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
C言語 配列の長さの上限
-
複数の選択範囲の行番号を個別...
-
C# Listを使わずに2次元配列の...
-
配列を使わずに、変数名を動的...
-
ExcelVBAで質問です。離れた二...
-
配列を含む構造体の初期値について
-
C言語で特定列だけを抽出して配...
-
ヘッダーファイルからの取り込...
-
Redimした動的配列はEraseする...
-
VB.NETでテキストボックスをコ...
-
【速いブラインドタッチ】手を...
-
配列をEraseしてもメモリが開放...
-
プログラムが書けません。
-
テキストファイルから文字列を...
-
なぜ配列は0から始まるのです...
-
バリアント配列ってなんですか?
-
unsigned char の配列で途中で0...
-
画像処理
-
9枚の写真がA4 1枚に印刷できま...
-
構造体配列を引数とするDLL作成...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
C言語 配列の長さの上限
-
先頭アドレスとは何ですか?
-
C# Listを使わずに2次元配列の...
-
配列を使わずに、変数名を動的...
-
複数の選択範囲の行番号を個別...
-
配列で格納したものをmsgboxで...
-
【速いブラインドタッチ】手を...
-
C言語で特定列だけを抽出して配...
-
配列をEraseしてもメモリが開放...
-
配列を含む構造体の初期値について
-
C# 配列の変数宣言について。
-
テキストファイルから文字列を...
-
メモリの初期値
-
C++ vectorに配列をプッシュしたい
-
Redimした動的配列はEraseする...
-
VBで構造体の配列を関数に渡す...
-
【C言語】配列の中に配列を入れ...
-
ExcelVBAで質問です。離れた二...
-
Functionの戻り値を2次元配列...
-
ガウスの消去法のプログラム
おすすめ情報