通知
すべてクリア
Topic starter
2005年4月10日 11:28 PM
お世話になっております。
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;
}
2005年4月11日 5:12 PM
CStaticコントロールの文字列が更新される度に、ダイアログに対して Invalidate(TRUE)
を呼べばいけるかも。(InvalidateRect()で必要な領域のみ無効にする方が better)
背景が一色画なら OnCtlColorStatic() 内の dc.SetBkMode(TRANSPARENT) を止めて
適当な背景色、ブラシを指定すれば良いんだろうけどね。