Sdílet prostřednictvím


CBrush Třída

Zapouzdřuje štětec grafického zařízení (GDI) systému Windows.

Syntaxe

class CBrush : public CGdiObject

Členové

Veřejné konstruktory

Název Popis
CBrush::CBrush CBrush Vytvoří objekt.

Veřejné metody

Název Popis
CBrush::CreateBrushIndirect Inicializuje štětec stylem, barvou a vzorem zadaným ve struktuře LOGBRUSH .
CBrush::CreateDIBPatternBrush Inicializuje štětec se vzorem určeným bitmapou nezávislou na zařízení (DIB).
CBrush::CreateHatchBrush Inicializuje štětec se zadaným šrafovaným vzorem a barvou.
CBrush::CreatePatternBrush Inicializuje štětec se vzorem určeným rastrovým obrázkem.
CBrush::CreateSolidBrush Inicializuje štětec se zadanou plnou barvou.
CBrush::CreateSysColorBrush Vytvoří štětec, který je výchozí barvou systému.
CBrush::FromHandle Vrátí ukazatel na CBrush objekt při zadání úchytu objektu Systému Windows HBRUSH .
CBrush::GetLogBrush LOGBRUSH Získá strukturu.

Veřejné operátory

Název Popis
CBrush::operator HBRUSH Vrátí popisovač Windows připojený k objektu CBrush .

Poznámky

Pokud chcete použít CBrush objekt, vytvořte CBrush objekt a předejte ho jakékoli CDC členské funkci, která vyžaduje štětec.

Kartáče můžou být pevné, šrafované nebo vzorované.

Další informace naleznete CBrushv tématu Grafické objekty.

Hierarchie dědičnosti

CObject

CGdiObject

CBrush

Požadavky

Záhlaví: afxwin.h

CBrush::CBrush

CBrush Vytvoří objekt.

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

Parametry

crColor
Určuje barvu popředí štětce jako barvu RGB. Pokud je štětec šrafován, tento parametr určuje barvu šrafování.

nIndex
Určuje styl šrafování štětce. Může to být libovolná z následujících hodnot:

  • HS_BDIAGONAL Šrafa dolů (zleva doprava) ve 45 stupních

  • HS_CROSS Vodorovný a svislý křížek

  • HS_DIAGCROSS Crosshatch at 45 degrees

  • HS_FDIAGONAL Šrafa nahoru (zleva doprava) ve 45 stupních

  • HS_HORIZONTAL Vodorovný šraf

  • HS_VERTICAL Svislý šraf

pBitmap
Odkazuje na CBitmap objekt, který určuje rastrový obrázek, se kterým štětec maluje.

Poznámky

CBrush má čtyři přetížené konstruktory. Konstruktor bez argumentů vytvoří neinicializovaný CBrush objekt, který musí být inicializován před použitím.

Pokud použijete konstruktor bez argumentů, je nutné inicializovat výsledný CBrush objekt pomocí CreateSolidBrush, CreateHatchBrush, CreateBrushIndirect, , CreatePatternBrushnebo CreateDIBPatternBrush. Pokud použijete jeden z konstruktorů, který přebírá argumenty, není nutné žádné další inicializace. Konstruktory s argumenty mohou vyvolat výjimku, pokud jsou zjištěny chyby, zatímco konstruktor bez argumentů bude vždy úspěšný.

Konstruktor s jedním COLORREF parametrem vytvoří plný štětec se zadanou barvou. Barva určuje hodnotu RGB a lze ji vytvořit pomocí RGB makra v WINDOWS.H.

Konstruktor se dvěma parametry vytvoří šrafovací štětec. Parametr nIndex určuje index šrafovaného vzoru. Parametr crColor určuje barvu.

Konstruktor s parametrem CBitmap vytvoří vzorovaný štětec. Parametr identifikuje rastrový obrázek. Předpokládá se, že rastrový obrázek byl vytvořen pomocí CBitmap::CreateBitmap, CBitmap::CreateBitmapIndirect, CBitmap::LoadBitmap, nebo CBitmap::CreateCompatibleBitmap. Minimální velikost rastrového obrázku, který se má použít ve vzorku výplně, je 8 pixelů o 8 pixelů.

Příklad

// 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

Inicializuje štětec stylem, barvou a vzorem zadaným ve struktuře LOGBRUSH .

BOOL CreateBrushIndirect(const LOGBRUSH* lpLogBrush);

Parametry

lpLogBrush
Odkazuje na LOGBRUSH strukturu, která obsahuje informace o štětci.

Návratová hodnota

Nenulové, pokud je funkce úspěšná; jinak 0.

Poznámky

Štětec lze následně vybrat jako aktuální štětec pro jakýkoli kontext zařízení.

Štětec vytvořený pomocí monochromatického rastrového obrázku (1 rovina, 1 bit na pixel) se nakreslí pomocí aktuálního textu a barvy pozadí. Pixely reprezentované bitem nastaveným na 0 budou nakresleny aktuální barvou textu. Pixely reprezentované bitem nastaveným na 1 se nakreslí aktuální barvou pozadí.

Příklad

// 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

Inicializuje štětec se vzorem určeným bitmapou nezávislou na zařízení (DIB).

BOOL CreateDIBPatternBrush(
    HGLOBAL hPackedDIB,
    UINT nUsage);

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

Parametry

hPackedDIB
Identifikuje objekt globální paměti obsahující zabalený rastrový obrázek nezávislý na zařízení (DIB).

nUsage
Určuje, zda bmiColors[] pole BITMAPINFO datové struktury (část "zabaleného DIB") obsahují explicitní hodnoty RGB nebo indexy do aktuálně realizované logické palety. Parametr musí být jedna z následujících hodnot:

  • DIB_PAL_COLORS Barevná tabulka se skládá z pole 16bitových indexů.

  • DIB_RGB_COLORS Tabulka barev obsahuje literální hodnoty RGB.

lpPackedDIB
Odkazuje na zabalený DIB skládající se ze BITMAPINFO struktury bezprostředně následované polem bajtů definujících pixely rastrového obrázku.

Návratová hodnota

Nenulové, pokud je úspěšné; jinak 0.

Poznámky

Štětec lze následně vybrat pro jakýkoli kontext zařízení, který podporuje rastrové operace.

Dvě verze se liší způsobem, jakým zpracováváte DIB:

  • V první verzi získáte popisovač dib volání funkce Windows GlobalAlloc přidělení bloku globální paměti a poté vyplnit paměť zabaleným DIB.

  • Ve druhé verzi není nutné volat GlobalAlloc přidělení paměti pro zabalený DIB.

Zabalený DIB se skládá z BITMAPINFO datové struktury okamžitě následované polem bajtů, které definují pixely rastrového obrázku. Rastrové obrázky používané jako vzorky výplně by měly být 8 pixelů o 8 pixelů. Pokud je rastrový obrázek větší, Vytvoří systém Windows vzor výplně pouze pomocí bitů odpovídajících prvním 8 řádkům a 8 sloupců pixelů v levém horním rohu rastrového obrázku.

Když aplikace vybere dvoubarevný štětec vzoru DIB do monochromatického kontextu zařízení, Systém Windows ignoruje barvy zadané v DIB a místo toho zobrazí štětec vzoru pomocí aktuálního textu a barev pozadí kontextu zařízení. Pixely namapované na první barvu (při posunu 0 v tabulce barev DIB) diB se zobrazí pomocí barvy textu. Pixely mapované na druhou barvu (při posunu 1 v tabulce barev) se zobrazí pomocí barvy pozadí.

Informace o používání následujících funkcí systému Windows najdete v sadě Windows SDK:

  • CreateDIBPatternBrush (Tato funkce je poskytována pouze pro kompatibilitu CreateDIBPatternBrushPt s aplikacemi napsanými pro verze Systému Windows starší než 3.0; použijte funkci.)

  • CreateDIBPatternBrushPt (Tato funkce by se měla používat pro aplikace založené na Win32.)

  • GlobalAlloc

Příklad

// 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

Inicializuje štětec se zadaným šrafovaným vzorem a barvou.

BOOL CreateHatchBrush(
    int nIndex,
    COLORREF crColor);

Parametry

nIndex
Určuje styl šrafování štětce. Může to být libovolná z následujících hodnot:

  • HS_BDIAGONAL Šrafa dolů (zleva doprava) ve 45 stupních

  • HS_CROSS Vodorovný a svislý křížek

  • HS_DIAGCROSS Crosshatch at 45 degrees

  • HS_FDIAGONAL Šrafa nahoru (zleva doprava) ve 45 stupních

  • HS_HORIZONTAL Vodorovný šraf

  • HS_VERTICAL Svislý šraf

crColor
Určuje barvu popředí štětce jako barvu RGB (barva šrafování). Další informace najdete COLORREF v sadě Windows SDK.

Návratová hodnota

Nenulové, pokud je úspěšné; jinak 0.

Poznámky

Štětec lze následně vybrat jako aktuální štětec pro jakýkoli kontext zařízení.

Příklad

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

Inicializuje štětec se vzorem určeným rastrovým obrázkem.

BOOL CreatePatternBrush(CBitmap* pBitmap);

Parametry

pBitmap
Identifikuje rastrový obrázek.

Návratová hodnota

Nenulové, pokud je úspěšné; jinak 0.

Poznámky

Štětec lze následně vybrat pro jakýkoli kontext zařízení, který podporuje rastrové operace. Rastrový obrázek identifikovaný pBitmap pomocí funkce , CBitmap::CreateBitmapIndirect, CBitmap::LoadBitmapnebo CBitmap::CreateCompatibleBitmap funkce je obvykle inicializovánCBitmap::CreateBitmap.

Rastrové obrázky používané jako vzorky výplně by měly být 8 pixelů o 8 pixelů. Pokud je rastrový obrázek větší, systém Windows použije jenom bity odpovídající prvním 8 řádkům a sloupcům pixelů v levém horním rohu rastrového obrázku.

Vzorový štětec lze odstranit bez ovlivnění přidruženého rastrového obrázku. To znamená, že rastrový obrázek lze použít k vytvoření libovolného počtu vzorových štětců.

Štětec vytvořený pomocí monochromatické bitmapy (1 barevná rovina, 1 bit na pixel) je vykreslen pomocí aktuálního textu a barvy pozadí. Pixely reprezentované bitem nastaveným na 0 se nakreslí aktuální barvou textu. Pixely reprezentované bitem nastaveným na 1 se nakreslují aktuální barvou pozadí.

Informace o použití CreatePatternBrushfunkce systému Windows naleznete v sadě Windows SDK.

Příklad

// 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

Inicializuje štětec se zadanou plnou barvou.

BOOL CreateSolidBrush(COLORREF crColor);

Parametry

crColor
Struktura COLORREF , která určuje barvu štětce. Barva určuje hodnotu RGB a lze ji vytvořit pomocí RGB makra v WINDOWS.H.

Návratová hodnota

Nenulové, pokud je úspěšné; jinak 0.

Poznámky

Štětec lze následně vybrat jako aktuální štětec pro jakýkoli kontext zařízení.

Po dokončení použití štětce vytvořeného CreateSolidBrushštětcem by se měl vybrat štětec z kontextu zařízení.

Příklad

Podívejte se na příklad pro CBrush::CBrush.

CBrush::CreateSysColorBrush

Inicializuje barvu štětce.

BOOL CreateSysColorBrush(int nIndex);

Parametry

nIndex
Určuje barevný index. Tato hodnota odpovídá barvě použité k malování jednoho z 21 prvků okna. Seznam hodnot najdete GetSysColor v sadě Windows SDK.

Návratová hodnota

Nenulové, pokud je úspěšné; jinak 0.

Poznámky

Štětec lze následně vybrat jako aktuální štětec pro jakýkoli kontext zařízení.

Po dokončení použití štětce vytvořeného CreateSysColorBrushštětcem by se měl vybrat štětec z kontextu zařízení.

Příklad

// 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

Vrátí ukazatel na CBrush objekt při zadání úchytu objektu Systému Windows HBRUSH .

static CBrush* PASCAL FromHandle(HBRUSH hBrush);

Parametry

hBrush
HANDLE to a Windows GDI brush.

Návratová hodnota

Ukazatel na CBrush objekt, pokud je úspěšný; jinak NULL.

Poznámky

CBrush Pokud objekt ještě není připojený k popisovači, vytvoří se dočasný CBrush objekt a připojí se. Tento dočasný CBrush objekt je platný pouze do okamžiku, kdy aplikace bude ve smyčce událostí nečinná. V tuto chvíli se odstraní všechny dočasné grafické objekty. Jinými slovy, dočasný objekt je platný pouze během zpracování jedné zprávy okna.

Další informace o používání grafických objektů naleznete v tématu Grafické objekty v sadě Windows SDK.

Příklad

Podívejte se na příklad pro CBrush::CBrush.

CBrush::GetLogBrush

Voláním této členské funkce načtěte LOGBRUSH strukturu.

int GetLogBrush(LOGBRUSH* pLogBrush);

Parametry

pLogBrush
Odkazuje na LOGBRUSH strukturu, která obsahuje informace o štětci.

Návratová hodnota

Pokud je funkce úspěšná a pLogBrush je platným ukazatelem, je vrácená hodnota počet bajtů uložených do vyrovnávací paměti.

Pokud je funkce úspěšná a pLogBrush je NULL, návratová hodnota je počet bajtů potřebných k uložení informací, které by funkce uložila do vyrovnávací paměti.

Pokud funkce selže, návratová hodnota je 0.

Poznámky

Struktura LOGBRUSH definuje styl, barvu a vzor štětce.

Volání tak, GetLogBrush aby odpovídalo konkrétní barvě nebo vzoru rastrového obrázku.

Příklad

// 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

Pomocí tohoto operátoru získáte připojený popisovač GDI windows objektu CBrush .

operator HBRUSH() const;

Návratová hodnota

V případě úspěchu je popisovač objektu GDI systému Windows reprezentovaný objektem CBrush ; jinak NULL.

Poznámky

Tento operátor je operátor přetypování, který podporuje přímé použití objektu HBRUSH .

Další informace o používání grafických objektů naleznete v tématu Grafické objekty v sadě Windows SDK.

Příklad

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);

Viz také

Mfc – ukázka PROPDLG
CGdiObject Třída
Graf hierarchie
CBitmap Třída
CDC Třída