Udostępnij za pośrednictwem


CBrush Klasa

Hermetyzuje szczotkę interfejsu urządzenia graficznego systemu Windows (GDI).

Składnia

class CBrush : public CGdiObject

Elementy członkowskie

Konstruktory publiczne

Nazwa/nazwisko opis
CBrush::CBrush CBrush Tworzy obiekt.

Metody publiczne

Nazwa/nazwisko opis
CBrush::CreateBrushIndirect Inicjuje szczotkę ze stylem, kolorem i wzorcem LOGBRUSH określonym w strukturze.
CBrush::CreateDIBPatternBrush Inicjuje szczotkę ze wzorcem określonym przez mapę bitową niezależną od urządzenia (DIB).
CBrush::CreateHatchBrush Inicjuje szczotkę z określonym wzorem i kolorem kreskowanym.
CBrush::CreatePatternBrush Inicjuje szczotkę ze wzorcem określonym przez mapę bitową.
CBrush::CreateSolidBrush Inicjuje szczotkę z określonym kolorem stałym.
CBrush::CreateSysColorBrush Tworzy szczotkę, która jest domyślnym kolorem systemu.
CBrush::FromHandle Zwraca wskaźnik do CBrush obiektu, gdy dana dojście do obiektu systemu Windows HBRUSH .
CBrush::GetLogBrush LOGBRUSH Pobiera strukturę.

Operatory publiczne

Nazwa/nazwisko opis
CBrush::operator HBRUSH Zwraca uchwyt systemu Windows dołączony do CBrush obiektu.

Uwagi

Aby użyć CBrush obiektu, skonstruuj CBrush obiekt i przekaż go do dowolnej CDC funkcji składowej, która wymaga pędzla.

Szczotki mogą być solidne, wykluwane lub wzorzyste.

Aby uzyskać więcej informacji na temat CBrushprogramu , zobacz Obiekty graficzne.

Hierarchia dziedziczenia

CObject

CGdiObject

CBrush

Wymagania

Nagłówek: afxwin.h

CBrush::CBrush

CBrush Tworzy obiekt.

CBrush();
CBrush(COLORREF crColor);
CBrush(int nIndex, COLORREF crColor);
explicit CBrush(CBitmap* pBitmap);

Parametry

crColor
Określa kolor pierwszego planu pędzla jako kolor RGB. Jeśli szczotka jest wykluta, ten parametr określa kolor kreskowania.

nIndex
Określa styl kreskowania pędzla. Może to być dowolna z następujących wartości:

  • HS_BDIAGONAL Wyklucie w dół (od lewej do prawej) o 45 stopni

  • HS_CROSS Poziomy i pionowy wycięcie krzyżowe

  • HS_DIAGCROSS Crosshatch na 45 stopni

  • HS_FDIAGONAL Kreska w górę (od lewej do prawej) o 45 stopni

  • HS_HORIZONTAL Kreska pozioma

  • HS_VERTICAL Kreska pionowa

pBitmap
CBitmap Wskazuje obiekt, który określa mapę bitową, z którą maluje się pędzlem.

Uwagi

CBrush ma cztery przeciążone konstruktory. Konstruktor bez argumentów tworzy niezainicjowany CBrush obiekt, który musi zostać zainicjowany, zanim będzie można go użyć.

Jeśli używasz konstruktora bez argumentów, musisz zainicjować wynikowy CBrush obiekt za pomocą CreateSolidBrushmetody , , CreateHatchBrushCreateBrushIndirect, CreatePatternBrushlub CreateDIBPatternBrush. Jeśli używasz jednego z konstruktorów, który przyjmuje argumenty, nie jest konieczne dalsze inicjowanie. Konstruktory z argumentami mogą zgłaszać wyjątek w przypadku napotkania błędów, podczas gdy konstruktor bez argumentów zawsze powiedzie się.

Konstruktor z pojedynczym COLORREF parametrem konstruuje stałe szczotki o określonym kolorze. Kolor określa wartość RGB i można go skonstruować za pomocą makra RGB w pliku WINDOWS.H.

Konstruktor z dwoma parametrami tworzy szczotkę kreskową. Parametr nIndex określa indeks kreskowanego wzorca. Parametr crColor określa kolor.

Konstruktor z parametrem CBitmap konstruuje wzór pędzla. Parametr identyfikuje mapę bitową. Zakłada się, że mapa bitowa została utworzona przy użyciu metody CBitmap::CreateBitmap, CBitmap::CreateBitmapIndirect, CBitmap::LoadBitmaplub CBitmap::CreateCompatibleBitmap. Minimalny rozmiar mapy bitowej do użycia we wzorcu wypełnienia to 8 pikseli o 8 pikseli.

Przykład

// CBrush::CBrush.
CBrush brush1;                           // Must initialize!
brush1.CreateSolidBrush(RGB(0, 0, 255)); // Blue brush.

CRect rc;
GetClientRect(&rc);
ScreenToClient(&rc);

// Save original brush.
CBrush *pOrigBrush = (CBrush *)pDC->SelectObject(&brush1);

// Paint upper left corner with blue brush.
pDC->Rectangle(0, 0, rc.Width() / 2, rc.Height() / 2);

// These constructors throw resource exceptions.
try
{
   // CBrush::CBrush(COLORREF crColor)
   CBrush brush2(RGB(255, 0, 0)); // Solid red brush.

   // CBrush::CBrush(int nIndex, COLORREF crColor)
   // Hatched green brush.
   CBrush brush3(HS_DIAGCROSS, RGB(0, 255, 0));

   // CBrush::CBrush(CBitmap* pBitmap)
   CBitmap bmp;
   // Load a resource bitmap.
   bmp.LoadBitmap(IDB_BRUSH);
   CBrush brush4(&bmp);

   pDC->SelectObject(&brush2);

   // Paint upper right corner with red brush.
   pDC->Rectangle(rc.Width() / 2, 0, rc.Width(),
                  rc.Height() / 2);

   pDC->SelectObject(&brush3);

   // Paint lower left corner with green hatched brush.
   pDC->Rectangle(0, rc.Height() / 2, rc.Width() / 2,
                  rc.Height());

   pDC->SelectObject(&brush4);

   // Paint lower right corner with resource brush.
   pDC->Rectangle(rc.Width() / 2, rc.Height() / 2,
                  rc.Width(), rc.Height());
}
catch (CResourceException *e)
{
   e->ReportError();
   e->Delete();
}

// Reselect original brush into device context.
pDC->SelectObject(pOrigBrush);

CBrush::CreateBrushIndirect

Inicjuje szczotkę ze stylem, kolorem i wzorcem LOGBRUSH określonym w strukturze.

BOOL CreateBrushIndirect(const LOGBRUSH* lpLogBrush);

Parametry

lpLogBrush
Wskazuje strukturę zawierającą LOGBRUSH informacje o szczotki.

Wartość zwracana

Różne od zera, jeśli funkcja zakończyła się pomyślnie; w przeciwnym razie 0.

Uwagi

Pędzla można następnie wybrać jako bieżący pędzl dla dowolnego kontekstu urządzenia.

Pędzl utworzony przy użyciu mapy bitowej monochromatycznej (1 płaszczyzny, 1 bit na piksel) jest rysowany przy użyciu bieżącego tekstu i kolorów tła. Piksele reprezentowane przez bit ustawiony na 0 zostaną narysowane z bieżącym kolorem tekstu. Piksele reprezentowane przez bit ustawiony na 1 zostaną narysowane z bieżącym kolorem tła.

Przykład

// Initialize a LOGBRUSH structure.
LOGBRUSH logBrush;
logBrush.lbStyle = BS_HATCHED;
logBrush.lbColor = RGB(0, 192, 192);
logBrush.lbHatch = HS_CROSS;

// Declare an uninitialized CBrush ...
CBrush brush;
// ... and initialize it with the LOGBRUSH.
brush.CreateBrushIndirect(&logBrush);

// Select the brush (and perhaps a pen) into
// the device context.
CBrush *pOldBrush = (CBrush *)pDC->SelectObject(&brush);
CPen *pOldPen = (CPen *)pDC->SelectStockObject(BLACK_PEN);

// Have fun!
pDC->Pie(CRect(100, 100, 300, 300), CPoint(0, 0), CPoint(50, 200));

// Restore the original device context objects.
pDC->SelectObject(pOldBrush);
pDC->SelectObject(pOldPen);

CBrush::CreateDIBPatternBrush

Inicjuje szczotkę ze wzorcem określonym przez niezależną od urządzenia mapę bitową (DIB).

BOOL CreateDIBPatternBrush(
    HGLOBAL hPackedDIB,
    UINT nUsage);

BOOL CreateDIBPatternBrush(
    const void* lpPackedDIB,
    UINT nUsage);

Parametry

hPackedDIB
Identyfikuje obiekt pamięci globalnej zawierający pakowaną niezależnie od urządzenia mapę bitową (DIB).

nUsage
Określa, czy bmiColors[] pola BITMAPINFO struktury danych (część "pakowane DIB") zawierają jawne wartości RGB lub indeksy do aktualnie zrealizowanej palety logicznej. Parametr musi być jedną z następujących wartości:

  • DIB_PAL_COLORS Tabela kolorów składa się z tablicy 16-bitowych indeksów.

  • DIB_RGB_COLORS Tabela kolorów zawiera literały WARTOŚCI RGB.

lpPackedDIB
Wskazuje spakowany DIB składający się z BITMAPINFO struktury bezpośrednio po tablicy bajtów definiujących piksele mapy bitowej.

Wartość zwracana

Bezzerowe, jeśli się powiedzie; w przeciwnym razie 0.

Uwagi

Następnie można wybrać szczotkę dla dowolnego kontekstu urządzenia, który obsługuje operacje rasterowe.

Obie wersje różnią się sposobem obsługi dib:

  • W pierwszej wersji, aby uzyskać dojście do DIB wywołać funkcję systemu Windows GlobalAlloc w celu przydzielenia bloku pamięci globalnej, a następnie wypełnić pamięć spakowaną DIB.

  • W drugiej wersji nie trzeba wywoływać GlobalAlloc pamięci dla spakowanego DIB.

Zapakowany DIB składa się ze BITMAPINFO struktury danych bezpośrednio po tablicy bajtów definiujących piksele mapy bitowej. Mapy bitowe używane jako wzorce wypełnienia powinny mieć 8 pikseli na 8 pikseli. Jeśli mapa bitowa jest większa, system Windows tworzy wzorzec wypełnienia przy użyciu tylko bitów odpowiadających pierwszym 8 wierszom i 8 kolumnom pikseli w lewym górnym rogu mapy bitowej.

Po wybraniu przez aplikację pędzla dwukolorowego wzorca DIB do kontekstu urządzenia monochromatycznego system Windows ignoruje kolory określone w DIB, a zamiast tego wyświetla pędzla do wzorca przy użyciu bieżącego tekstu i kolorów tła kontekstu urządzenia. Piksele mapowane na pierwszy kolor (z przesunięciem 0 w tabeli kolorów DIB) DIB są wyświetlane przy użyciu koloru tekstu. Piksele mapowane na drugi kolor (z przesunięciem 1 w tabeli kolorów) są wyświetlane przy użyciu koloru tła.

Aby uzyskać informacje o korzystaniu z następujących funkcji systemu Windows, zobacz zestaw Windows SDK:

  • CreateDIBPatternBrush (Ta funkcja jest udostępniana tylko pod kątem zgodności z aplikacjami napisanymi dla wersji systemu Windows starszych niż 3.0; użyj CreateDIBPatternBrushPt funkcji).

  • CreateDIBPatternBrushPt (Ta funkcja powinna być używana dla aplikacji opartych na systemie Win32).

  • GlobalAlloc

Przykład

// Resource handle to bitmap.
HRSRC hRes;
// Global handles to bitmap resource.
HGLOBAL hData;
void *hLockedData;
CBrush brush;

// Find the resource handle.
hRes = ::FindResource(AfxGetResourceHandle(),
                      MAKEINTRESOURCE(IDB_BRUSH), RT_BITMAP);
if (hRes != NULL)
{
   // Lock and Load (or Load and Lock).
   if (((hData = ::LoadResource(AfxGetResourceHandle(),
                                hRes)) != NULL) &&
       ((hLockedData = ::LockResource(hData)) != NULL))
   {
      // Initialize the brush.
      brush.CreateDIBPatternBrush((const void *)hLockedData,
                                  DIB_RGB_COLORS);

      // Select the brush into the device context.
      CBrush *pOldBrush = pDC->SelectObject(&brush);

      // Draw.
      pDC->Rectangle(50, 50, 200, 200);

      // Restore the original device context.
      pDC->SelectObject(pOldBrush);

      // Free the resource.
      ::FreeResource(hLockedData);
   }
}

CBrush::CreateHatchBrush

Inicjuje szczotkę z określonym wzorem i kolorem kreskowanym.

BOOL CreateHatchBrush(
    int nIndex,
    COLORREF crColor);

Parametry

nIndex
Określa styl kreskowania pędzla. Może to być dowolna z następujących wartości:

  • HS_BDIAGONAL Wyklucie w dół (od lewej do prawej) o 45 stopni

  • HS_CROSS Poziomy i pionowy wycięcie krzyżowe

  • HS_DIAGCROSS Crosshatch na 45 stopni

  • HS_FDIAGONAL Kreska w górę (od lewej do prawej) o 45 stopni

  • HS_HORIZONTAL Kreska pozioma

  • HS_VERTICAL Kreska pionowa

crColor
Określa kolor pierwszego planu pędzla jako kolor RGB (kolor kresków). Aby uzyskać więcej informacji, zobacz COLORREF w zestawie Windows SDK.

Wartość zwracana

Bezzerowe, jeśli się powiedzie; w przeciwnym razie 0.

Uwagi

Pędzla można następnie wybrać jako bieżący pędzl dla dowolnego kontekstu urządzenia.

Przykład

CBrush brush;
brush.CreateHatchBrush(HS_BDIAGONAL, RGB(255, 0, 0));

CBrush *pOldBrush;
CPen *pOldPen;

pOldBrush = (CBrush *)pDC->SelectObject(&brush);
pOldPen = (CPen *)pDC->SelectStockObject(NULL_PEN);
pDC->Ellipse(CRect(50, 50, 250, 250));

pDC->SelectObject(pOldBrush);
pDC->SelectObject(pOldPen);

CBrush::CreatePatternBrush

Inicjuje szczotkę ze wzorcem określonym przez mapę bitową.

BOOL CreatePatternBrush(CBitmap* pBitmap);

Parametry

pBitmap
Identyfikuje mapę bitową.

Wartość zwracana

Bezzerowe, jeśli się powiedzie; w przeciwnym razie 0.

Uwagi

Następnie można wybrać szczotkę dla dowolnego kontekstu urządzenia, który obsługuje operacje rasterowe. Mapa bitowa zidentyfikowana przez program jest zwykle inicjowana pBitmap przy użyciu CBitmap::CreateBitmapfunkcji , CBitmap::CreateBitmapIndirect, CBitmap::LoadBitmaplub CBitmap::CreateCompatibleBitmap .

Mapy bitowe używane jako wzorce wypełnienia powinny mieć 8 pikseli na 8 pikseli. Jeśli mapa bitowa jest większa, system Windows będzie używać tylko bitów odpowiadających pierwszym 8 wierszom i kolumnom pikseli w lewym górnym rogu mapy bitowej.

Pędzla deseń można usunąć bez wpływu na powiązaną mapę bitową. Oznacza to, że mapa bitowa może służyć do tworzenia dowolnej liczby pędzli wzór.

Pędzl utworzony przy użyciu mapy bitowej monochromatycznej (1 płaszczyzna kolorów, 1 bit na piksel) jest rysowany przy użyciu bieżącego tekstu i kolorów tła. Piksele reprezentowane przez bit ustawiony na 0 są rysowane z bieżącym kolorem tekstu. Piksele reprezentowane przez bit ustawiony na 1 są rysowane z bieżącym kolorem tła.

Aby uzyskać informacje na temat używania CreatePatternBrushfunkcji systemu Windows, zobacz zestaw Windows SDK.

Przykład

// Create a hatched bit pattern.
WORD HatchBits[8] = {0x11, 0x22, 0x44, 0x88, 0x11,
                     0x22, 0x44, 0x88};

// Use the bit pattern to create a bitmap.
CBitmap bm;
bm.CreateBitmap(8, 8, 1, 1, HatchBits);

// Create a pattern brush from the bitmap.
CBrush brush;
brush.CreatePatternBrush(&bm);

// Select the brush into a device context, and draw.
CBrush *pOldBrush = (CBrush *)pDC->SelectObject(&brush);
pDC->RoundRect(CRect(50, 50, 200, 200), CPoint(10, 10));

// Restore the original brush.
pDC->SelectObject(pOldBrush);

CBrush::CreateSolidBrush

Inicjuje szczotkę z określonym stałym kolorem.

BOOL CreateSolidBrush(COLORREF crColor);

Parametry

crColor
Struktura COLORREF określająca kolor pędzla. Kolor określa wartość RGB i można go skonstruować za pomocą makra RGB w pliku WINDOWS.H.

Wartość zwracana

Bezzerowe, jeśli się powiedzie; w przeciwnym razie 0.

Uwagi

Pędzla można następnie wybrać jako bieżący pędzl dla dowolnego kontekstu urządzenia.

Gdy aplikacja zakończy korzystanie z pędzla utworzonego przez CreateSolidBrushprogram , powinna wybrać szczotkę z kontekstu urządzenia.

Przykład

Zobacz przykład dla elementu CBrush::CBrush.

CBrush::CreateSysColorBrush

Inicjuje kolor pędzla.

BOOL CreateSysColorBrush(int nIndex);

Parametry

nIndex
Określa indeks kolorów. Ta wartość odpowiada kolorowi użytemu do malowania jednego z 21 elementów okna. Zobacz GetSysColor w zestawie Windows SDK, aby uzyskać listę wartości.

Wartość zwracana

Bezzerowe, jeśli się powiedzie; w przeciwnym razie 0.

Uwagi

Pędzla można następnie wybrać jako bieżący pędzl dla dowolnego kontekstu urządzenia.

Gdy aplikacja zakończy korzystanie z pędzla utworzonego przez CreateSysColorBrushprogram , powinna wybrać szczotkę z kontekstu urządzenia.

Przykład

// Declare a CBrush and initialize to a system color.
CBrush brush;
brush.CreateSysColorBrush(COLOR_BTNFACE);

// Select the brush into the device context.
CBrush *pOldBrush = (CBrush *)pDC->SelectObject(&brush);

// Draw.
CRect rect(50, 50, 150, 150);
pDC->Rectangle(rect);

// Reselect the original brush.
pDC->SelectObject(pOldBrush);

CBrush::FromHandle

Zwraca wskaźnik do CBrush obiektu, gdy dana dojście do obiektu systemu Windows HBRUSH .

static CBrush* PASCAL FromHandle(HBRUSH hBrush);

Parametry

hBrush
Obsługa pędzla GDI systemu Windows.

Wartość zwracana

Wskaźnik do CBrush obiektu, jeśli się powiedzie; w przeciwnym razie NULL.

Uwagi

CBrush Jeśli obiekt nie jest jeszcze dołączony do uchwytu, zostanie utworzony i dołączony obiekt tymczasowyCBrush. Ten obiekt tymczasowy CBrush jest prawidłowy tylko do następnego czasu bezczynności aplikacji w pętli zdarzeń. Obecnie wszystkie tymczasowe obiekty graficzne są usuwane. Innymi słowy, obiekt tymczasowy jest prawidłowy tylko podczas przetwarzania jednego komunikatu okna.

Aby uzyskać więcej informacji na temat używania obiektów graficznych, zobacz Obiekty graficzne w zestawie Windows SDK.

Przykład

Zobacz przykład CBrush::CBrush.

CBrush::GetLogBrush

Wywołaj tę funkcję składową, aby pobrać LOGBRUSH strukturę.

int GetLogBrush(LOGBRUSH* pLogBrush);

Parametry

pLogBrush
Wskazuje strukturę zawierającą LOGBRUSH informacje o szczotki.

Wartość zwracana

Jeśli funkcja powiedzie się i pLogBrush jest prawidłowym wskaźnikiem, zwracana wartość to liczba bajtów przechowywanych w buforze.

Jeśli funkcja powiedzie się i pLogBrush ma NULLwartość , zwracana wartość to liczba bajtów wymaganych do przechowywania informacji, które funkcja będzie przechowywać w buforze.

Jeśli funkcja zakończy się niepowodzeniem, zwracana wartość to 0.

Uwagi

Struktura LOGBRUSH definiuje styl, kolor i deseń pędzla.

Na przykład wywołaj metodę GetLogBrush , aby dopasować określony kolor lub wzorzec mapy bitowej.

Przykład

// Example for CBrush::GetLogBrush
LOGBRUSH logbrush;
brushExisting.GetLogBrush(&logbrush);
CBrush brushOther(logbrush.lbColor);

// Another example
// Declare a LOGBRUSH
LOGBRUSH logBrush;

// Using a bitmap for this example.
// The bitmap should be a project resource.
CBitmap bm;
bm.LoadBitmap(IDB_BRUSH);

try
{
   // Create a brush
   CBrush brush1(&bm);

   // Use GetLogBrush to fill the LOGBRUSH structure
   brush1.GetLogBrush(&logBrush);

   // Create a second brush using the LOGBRUSH data
   CBrush brush2;
   brush2.CreateBrushIndirect(&logBrush);

   // Use the first brush
   CBrush *pOldBrush = (CBrush *)pDC->SelectObject(&brush1);
   pDC->Rectangle(CRect(50, 50, 150, 150));

   // The second brush has the specified characteristics
   // of the first brush
   pDC->SelectObject(&brush2);
   pDC->Ellipse(200, 50, 300, 150);

   // Reselect the original brush
   pDC->SelectObject(pOldBrush);
}
catch (CResourceException *e)
{
   e->ReportError();
   e->Delete();
}

CBrush::operator HBRUSH

Użyj tego operatora, aby pobrać dołączony uchwyt GDI systemu CBrush Windows obiektu.

operator HBRUSH() const;

Wartość zwracana

W przypadku powodzenia dojście do obiektu GDI systemu Windows reprezentowanego CBrush przez obiekt ; w przeciwnym razie NULL.

Uwagi

Ten operator jest operatorem rzutowania, który obsługuje bezpośrednie użycie HBRUSH obiektu.

Aby uzyskać więcej informacji na temat używania obiektów graficznych, zobacz Obiekty graficzne w zestawie Windows SDK.

Przykład

RECT rc = {50, 50, 200, 200};

Rectangle(pDC->GetSafeHdc(), rc.left, rc.top, rc.right, rc.bottom);

// The Win32 call to FillRect requires an HBRUSH.
// The HBRUSH operator casts the CBrush object
// to the required type.
CBrush brush;
brush.CreateSysColorBrush(COLOR_BTNFACE);
FillRect(pDC->GetSafeHdc(), &rc, (HBRUSH)brush);

Zobacz też

Przykład MFC PROPDLG
CGdiObject Klasa
Wykres hierarchii
CBitmap Klasa
CDC Klasa