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

[戻る]
tetu 2005/04/10(日) 23:28:16
お世話になっております。

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 2005/04/11(月) 17:12:10
CStaticコントロールの文字列が更新される度に、ダイアログに対して Invalidate(TRUE)
を呼べばいけるかも。(InvalidateRect()で必要な領域のみ無効にする方が better)

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

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