< March 2005 | April 2005 | May 2005 >

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 で矩形塗りつぶしをするときにも、わざわざブラシを作らなくてもできるってこと。

続きを読む...

April 4, 2005

std::list の operator ==

std::list には、 operator == が実装されているので、以下のようにリストが等しいかを比較することができる。
#include <list>

int main(
    int     argc,
    char**  argv )
{
    std::list<Foo>  FooList1;
    std::list<Foo>  FooList2;
    
    if ( FooList1 == FooList2 )
        std::cout << "FooList1 == FooList2" << endl;
    else
        std::cout << "FooList1 != FooList2" << endl;
    
    return 0;
}
上のソースで Foo が、組み込み型の typedef だったりすると、上のソースはコンパイルできるが、ユーザ定義型の場合はコンパイルエラーとなる。 VC++ .NET だとこんな感じ。
続きを読む...