CDialog上に配置したコントロールを配列で取得したい

[戻る]
KAZ [E-Mail] [HomePage] 2002/02/14(木) 09:57:19
現在ダイアログベースのプログラムを作っていますが。
ダイアログ上のコントロールを全てではないのですが、使用可にしたり不可にしたりした
いのです。C++Builder,delphi,VBなんかはControlsプロパティで取得できますがMFCでそ
のようなことは出来ないのでしょうか?

NGA 2002/02/14(木) 10:00:39
EnableWindow でできます。

NGA 2002/02/14(木) 10:09:45
もとい IsWindowEnabled です。

試~1 [E-Mail] 2002/02/14(木) 11:06:54
void C〜Dlg::OnButton1() 
{
  CWnd *pCancel = GetDlgItem (IDCANCEL);
  CWnd *pCtrl = GetTopWindow();
  do {
    if (pCtrl != pCancel) pCtrl->EnableWindow (FALSE);
  } while (pCtrl = pCtrl->GetNextWindow());
}

上記のコードは、ダイアログ上のボタンを押すと
キャンセルボタン以外のコントロールが無効になるという物です。
参考になるでしょうか?

NGA 2002/02/14(木) 11:19:13
なんだか何を聞かれているのかわからなくなってきましたので、整理します。

コントロールのウィンドウハンドルを取得する。   GetDlgItem
コントロールを使用可にしたり不可にしたり…。   EnableWindow
コントロールが有効か無効か(使用可か不可か)知る。 IsWindowEnabled

試~1 [E-Mail] 2002/02/14(木) 11:45:27
ん?全てのコントロールのウィンドウハンドルを配列で取得したいんですよね?

> コントロールのウィンドウハンドルを取得する。   GetDlgItem
> コントロールを使用可にしたり不可にしたり…。   EnableWindow
> コントロールが有効か無効か(使用可か不可か)知る。 IsWindowEnabled

追加として

最初のコントロールのウィンドウハンドルを取得 GetTopWindow
次のコントロールのウィンドウハンドルを取得  GetNextWindow

ですかね。

NGA 2002/02/14(木) 11:54:43
>ん?全てのコントロールのウィンドウハンドルを配列で取得したいんですよね?

>ダイアログ上のコントロールを全てではないのですが、使用可にしたり不可にしたりした
とありますから、全てではないのでは?

試~1 [E-Mail] 2002/02/14(木) 12:14:32
> とありますから、全てではないのでは?
ん〜〜、言葉のあやですね(^^;
サンプルではそのつもりで、キャンセルボタン以外になっています。

もし、取得したいコントロールのIDが分かっているのなら

int nCtrl[] = {
  IDC_EDIT1,
  IDC_EDIT2,
  IDC_BUTTON1,
};

等としておいて、

for (int i = 0; i < (sizeof (nCtrl) / sizeof (nCtrl[0])); i++) {
  GetDlgItem (nCtrl[i])->EnableWindow (FALSE);
}

みたいな感じですかね。

しかし、「Controlsプロパティ」と聞いて連想したのが
コントロールの総なめだったので...。

NGA 2002/02/14(木) 12:49:45
>ん〜〜、言葉のあやですね(^^;

そのとおりですね。
「CDialog上に配置したコントロールを配列で取得したい」のタイトルからすれば、
「何らかの配列を使ってハンドルを取得する」とも、
「複数のハンドルを配列に取得する」とも取れるように思います。
前者はこじつけですけど。

>しかし、「Controlsプロパティ」と聞いて連想したのが
>コントロールの総なめだったので...。

私はコントロール配列っぽいもの?かと連想しました。

まあ、必要な情報はでそろった感じがしますし、
あとはKAZさんの反応を待つといったところでしょうか。

KAZ [E-Mail] [HomePage] 2002/02/15(金) 18:48:12
こんな短期間に一生懸命考えてくださりありがとうございました。
>キャンセルボタン以外のコントロールが無効になるという物です
というやつでまさに完璧でした。これなら下位クラスを派生させてもIDやコントロールの
変数を配列で持つ必要もなくエレガントです。

KAZ [E-Mail] [HomePage] 2002/02/15(金) 18:52:58
[[解決]]
解決したというチェックを忘れていました。すいません。

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