я узнал, что в строгом режиме Windows, ручки, как HBRUSH, определяются как структуры, чтобы избежать глупых ошибок и мне было интересно, если делать что-то вроде следующего безопасен:Можно ли расширить структуру API Windows?
class WINBRUSH : public HBRUSH
Теперь я не очень опытный в C++, но это просто кажется очень плохой идеей. Я думал, что, поскольку Windows выделяет эти объекты, если я ничего не добавляю к классу, я должен быть в порядке. Пример является:
class WINBRUSH : public HBRUSH__
{
public:
void GetRGB(BYTE* RgbArray)
{
LOGBRUSH LogBrush;
GetObject(this,sizeof(LOGBRUSH),&LogBrush);
RgbArray[0] = GetRValue(LogBrush.lbColor);
RgbArray[1] = GetGValue(LogBrush.lbColor);
RgbArray[2] = GetBValue(LogBrush.lbColor);
}
};
Теперь я тестировал выше класс и проверить, чтобы увидеть, если я получил правильные значения из метода GetRGB и он работал, но я просто хотел бы некоторые материалы по этому вопросу. Спасибо заранее, Деймон.
Код проверки:
WINBRUSH* Brush = (WINBRUSH*)CreateSolidBrush(RGB(1,2,3));
BYTE Rgb[3];
Brush->GetRGB(Rgb);
if((Rgb[0] == 1) && (Rgb[1] == 2) && (Rgb[2] == 3))
{
MessageBox(NULL, L"RGB values are correct!", L"Success!", MB_OK);
}
'static_assert (SizeOf (WINBRUSH) == SizeOf (HBRUSH)) ' –
Спасибо, я протестировал вышеуказанный код, и никаких ошибок не было, поэтому я предполагаю, что это означает, что это нормально. –
Никогда не предполагайте, что что-то в порядке, потому что не возникает никакой ошибки. Неопределенное поведение не определено; действительная реализация undefined - это работа для вас и всех ваших коллег и взорвающаяся на лице вашего самого важного клиента. –