MFCのMDIでコントロール以外の子ウィンドウ数を取得するには?

[戻る]
field 2006/03/07(火) 03:15:14
<開発環境>WinXP;VC++6.0;MFC使用

初めて質問させてもらいます。(VC歴半年の未熟者です)
初心者向けの参考書にあるサンプルプログラムをいろいろいじって
勉強しているところです。

今回質問したいのは、MFCのMDIベースで複数の子ウィンドウを表示している状態で、
子ウィンドウのみの数を取得してみようと試みています。
いろいろ調べた結果、
BOOL EnumChildWindows(HWND , WNDENUMPROC , LPARAM );  // API関数
というものに辿り着きました。
この関数を使い、取り敢えずファイルオープンするときの関数の中に入れて、既に
2,3個子ウィンドウを立ち上げた状態でカウントさせてみました。
すると、これで得られたのは、目的とした子ウィンドウ(Excelで言うところのBook)
以外もカウントしており、判別が困難です。
(確かにコントロールなどもウィンドウの一種ですが。)
子ウィンドウ数をカウントすると言うことは一般的に行われるんじゃないかと
思うのですが、ご存じの方がいましたらアドバイスください。

dot 2006/03/07(火) 08:36:49
決まった名前をつけてその名前をカウントすればいんじゃない?

Blue 2006/03/07(火) 08:59:35
参考にどうぞ。

MDI子(フレーム)ウィンドウの列挙
http://forums.belution.com/ja/vc/000/126/52s.shtml

field 2006/03/07(火) 11:03:21
[[解決]]
dotさん、Blueさんご回答ありがとうございました。

Blueさんが提示してくれたサイトを見ると、EnumChildWindows()と
  BOOL CObject::IsKindOf( const CRuntimeClass* pClass ) const;
を使った方法が参考に成りそうです。
 ちなみにサイトで回答者が提示した、
  CMDIChildWnd* CMDIFrameWnd::MDIGetActive( BOOL* pbMaximized = NULL ) const;
と
  CWnd* CWnd::GetNextWindow( UINT nFlag = GW_HWNDNEXT ) const;
の組み合わせは、MDIGetActive()と
  CMDIChildWnd* CMDIFrameWnd::MDIGetActive( BOOL* pbMaximized = NULL ) const;
の組み合わせを試したことがあり、カウントする途中に子ウィンドウが一瞬アクティブ
になるのがちょっと気になっていたので、EnumChildWindows()を使った方法が無いか探
していました。

これらをいろいろ使い回してみようと思います。

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