プロが教える店舗&オフィスのセキュリティ対策術

VC++6.0 SDIです。

CString型の変数に、コンボボックスのデータを所得し、
選択したコンボボックスの内容に応じて異なった処理をさせたいのですが、どうしたら良いでしょうか?

私は、下記コードで出来るかな??ってイメージしていたのですが・・。
下記コードを改造してなんとか・・・
という拘り無く、コンボボックスの内容によって違う処理をする分岐の一般的な方法が知りたいと思っています。
よろしくお願い致します。


CString A;
GetWindowText(A);
 switch(A){
 case '文字列1':{
 処理
 break;
 }
 case '文字列2':{
 処理
 break;
 }



 default :{
 処理
break;
}
}

A 回答 (3件)

#2です。



コンボボックスからいずれかのアイテムが選択された際、
その選択に呼応して処理を分岐させるのですよね。

サンプルとして提示した構造体の3番目のメンバは、
関数へのポインタです。
>int (*method)(void*);
#説明は割愛します。[関数へのポインタ]でweb検索どうぞ。
#[メンバ関数へのポインタ]とする必要があるかどうかは全体の設計次第

考え方は次のとおり。
それぞれの処理(捌き方、method)を、それぞれ関数にしてやることで
switchによる分岐自体を排除する。

提示した構造体の使い方ですが、
例えばですね、
[1] この構造体の配列を定義して、
[2] コンボボックスの初期化で、配列要素のcombo_item_index, item_textを用いて
  CComboBox::InsertString()
[3] 選択された暁には、配列名[GetCurSel()].method(適当な引数へのポインタ)

以上。参考にしてくださいね。鵜呑みはだめよ。
    • good
    • 0
この回答へのお礼

このような方法があるのですね!
大変勉強になりました。
ddnp009さんありがとう御座いました。

ちなみに下記サイトを参考にしました。
http://www5b.biglobe.ne.jp/~kouta_y/c/c08.html

お礼日時:2006/09/26 19:27

コンボボックスのアイテム(列挙されたテキスト)が決まっていて、


かつ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*);//??
今回は、コンボボックスのテキストデータは、選ぶために使用するだけで、分岐した先で実際の処理をさせるため必要ないのですが、勉強のために知っておきたいです。

補足日時:2006/09/26 14:52
    • good
    • 0
この回答へのお礼

ddnp009さんアドバイスありがとう御座います。
色々なパターンを経験できるように、
これからddnp009さんがアドバイスしてくださった方法で試してみます。

お礼日時:2006/09/26 14:19

switchでは


文字列の処理が出来ないはずです。

ですので、比較する文字列が多い場合、
あらかじめ配列に入れておき、
ループで比較、配列のインデックスで
分岐(switch)が一般的かと思います。

比較する文字列が少ない場合、
if文になりますね。
    • good
    • 0
この回答へのお礼

driverIIさんすばやい回答ありがとう御座いました。
if文でコンパイル通ることが出来ました。

お礼日時:2006/09/26 14:17

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