WS_CLIPCHILDREN について – プログラミング – Home

通知
すべてクリア

[解決済] WS_CLIPCHILDREN について


hammer
 hammer
(@hammer)
ゲスト
結合: 20年前
投稿: 5
Topic starter  

こんばんは、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
 hammer
(@hammer)
ゲスト
結合: 20年前
投稿: 5
Topic starter  

環境を忘れていました。

VC7 & PlatformSDK Win32を使用です


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

ウィンドウは、先に作ったものが上になります。
スタティックを最後に作ってみてください。


返信引用
hammer
 hammer
(@hammer)
ゲスト
結合: 20年前
投稿: 5
Topic starter  

えっと先につくったものが下になってるのですが・・
なにか別のやりかたがあるのでしょうか?

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


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

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

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


返信引用
hammer
 hammer
(@hammer)
ゲスト
結合: 20年前
投稿: 5
Topic starter  

上記方法により解決しました。
WS_CLIPSIBLINGSについては知っていたのですが
描画順などの不理解により旨く使えていませんでした。

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


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

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