MFC コンボボックス切り替えによるボタン表示/非表示、活性/非活性について

[戻る]
べんく 2011/05/29(日) 19:59:28
VC++ VisualStudio2008
WIN7

はじめまして。
MFC使用しています。
コンボボックスの選択でボタン制御を以下のように
やりたいのですが、うまくいきません。

※ボタン1、ボタン2、ボタン3があります。

・コンボボックスでテスト1を選択
 ボタン1:表示
 ボタン2:表示
 ボタン3:表示

・コンボボックスでテスト2を選択
 ボタン1:非表示
 ボタン2:非活性
 ボタン3:表示

・コンボボックスでテスト3を選択
 ボタン1:表示
 ボタン2:活性
 ボタン3:非表示

上記のようにコンボボックスを切り替えるたびに
ボタン制御をしたいと思い、以下のように作りました。

switch(a){
 case 0:
  pBt1->EnableWindow(TRUE);
  pBt2->EnableWindow(TRUE);
  pBt3->EnableWindow(TRUE);
  break;
case 1:
  pBt1->ShowWindow(FALSE);
  pBt2->EnableWindow(FALSE);
  pBt3->EnableWindow(TRUE);
  break;
case 2:
  pBt1->ShowWindow(TRUE);
  pBt2->EnableWindow(TRUE);
  pBt3->ShowWindow(FALSE);
  break;
 default:
  break;
}

コンボボックス3からコンボボックス1に切り替えると
ボタン3(pBt3)が非表示のままになってしまいます。。

非表示になったボタンは一度表示させなくてはダメなのでしょうか?

恐れ入りますがどなたかご教授お願い致します。

しま 2011/05/29(日) 21:02:42
>コンボボックス3からコンボボックス1に切り替えると
>ボタン3(pBt3)が非表示のままになってしまいます。。
>
>非表示になったボタンは一度表示させなくてはダメなのでしょうか?

そうです。

ところで、質問する前に何故試してみようという気にならなかったのか
ということの方が、私には不思議です

みい 2011/05/30(月) 09:22:41
ShowWindowの引数はTRUE/FALSEじゃありませんよー。
ヘルプ見て下さいね。

bun 2011/05/30(月) 16:58:58
「試してみた」けど、それでも疑問ということかな?

> 非表示になったボタンは一度表示させなくてはダメなのでしょうか?
ダメです。

そんなわけで、将来の仕様変更やそれに伴う不具合発生を考慮するなら、
ShowWindow(), EnableWindow()を常にセットで呼び出すのがお勧め。

PATIO 2011/05/31(火) 20:10:27
それぞれの関数の機能についてMSDN等できちんと確認しましょう。
それぞれの関数がどんな機能を持っているのか説明があるはずです。

基本的に書かれている以上の事をしたりしないので
それぞれの関数の役割を理解して使い分けたり、組み合わせて使ったり
する必要があると思います。
既に皆さんが書かれている通り、MSDN等で関数の機能を確認しつつ、
実際にテストプログラム上で動作を確認してみると良いと思います。

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