お手軽矩形塗りつぶし
CDC のメンバ関数に、FillSolidRect ってのがある。私の知る限り、SDK には対応する関数がないのだが、引数が RECT と色だけで、ブラシを作成したりする必要がないので、ちょっと矩形領域を塗りつぶすのに重宝している。
ところで、この関数の実装は、普通に考えたら、こう?
void CDC::FillSolidRect( LPCRECT lpRect, COLORREF clr ) { ASSERT_VALID(this); ASSERT(m_hDC != NULL); CBrush SolidBrush; if ( SolidBrush.CreateSolidBrush( clr ) ) // 指定色のブラシを作成 { FillRect( lpRect, &SolidBrush ); SolidBrush.DeleteObject(); // 作ったブラシは削除 } }
でも、デバッグのときにソースを見ると、実はこうなっている。
SDK で矩形塗りつぶしをするときにも、わざわざブラシを作らなくてもできるってこと。
// wingdix.cpp
void CDC::FillSolidRect(LPCRECT lpRect, COLORREF clr)
{
ASSERT_VALID(this);
ASSERT(m_hDC != NULL);
::SetBkColor(m_hDC, clr);
::ExtTextOut(m_hDC, 0, 0, ETO_OPAQUE, lpRect, NULL, 0, NULL);
}
トラックバック
- このエントリーにトラックバック:
- http://frog.raindrop.jp/cgi-bin/mt/mt-tb.cgi/917
コメント