void DrawDisabledButton(TDC& dc, const TRect& rc) { // create a monochrome memory DC // TMemoryDC ddc; TBitmap bmp(ddc, rc.Width(), rc.Height()); ddc.SelectObject(bmp); // build a mask // ddc.PatBlt(0, 0, rc.Width(), rc.Height(), WHITENESS); dc.SetBkColor(TColor::Sys3dFace); ddc.BitBlt(0, 0, rc.Width(), rc.Height(), dc, rc.left, rc.top, SRCCOPY); dc.SetBkColor(TColor::Sys3dHilight); ddc.BitBlt(0, 0, rc.Width(), rc.Height(), dc, rc.left, rc.top, SRCPAINT); // Copy the image from the toolbar into the memory DC // and draw it (grayed) back into the toolbar. // dc.FillRect(rc, TBrush(TColor::Sys3dFace)); dc.SetBkColor(RGB(0, 0, 0)); dc.SetTextColor(RGB(255, 255, 255)); TBrush brShadow(TColor::Sys3dShadow); TBrush brHilight(TColor::Sys3dHilight); dc.SelectObject(brHilight); dc.BitBlt(rc.left+1, rc.top+1, rc.Width(), rc.Height(), ddc, 0, 0, 0x00E20746L); dc.SelectObject(brShadow); dc.BitBlt(rc.left, rc.top, rc.Width(), rc.Height(), ddc, 0, 0, 0x00E20746L); // reset DCs // dc.RestoreBrush(); dc.RestoreBrush(); ddc.RestoreBitmap(); }
// /// Creates a bitmap object from the given metaFile using the given palette and size /// arguments. // TBitmap::TBitmap(const TMetaFilePict& metaFile, TPalette& palette, const TSize& defSize) { // Adjust size to final metafile size as needed // TMemoryDC memDC; TSize size = metaFile.CalcPlaySize(memDC, defSize); // Create bitmap, either mono or screen compatible // uint16 nColors; palette.GetObject(nColors); if (nColors > 2) { TScreenDC dc; Handle = ::CreateCompatibleBitmap(dc, size.cx, size.cy); } else Handle = ::CreateBitmap(size.cx, size.cy, 1, 1, 0); CheckValid(); RefAdd(Handle, Bitmap); // clear bitmap, then play metafile onto it // memDC.SelectObject(*this); memDC.SelectStockObject(WHITE_BRUSH); memDC.PatBlt(0, 0, size.cx, size.cy); memDC.SelectObject(palette, false); metaFile.PlayOnto(memDC, size); TRACEX(OwlGDI, OWL_CDLEVEL, "TBitmap constructed @" << (void*)this << " from metafile @" << (void*)&metaFile << "."); }