• 締切済み

MFC ダイアログ上のID取得について

VC++6.0 MFC ダイアログベースで開発しています。 リソースエディタで配置したダイアログ上にある全てのコントロール(ボタン、テキスト等)IDを取得する方法はありませんか? よろしくお願いします。

みんなの回答

  • Oh-Orange
  • ベストアンサー率63% (854/1345)
回答No.3

★『EnumChildWindows』関数で子ウインドウの列挙(カウント)が出来ます。 ・この『EnumChildWindows』関数は列挙用のコールバック関数を使いますのでご自分で定義します。  そのコールバック関数の中で LPARAM 引数で指定されたカウント変数をインクリメントします。 ・以上。おわり。 ●呼び出し(子ウインドウのカウント) DWORD dwGlobalCount = 0; EnumChildWindows( hWnd, EnumChildProc, (LPARAM)&dwGlobalCount ); dwGlobalCount ←ここに子ウインドウの個数が入っている ●コールバック関数 BOOL CALLBACK EnumChildProc( HWND hWnd, LPARAM lParam ) {  *((LPDWORD)lParam) += 1;  return( TRUE ); } ●プロトタイプ宣言 BOOL EnumChildWindows(  HWND hWndParent,        // 親ウィンドウのハンドル  WNDENUMPROC lpEnumFunc, // コールバック関数へのポインタ  LPARAM lParam          // アプリケーション定義の値 ); BOOL CALLBACK EnumChildProc(  HWND hwnd,    // 子ウィンドウのハンドル  LPARAM lParam // アプリケーション定義の値 ); リンク: ・http://wisdom.sakura.ne.jp/system/winapi/win32/win142.html→『ウィンドウの列挙』 ・http://support.microsoft.com/kb/183009/ja→『WIN32 API を使用しているウィンドウを列挙する方法』 関数: ・http://msdn.microsoft.com/library/ja/default.asp?url=/library/ja/jpwinui/html/_win32_enumchildwindows.asp→『EnumChildWindows』 ・http://msdn.microsoft.com/library/ja/jpwinui/html/_win32_enumchildproc.asp→『EnumChildProc』

  • yukimican
  • ベストアンサー率70% (112/159)
回答No.2

Win32APIなら、 ・EnumChildWindows() または ・GetWindow()で再帰処理 を使えばできそうな気がします。 調べていませんが、MFCでもCWndのメンバ関数で同じようなのがあるはず。

参考URL:
http://www.winapi-database.com/category.html
  • Oh-Orange
  • ベストアンサー率63% (854/1345)
回答No.1

★『GetDlgCtrlID』関数で ID 番号を取得できます。 int GetDlgCtrlID(  HWND hwndCtl // コントロールのハンドル ); ・MFC の場合は『pWnd->GetDlgCtrlID()』で良いかと思います。 ・以上。おわり。

参考URL:
http://msdn.microsoft.com/library/ja/default.asp?url=/library/ja/jpwinui/html/_win32_getdlgctrlid.asp
aki2007
質問者

補足

ありがとうございます。 回答をいただいた方法でIDを取得できると思いますが、 ダイアログが自分自身に所属しているIDはどれだけあるのか? という事を処理したいと思っています。 何か良い方法はありませんか?

関連するQ&A

  • MFC・ダイアログベースで、ダイアログの変更内容が反映されない・・・

    初めて質問させていただきます。よろしくお願いします。 当方、VisualStdio2005内のC++2005で、 ダイアログベースにてツールを開発していました。 ある日、ダイアログ上に多くのEditコントロールを作成(追加)することになり、 ダイアログリソースをVC内のリソースエディタにて、 テキスト形式でコントロールを追加していきました。 そのときは、テキストでの変更内容がダイアログにも反映されていたのですが、 その後はダイアログにツールボックスでのコントロールの追加やサイズ変更など、 見た目には反映されてもビルド後に反映されなくなってしまいました。 クリーン後のリビルドでも、問題は解決しません。 原因と対策をご存知の方、いらっしゃいましたらご教授いただけませんでしょうか。 よろしくお願いします。

  • VC++のダイアログベースアプリケーションのボタンについて

    開発環境:WinXP(Home) + Visual C++6.0 Enterprise こんにちは。VC++にてダイアログベースのアプリケーションを開発しております。 VC++に関しては数年ぶりなのですっかり忘れておりまして、入門書から読んでおります。プログラミング歴自体は15年程度になります。 ダイアログベースのアプリケーションのスケルトンを作って、すぐに実行させると、一番下にOK,キャンセル,適用,ヘルプというボタンが出ます。 これらのボタンをすべて消したいのですが、どうしたらいいのでしょうか? リソースを見てもないので、困っております。 どなたかご教授お願い致します。

  • MFCでデータベースを

    はじめまして。 VC++の初心者なのですが、MFCで開発を行おうとしております。そこで、MFCでのデータベースの扱い方をおしえていただきたいのです。 MFCのダイアログベースで開発をしているのですが、そこからデータベースを読みに行ったりは可能なのでしょうか。 よいサイト等あれば教えていただけないでしょうか。よろしくお願いいたします。

  • 子ダイアログのデータを親ダイアログで取得するには

    VC6.0にてMFCでダイアログベースアプリケーションを作成しています。 親ダイアログ(TestDlg.cpp)のメニューを選択すると、子ダイアログ(SetDlg.cpp)が開き、テキストボックスに文字を入力し、ボタン押下によりテキストボックスの入力数字を確定(グローバル変数(igStatu)に代入)しています。 子ウインドウで入力確定したデータを、親ダイアログにて使用したいのですが、データが受け渡されずに、親ダイアログ側にデータが入りません。 どのようにしたら、子ダイアログで設定したデータを親ダイアログで取得することができるのでしょうか? C++、MFCともに全然わかっていませんがお願いします。 グローバル変数は、TestDlg.cpp、SetDlg.cppがインクルードしているTest.h内にstatic宣言しています。 static宣言しないとリンクエラー2005になってしまいます。

  • MFC ボタンのEnableについて

    はじめまして。 質問させてください。 VC++ 2005 MFCで開発しております。 DLGにボタンを配置して ボタン押下後自身のEnableをきります。 するとタブがダイアログ自体も含め どこにも当たらずタブキーが効きません。 OnOk, OnCancelで処理させたいのですが 当然メッセージを取得できません。 ダイアログのアクティブを一度切り替えるとなおります。 解決方法としては ボタン押下でEnableをきった後 ダイアログにフォーカスを当てると正常に動きます。 This->SetForcus(); これはMFCの仕様なのでしょうか? ボタン押下後自身のEnableをきることはよく行う動きだと思いますが。 以上になります。 お詳しい方がおられましたらご教授お願い致します。

  • MFCのダイアログのリソースが更新されない

    Visual studio 2008(以後VS)のMFCのプロジェクトでリソース(ダイアログ)が 更新されなくなりました。原因はどういうのが考えられますか? リソースのIDがおかしくなっているのでしょうか? 具体的には、 ダイアログを追加、変更して更新→実行しても変更が反映されません。 リソースエディタで、表示上は更新されているのですが、 リソースファイル(以後rcファイル)をエディタ開いて中身を確認しても更新されていません。 直接、エディタでrcファイルを変更したら反映されますが、調整が面倒です・・・。 最悪、バックアップを使って差分を実装しなおしですね・・・ ■原因で思い当たる節 VSでリソースエディタを開きながら、外部のエディタでもrcファイルを更新し、 変更後VSで外部での更新メッセージがでたとき、いいえ(更新しない)と してしまったかもしれません。

  • ダイアログを描画する方法

    ウインドウを作らずに直接ダイアログやボタンなどのコントロールを描画できる方法ってありませんか? 具体的にやりたいことは、VisualStudioのリソースエディタのようなインターフェイスでダイアログのイメージ画像を作れるツールを作りたいと思っています。

  • フォントによってダイアログのサイズが変わってしまう

    MFC(VC++ 2003.ne)を使ったダイアログベースのアプリケーションで ダイアログで指定しているフォントの種類によってコントロールとそのダイアログ自身 のサイズが変わってしまいます。 これをフォントに依らずサイズを固定にしたいのですが可能でしょうか? システムフォントを指定しているのですが、 日本語OS環境ではMSゴシックが選択され、 フランス語OS環境ではMS Sans Serifが自動で選択されるようです。 同じフォントサイズを指定しても MSゴシックとMS Sans Serifでは大きさが異なるようで 起動時にフォントが切り替わることによってコントロールのサイズが変わってしまいます。 後からMoveWindowでサイズ調整するという方法もあると思いますが できればそこはリソースエディタで調整したいのです。 宜しくお願いします。

  • VC++ VS2005 タブコントロールに貼り付けたリストコントロールが消える

    こんばんは。 早速ですが質問です。 VC++ .NET MFCプロジェクトで リソースエディタでダイアログにタブコントロールを貼り付け(1)、 そこに同じようにリソースエディタでリストコントロールとボタンを 貼り付けたダイアログを作りました(2)。 1のタブコントロール上に2をソースで貼り付け 表示させ、2のInitDialogとボタンクリックのイベントを作成して Listコントロールに値を入れるということをしたのですが リストコントロールの表示が消えてしまいます。 マウスでリストコントロールが貼りついている位置にカーソルを当てるとその部分がでてきます。 原因のお分かりになるかたご回答よろしくお願いします。

  • ダイアログスタイルが古い

    VC6.0で作成したダイアログベースのアプリケーションを、VisualStudiio2008のプロジェクトに変換したのですが、ダイアログのスタイルが古いWindowsスタイルのままになってしまいます。 リソースエディタでは新しいスタイルで表示されます。 実行すると古いスタイルで表示されます。 原因をご存じの方、ご教授ください。 よろしくお願いします。

専門家に質問してみよう