tagCANDY CGI VBレスキュー(花ちゃん)の Visual Basic 6.0用 掲示板
VBレスキュー(花ちゃん)の Visual Basic 6.0用 掲示板
[ツリー表示へ]  [ワード検索]  [Home]

タイトル Re^3: ユーザーコントロールの背景を透明にすると文字がおかしくなる
投稿日: 2017/02/10(Fri) 23:30
投稿者魔界の仮面弁士
> フォームのウィンドウハンドル、DCあたりを取得、コントロールがある場所の範囲をBitBltでコピー・・・とかでしょうか。
OleDraw API とか BitBlt とかやりようはありますが、親コンテナの内容が
書き換わったら、即座に反映されるような作り込みが必要ですね。



> やっぱりちょっと難易度が高そう・・・。
UserControl 側に背景を描画するのではなく、
Container 側に前景を描画する方向で実装できないかと思案。

ContainerHwnd に対する WM_PAINT を拾い、
標準描画処理が行われた後で、GDI の TextOut API もしくは
GDI+ の GdipDrawString API などで追加描画するとか。

コンテナの AutoRedraw が有効なら、Print メソッドという手も
ありそうですが、その場合、Cls だか RedrawWindow だかで
前回の描画結果を消す処理も必要になりそうな予感。


ひとまず、Image や Label や Shape と同様の、「中層」配置なコントロールにするべく、
Windowless=True な UserControl を使って実験してみましたが、
再描画すべき領域が変動したタイミングを捉えきれませんでした。難しいですね。

 Caption の変更 → UserControl_AmbientChanged
 Height/Width の変更 → UserControl_Resize
 Left/Top の変更 → ???

- 関連一覧ツリー をクリックするとツリー全体を一括表示します)

古いスレッドにレスはつけられません。