Итак, вы создаете черно-белое (монохромное) растровое изображение 8x8 в качестве DIB, а затем используете его для создания пера. Я не вижу ничего плохого в этом коде. это определенно похоже на ошибку Windows, но может быть обходной путь.
Попробуйте установить
pbmi->bmiHeader.biClrUsed = 0;
pbmi->bmiHeader.biClrImportant = 0;
В этом контексте установка значений на 0 должна означать то же самое, что и установка их на 2, но 0 - более стандартное поведение для ситуаций, когда вы используете полную палитру. Вам все еще нужны две записи в вашей палитре, 0 означает «полный размер на основе biBitCount».
Кроме того, каждая запись палитры является RGBQUAD, что означает, что есть место для альфы, и ваша альфа установлена в 0, что должно игнорироваться, но, возможно, это не так. поэтому попробуйте установить старший байт ваших двух записей палитры на 0xFF или 0x80.
Наконец, возможно, что ваша палитра полностью игнорируется, и Windows использует BkMode, BkColor и TextColor целевого DC для всего, поэтому вам нужно убедиться, что они установлены в значения, которые вы видите.
Я предполагаю, что это как-то связано с альфа-прозрачностью, поскольку GDI полностью игнорирует альфа, а Aero - нет.