我瞭解到,在嚴格模式Windows處理,像HBRUSH,被定義爲一個結構,以避免愚蠢的錯誤,我想知道,如果做這樣的事情,以下是安全的:擴展Windows API結構安全嗎?
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))' –
謝謝,我測試了上面的代碼,並沒有產生任何錯誤,所以我會認爲這意味着它的確定。 –
永遠不要以爲沒有錯誤產生就認爲某些事情是好的。未定義的行爲是未定義的;未定義的有效實施適用於您和您的所有同事,並在最重要的客戶面前爆發。 –