複数のコントロールが存在するときのZオーダーと表示について

[戻る]
はっきねん 2007/10/23(火) 16:31:33
はじめまして。MFC,VC++2005で、Vista上にて開発を行っています。
今画面上に複数のコントロールを配置しています。親子関係は以下のようになって
います。

MainFrm--+--ToolBar1--+--...
         |
         +--ToolBar2--+--...
         |
         +--SplitWnd(1,2)--+--...
                           |
                           +--MyView--+--TabCtrl--+--ListCtrl

ここで、ToolBar1にComboBoxを配置し、このプルダウンボタンを押すとテキスト
ボックスの代わりにTreeCtrlを表示しようとしています。

このTreeCtrlはToolBar1の初期化処理時に非表示でCreateしておき(各コントロール
を跨って描画する必要があるので、親はMainFrm)、ユーザ入力によりSetWindowPosを
起動して表示を行うようにしたいのですが、以下の問題が発生しています。

[問題]
TreeCtrlの表示は、通常のComboBoxのテキストボックスのように
ToolBar1,ToolBar2,TabCtrl,ListCtrl
の上に跨って表示したいのですが、一瞬全体が描画された後、TabCtrl,ListViewの
部分が再描画され、TreeViewの下部が消去されてしまいます。
(ToolBar1,ToolBar2の部分は正常に表示される)

ただしZオーダーは最前面にきているようでマウスカーソルを持っていくとTreeCtrl
の内容が部分ごとに再描画(ListCtrlの内容の上に上書き)されますし、アイテムの
選択やスクロール、項目の拡張等のTreeCtrlの通常の機能は使用可能なのですが、
表示はぐちゃぐちゃです。

[補足]
上の状況を改善しようとして、SetWindowPosを使用せず、MoveWindowを用いると表示
は正常に、各コントロールに跨って表示されます。
しかしZオーダーはTabCtrlの後ろに設定されているようで、TreeVie上の項目を
クリックすると下に表示されているListCtrlのアイテムが選択されてしまいます。

MovwWindowしたあと、NOMOVEでSetWindowPosしても上記と同じ問題が発生します。

どの様にすればまともに表示できるのか、アドバイスをお願いします。

はっきねん 2007/10/23(火) 22:43:51
[[解決]]
自己解決しました。

TreeCtrlの親をDeskTopWindowにすることでまともに表示出来る様になりました。

お騒がせしました。

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