Поле «флаг» в окне сообщения не является чистым битовым полем, некоторые значения не являются чистыми битовыми флагами, но они разделены на определенные биты.
Это означает, что вы не можете использовать чисто побитовые операции для поискавне, если значение установлено или нет. Вам необходимо замаскировать конкретные биты, которые содержат значение, и сравнить со значением, которое вы хотите проверить.
Например, значки флагов кажутся вторым полубайтом (биты с 4 по 7), которыйвы получаете маскировку с 0xf0u
(суффикс u
, чтобы сделать значение целым числом без знака). Затем вы сравниваете результат маскирования со значением значка, которое хотите проверить. Например,
if (flags & 0xf0u == MB_ICONWARNING)
{
// The MB_ICONWARNING "flag" is "set"
}
С кодом, который у вас есть в вопросе, flags & MB_ICONWARNING
, вы получите «истинный» результат как для MB_ICONERROR
, так и для MB_ICONWARNING
(и любое значение, равное0x20
.