< std::list の operator == | CToolTipCtrl で TTS_ALWAYSTIP を指定しても無効コントロールのツールチップが表示されない >

April 7, 2005

お手軽矩形塗りつぶし

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

コメント

コメントする

※ コメントスパム対策のため、コメント本文はおはよう、こんにちわ、こんばんわのいずれかより始めるようにしてください。

name:
email:

※ 必要ですが、表示しません。

url:
情報を保存する ?