void CpermoDlg::DrawBackground(CDC* pDC) { CPen MyPen(PS_SOLID, 1, RGB(255, 255, 255)); switch (nSkin) { case IDM_GREEN: { CBrush RLBrush(RGB(2, 200, 20)); CBrush MiBrush(RGB(150, 240, 150)); CPen *pOldPen = pDC->SelectObject(&MyPen); CBrush *pOldBrush = pDC->SelectObject(&MiBrush); //画边框和竖线 pDC->Rectangle(0, 0, 220, 22); pDC->MoveTo(35, 0); pDC->LineTo(35, 22); pDC->MoveTo(185, 0); pDC->LineTo(185, 22); //选择不带边框的画笔 pDC->SelectStockObject(NULL_PEN); pDC->SelectObject(&RLBrush); //左侧矩形 pDC->Rectangle(1, 1, 36, 22); //右侧矩形 pDC->Rectangle(186, 1, 220, 22); pDC->SelectObject(pOldPen); pDC->SelectObject(pOldBrush); } break; case IDM_BLUE: { CBrush RLBrush(RGB(26, 160, 225)); CBrush MiBrush(RGB(66, 66, 66)); CPen *pOldPen = pDC->SelectObject(&MyPen); CBrush *pOldBrush = pDC->SelectObject(&MiBrush); //画边框和竖线 pDC->Rectangle(0, 0, 220, 22); pDC->MoveTo(35, 0); pDC->LineTo(35, 22); pDC->MoveTo(185, 0); pDC->LineTo(185, 22); //选择不带边框的画笔 pDC->SelectStockObject(NULL_PEN); pDC->SelectObject(&RLBrush); //左侧矩形 pDC->Rectangle(1, 1, 36, 22); //右侧矩形 pDC->Rectangle(186, 1, 220, 22); pDC->SelectObject(pOldPen); pDC->SelectObject(pOldBrush); } break; case IDM_BLACK: { CBrush RLBrush(RGB(50, 50, 50)); CBrush MiBrush(RGB(100, 100, 100)); CPen *pOldPen = pDC->SelectObject(&MyPen); CBrush *pOldBrush = pDC->SelectObject(&MiBrush); //画边框和竖线 pDC->Rectangle(0, 0, 220, 22); pDC->MoveTo(35, 0); pDC->LineTo(35, 22); pDC->MoveTo(185, 0); pDC->LineTo(185, 22); //选择不带边框的画笔 pDC->SelectStockObject(NULL_PEN); pDC->SelectObject(&RLBrush); //左侧矩形 pDC->Rectangle(1, 1, 36, 22); //右侧矩形 pDC->Rectangle(186, 1, 220, 22); pDC->SelectObject(pOldPen); pDC->SelectObject(pOldBrush); } break; case IDM_RED: { CBrush RLBrush(RGB(180, 20, 20)); CBrush MiBrush(RGB(240, 150, 150)); CPen *pOldPen = pDC->SelectObject(&MyPen); CBrush *pOldBrush = pDC->SelectObject(&MiBrush); //画边框和竖线 pDC->Rectangle(0, 0, 220, 22); pDC->MoveTo(35, 0); pDC->LineTo(35, 22); pDC->MoveTo(185, 0); pDC->LineTo(185, 22); //选择不带边框的画笔 pDC->SelectStockObject(NULL_PEN); pDC->SelectObject(&RLBrush); //左侧矩形 pDC->Rectangle(1, 1, 36, 22); //右侧矩形 pDC->Rectangle(186, 1, 220, 22); pDC->SelectObject(pOldPen); pDC->SelectObject(pOldBrush); } break; case IDM_ORANGE: { CBrush RLBrush(RGB(230, 100, 25)); CBrush MiBrush(RGB(250, 230, 20)); CPen *pOldPen = pDC->SelectObject(&MyPen); CBrush *pOldBrush = pDC->SelectObject(&MiBrush); //画边框和竖线 pDC->Rectangle(0, 0, 220, 22); pDC->MoveTo(35, 0); pDC->LineTo(35, 22); pDC->MoveTo(185, 0); pDC->LineTo(185, 22); //选择不带边框的画笔 pDC->SelectStockObject(NULL_PEN); pDC->SelectObject(&RLBrush); //左侧矩形 pDC->Rectangle(1, 1, 36, 22); //右侧矩形 pDC->Rectangle(186, 1, 220, 22); pDC->SelectObject(pOldPen); pDC->SelectObject(pOldBrush); } break; default: { CBrush RLBrush(RGB(2, 200, 20)); CBrush MiBrush(RGB(150, 240, 150)); CPen *pOldPen = pDC->SelectObject(&MyPen); CBrush *pOldBrush = pDC->SelectObject(&MiBrush); //画边框和竖线 pDC->Rectangle(0, 0, 220, 22); pDC->MoveTo(35, 0); pDC->LineTo(35, 22); pDC->MoveTo(185, 0); pDC->LineTo(185, 22); //选择不带边框的画笔 pDC->SelectStockObject(NULL_PEN); pDC->SelectObject(&RLBrush); //左侧矩形 pDC->Rectangle(1, 1, 36, 22); //右侧矩形 pDC->Rectangle(186, 1, 220, 22); pDC->SelectObject(pOldPen); pDC->SelectObject(pOldBrush); } break; } //以下三句可以不要,局部变量会进行析构 // WhitePen.DeleteObject(); // GreenBrush.DeleteObject(); // WhiteBrush.DeleteObject(); }
BOOL ColourDragInformation::OnDrawSolidDrag(wxPoint Origin, wxDC *TheDC) { // set up gbrush // CPalette * OldPal = NULL; // if (PaletteManager::UsePalette()) // { // OldPal = PaletteManager::StartPaintPalette( TheDC ); // } GBrush GDrawBrush; GDrawBrush.Init(TheDC); GDrawBrush.Start(); // get a gbrush brush Document *ScopeDoc = Document::GetSelected(); ERROR2IF(ScopeDoc == NULL, FALSE, "No Selected Doc !"); wxBrush* pDragBrush = new wxBrush; BOOL BrushCreate = TRUE; if (pDragBrush != NULL ) { if (TheColour.IsTransparent()) { // TheDC->SetBkColor(RGB(255,255,255)); // ensure white background pDragBrush->SetStyle(wxCROSSDIAG_HATCH); pDragBrush->SetColour(wxColour(0,0,0)); // Fill with black/white cross hatch } else { DWORD ScreenWord; ColourContextRGBT *CCrgbt = (ColourContextRGBT *) ColourManager::GetColourContext(COLOURMODEL_RGBT, DocView::GetSelected()); ScreenWord = ConvertColourToScreenWord(CCrgbt, &TheColour); // create the Brush and Pen if (GDrawBrush.Available()) { GDrawBrush.GetLogBrush((COLORREF)ScreenWord, pDragBrush); } else pDragBrush->SetColour((COLORREF)ScreenWord); } wxPen MyPen(wxColour(0,0,0)); // Set the brush origin so the dither (or Hatch) patterns // don't move around as you drag. // TheDC->SetBrushOrg(Origin.x, Origin.y); //the rectangle to draw into wxRect DrawRect(Origin.x, Origin.y, SolidDragSize.x-1, SolidDragSize.y-1); // select brushes and pens .. TheDC->SetBrush(*pDragBrush); TheDC->SetPen(MyPen); // draw the thingy. In this case, it's a colour patch, circular for a spot colour, else a square #ifndef WEBSTER // don't distinguish spots in Webster Martin 15/07/97 if (!TheColour.IsTransparent() && TheColour.GetSpotParent() != NULL) TheDC->DrawEllipse(DrawRect); else #endif // WEBSTER TheDC->DrawRectangle(DrawRect); // clean up the dc TheDC->SetBrush(wxNullBrush); TheDC->SetPen(wxNullPen); // delete the objects delete pDragBrush; } else BrushCreate = FALSE; // Finish with GBrush GDrawBrush.Stop(); // if (OldPal) // PaletteManager::StopPaintPalette(TheDC, OldPal); // problems !!! ERROR2IF(!BrushCreate, FALSE, "Failed to make a solid drag brush!"); return TRUE; }