背景つきのダイアログに付属するコントロールの再描画 – プログラミング – Home

背景つきのダイアログに付属するコントロ...
 
通知
すべてクリア

背景つきのダイアログに付属するコントロールの再描画


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

お世話になっております。

WM_ERASEBKGNDメッセージを受け取ってダイアログに画像を描画するように
しています。

このダイアログに対してCStaticコントロールなどを
描画しているのですが、文字列を更新するときに前回の文字の上に
重ねて描画してしまいます。
このような現象を回避するためにはどうしたらよいのでしょうか?

コントロールをWM_CTLCOLORSTATICで受け取って、文字色の透過と背景色の透過も行って
います。

LRESULT OnCtlColorStatic(UINT /*uMsg*/, WPARAM wParam, LPARAM lParam, BOOL&
bHandled)
{
HWND hWnd = this->GetDlgItem(IDC_STATIC);
if (hWnd == (HWND)lParam)
{
  CDCHandle dc = (HDC)wParam;
  dc.SetBkMode(TRANSPARENT);
  dc.SetTextColor(RGB(0xff, 0xff, 0xff));
  return (long)GetStockObject(HOLLOW_BRUSH);
}

bHandled = false;
}


引用解決済
トピックタグ
Gak
 Gak
(@Gak)
ゲスト
結合: 21年前
投稿: 132
 

CStaticコントロールの文字列が更新される度に、ダイアログに対して Invalidate(TRUE)
を呼べばいけるかも。(InvalidateRect()で必要な領域のみ無効にする方が better)

背景が一色画なら OnCtlColorStatic() 内の dc.SetBkMode(TRANSPARENT) を止めて
適当な背景色、ブラシを指定すれば良いんだろうけどね。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

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