frog.raindrop.jp

.knowledge
::April 2005

SUN MON TUE WED THU FRI SAT
          1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30

B L O G T I M E S

Prev: March 2005

Next: May 2005

Last Modified
February 04, 2009 10:06 PM

Search


あわせて読みたいブログパーツ
RSS feed meter for http://frog.raindrop.jp/
counter
< March 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 だとこんな感じ。