WS_CLIPCHILDREN について

[戻る]
hammer 2005/01/28(金) 16:03:17
こんばんは、WS_CLIPCHILDREN で質問があります。

ウィンドウ作成時にWS_CLIPCHILDREN を使用して
そのウィンドウを親とする子コントロールを作成したところ旨く動作しませんでした。

具体的に説明します。

ウィンドウ内の子コントロールはCreateWindowExを使って作成しています。
作成順序は

ウィンドウバックグラウンド用スタティックコントロール
↓
エディットボックス(WS_EX_CLIENTEDGE を使用)
↓
ボタン
↓
グループボックス
↓
コンボボックス&リストボックス
↓
ツリービュー(3つほどアイテム追加)

以上よような順になっています。

このような流れで子コントロールを作成すると以下の不具合がでます。
・エディットボックスで指定したはずのWS_EX_CLIENTEDGE が見た目上無効になる
・ツリービューが不完全な表示状態になる
 ツリービューのアイテム1つのwidth,heightが(40,10)だったとして
  3つ追加したので(40,30)にになるとします。
 ツリービュー自体のwidth,heighは (200,400)だったとします。
 しかし実際に表示されるのはまさにアイテムの領域(40,30)だけで
 その他のツリービューの領域はバックグラウンド用に指定した
 スタティックコントロールと同じグレーで塗りつぶされてしまっています。

ちなみにこの状態でバックグラウンド用のスタティックコントロールの作成をやめると
ツリービューとエディットボックスは正常になります。

どうやったらバックグラウンド用のスタティックコントロールを作成したままで
不具合がでないようにできるのでしょうか?

以上お知恵をお貸し頂ければ幸いです。

hammer 2005/01/28(金) 16:04:22
環境を忘れていました。

VC7 & PlatformSDK Win32を使用です

dairygoods 2005/01/28(金) 16:57:23
ウィンドウは、先に作ったものが上になります。
スタティックを最後に作ってみてください。

hammer 2005/01/28(金) 17:05:45
えっと先につくったものが下になってるのですが・・
なにか別のやりかたがあるのでしょうか?

上記であげていた作成順をすべて逆にしてみました。
最後にウィンドウと同サイズのスタティックが作成されると
最前面にくるので、子コントロールはぬりつぶされて何も表示されていませんでした。

dairygoods 2005/01/28(金) 17:30:59
ウィンドウは、先に作ったものが上ですが、
全てのメッセージ処理は上から順に行われますので、
描画も、先に作ったものから行われ、
下にあるコントロールの描画によってどんどん上塗りされてしまいます。
(コントロールは基本的に重ねることを想定していません)

重ねる場合は、その子にWS_CLIPSIBLINGS(兄弟の描画を邪魔しない)をつけます。

hammer 2005/01/28(金) 19:40:20
[[解決]]
上記方法により解決しました。
WS_CLIPSIBLINGSについては知っていたのですが
描画順などの不理解により旨く使えていませんでした。

ありがとうございました。

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