CDialog上に配置したコントロールを配列で取得したい – プログラミング – Home

CDialog上に配置したコントロール...
 
通知
すべてクリア

[解決済] CDialog上に配置したコントロールを配列で取得したい


KAZ
 KAZ
(@KAZ)
ゲスト
結合: 23年前
投稿: 3
Topic starter  

現在ダイアログベースのプログラムを作っていますが。
ダイアログ上のコントロールを全てではないのですが、使用可にしたり不可にしたりした
いのです。C++Builder,delphi,VBなんかはControlsプロパティで取得できますがMFCでそ
のようなことは出来ないのでしょうか?


引用未解決
トピックタグ
NGA
 NGA
(@NGA)
ゲスト
結合: 23年前
投稿: 98
 

EnableWindow でできます。


返信引用
NGA
 NGA
(@NGA)
ゲスト
結合: 23年前
投稿: 98
 

もとい IsWindowEnabled です。


返信引用
試~1
 試~1
(@試~1)
ゲスト
結合: 23年前
投稿: 16
 

void C~Dlg::OnButton1()
{
  CWnd *pCancel = GetDlgItem (IDCANCEL);
  CWnd *pCtrl = GetTopWindow();
  do {
    if (pCtrl != pCancel) pCtrl->EnableWindow (FALSE);
  } while (pCtrl = pCtrl->GetNextWindow());
}

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


返信引用
NGA
 NGA
(@NGA)
ゲスト
結合: 23年前
投稿: 98
 

なんだか何を聞かれているのかわからなくなってきましたので、整理します。

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


返信引用
試~1
 試~1
(@試~1)
ゲスト
結合: 23年前
投稿: 16
 

ん?全てのコントロールのウィンドウハンドルを配列で取得したいんですよね?

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

追加として

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

ですかね。


返信引用
NGA
 NGA
(@NGA)
ゲスト
結合: 23年前
投稿: 98
 

>ん?全てのコントロールのウィンドウハンドルを配列で取得したいんですよね?

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


返信引用
試~1
 試~1
(@試~1)
ゲスト
結合: 23年前
投稿: 16
 

> とありますから、全てではないのでは?
ん~~、言葉のあやですね(^^;
サンプルではそのつもりで、キャンセルボタン以外になっています。

もし、取得したいコントロールの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
 NGA
(@NGA)
ゲスト
結合: 23年前
投稿: 98
 

>ん~~、言葉のあやですね(^^;

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

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

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

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


返信引用
KAZ
 KAZ
(@KAZ)
ゲスト
結合: 23年前
投稿: 3
Topic starter  

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


返信引用
KAZ
 KAZ
(@KAZ)
ゲスト
結合: 23年前
投稿: 3
Topic starter  

解決したというチェックを忘れていました。すいません。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました