閑古鳥

オールドプログラマの日記。プログラミングとか病気(透析)の話とか。

CPenでペン作ろうとしたらコンパイルが通らない罠

黒いペン作ろうとしたらコンパイルエラーに。

CPen pen(PS_SOLID, 1, 0x000000); // オーバーロード関数の呼び出しを解決することができません。

CPenにはコンストラクタが2つあって、

CPen(
   int nPenStyle,
   int nWidth,
   const LOGBRUSH* pLogBrush,
   int nStyleCount = 0,
   const DWORD* lpStyle = NULL 
);

こちらのコンストラクタは見ての通り第三以降の引数が省略可能で、しかも第三引数がポインタであるために0を渡すとCOLORREF(unsigned long)なのかNULLポインタなのかわからないという。これはひどい。

CPen pen(PS_SOLID, 1, COLORREF(0));

とすれば通ります。static_cast使うべきか。今まではRGBマクロ使っていたので気付きませんでした。