DRAWITEMSTRUCT.itemID の罠

MSDN の解説によると

itemID

メニューのメニュー項目 ID、またはリスト ボックスやコンボ ボックスの項目のインデックス。空のリスト ボックスやコンボ ボックスでは、このメンバは負の値になります。これにより、アプリケーションは、コントロールに項目がなくても、rcItem メンバで指定される座標にフォーカス四角形だけを描画できます。このフォーカス四角形により、ユーザーはコンボ ボックスやリストボックスが入力フォーカスを持っているかどうかを知ることができます。コンボ ボックスやリストボックスがあたかも入力フォーカスを持っているときのようにフォーカス四角形を描画するかどうかは、itemAction メンバのビットの設定によって決まります。

で、その DRAWITEMSTRUCT の定義

typedef struct tagDRAWITEMSTRUCT {
UINT CtlType;
UINT CtlID;
UINT itemID;
UINT itemAction;
UINT itemState;
HWND hwndItem;
HDC hDC;
RECT rcItem;
DWORD itemData;
} DRAWITEMSTRUCT;

実際に動かすと確かに -1 が返ってくる事がある。ただし、型は UINT でな*1(´Д`;
仕方ないからこんな判定をする羽目に。

if (lpDrawItemStruct->itemID >= 0 && lpDrawItemStruct->itemID < (UINT)INT_MIN) {

*1:矛盾してるが気にしない