LRESULT OnPaint( HWND hWnd ) { CWnd* pWnd = CWnd::FromHandle(hWnd); CPaintDC dc(pWnd); CString Text; CRect RC; CFont Font; CFont *pOldFont; CBrush Brush; CBrush *pOldBrush; CPoint PT(2,2); dc.SetBkMode( TRANSPARENT ); Font.CreateFont( 12, 0, 0, 0, FW_HEAVY, 0, 0, 0, ANSI_CHARSET, \ OUT_TT_PRECIS, CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY, \ VARIABLE_PITCH | FF_SWISS, "MS Sans Serif" ); pOldFont = dc.SelectObject( &Font ); if( m_State == bsNormal) { if (m_Style==2) { CBitmap bmp; bmp.LoadBitmap(IDB_BKBUTTON); Brush.CreatePatternBrush(&bmp); } else Brush.CreateSolidBrush( RGB( 200, 200, 200 ) ); dc.SetTextColor( RGB( 80, 80, 80) ); } else if( m_State == bsDown ) { Brush.CreateSolidBrush( RGB( 160, 160, 160 ) ); dc.SetTextColor( RGB( 50, 50, 250 ) ); } else if( m_State == bsHot ) { Brush.CreateSolidBrush( RGB( 100, 100, 180 ) ); dc.SetTextColor( RGB( 250, 250, 0 ) ); } pOldBrush = dc.SelectObject( &Brush ); pWnd->GetClientRect( &RC ); dc.RoundRect( &RC, PT ); HRGN hRgn = CreateRectRgn( RC.left, RC.top, RC.right, RC.bottom ); pWnd->SetWindowRgn( hRgn, TRUE ); DeleteObject( hRgn ); pWnd->GetWindowText(Text ); dc.DrawText( Text, &RC, DT_CENTER | DT_VCENTER | DT_SINGLELINE ); dc.SelectObject( pOldFont ); dc.SelectObject( pOldBrush ); return TRUE; }
void AFXAPI AfxDrawDitheredBitmap(CDC *pDC, int x, int y, const CBitmap &rSrc, COLORREF cr1, COLORREF cr2) { ASSERT(pDC); ASSERT_KINDOF(CDC, pDC); BITMAP bm; CDC dcSrc, dcMask; COLORREF cr; CBitmap bmpMask, *pOldMask, *pOldSrc; CBrush brChecker; static const WORD wPat[8] = {0x55, 0xaa, 0x55, 0xaa, 0x55, 0xaa, 0x55, 0xaa}; if(dcSrc.CreateCompatibleDC(pDC) && dcMask.CreateCompatibleDC(pDC) && const_cast<CBitmap &>(rSrc).GetBitmap(&bm)) { // Create checker brush bmpMask.CreateBitmap(8, 8, 1, 1, wPat); brChecker.CreatePatternBrush(&bmpMask); bmpMask.DeleteObject(); // Mask bmpMask.CreateBitmap(bm.bmWidth, bm.bmHeight, 1, 1, NULL); pOldSrc = dcSrc.SelectObject(const_cast<CBitmap *>(&rSrc)); pOldMask = dcMask.SelectObject(&bmpMask); ASSERT(pOldSrc && pOldMask); if(!pOldSrc || !pOldMask) return; // Make the upper left corner pixel of the source a "transparent" color cr = dcSrc.SetBkColor(dcSrc.GetPixel(0, 0)); dcMask.BitBlt(0, 0, bm.bmWidth, bm.bmHeight, &dcSrc, 0, 0, SRCCOPY); // Make white pixels of the source "transparent" too dcSrc.SetBkColor(RGB(255, 255, 255)); dcMask.BitBlt(0, 0, bm.bmWidth, bm.bmHeight, &dcSrc, 0, 0, SRCPAINT); dcSrc.SetBkColor(cr); // Checker the background with white and crBackground cr1 = pDC->SetTextColor(cr1); cr2 = pDC->SetBkColor(cr2); pDC->FillRect(CRect(x, y, x + bm.bmWidth, y + bm.bmHeight), &brChecker); pDC->SetTextColor(cr1); pDC->SetBkColor(cr2); // Blt it pDC->BitBlt(x, y, bm.bmWidth, bm.bmHeight, &dcSrc, 0, 0, SRCINVERT); pDC->BitBlt(x, y, bm.bmWidth, bm.bmHeight, &dcMask, 0, 0, SRCAND); pDC->BitBlt(x, y, bm.bmWidth, bm.bmHeight, &dcSrc, 0, 0, SRCINVERT); dcMask.SelectObject(pOldMask); dcSrc.SelectObject(pOldSrc); } }
void CCustomHeader::OnPaint() { CPaintDC dc(this); int ItemCount = GetItemCount(); CRect cRC; GetClientRect(&cRC); CBrush brush; CBitmap bmp; bmp.LoadBitmap(IDB_LISTHEAD); brush.CreatePatternBrush(&bmp); dc.FillRect(cRC,&brush); CPen pen(PS_SOLID,1,RGB(236,233,216)); for (int i = 0 ; i <ItemCount; i++) { CRect rc; GetItemRect(i,rc); rc.DeflateRect(0,0,1,0); //绘制分隔条 dc.SelectObject(&pen); dc.MoveTo(rc.right+1,0); dc.LineTo(rc.right+1,rc.Height()); //绘制文本 char text[100]; memset(text,0,100); CListCtrl* pList = (CListCtrl*)this->GetParent(); if (pList != NULL) { LVCOLUMN col; memset(&col,0,sizeof(LVCOLUMN)); col.mask = LVCF_TEXT; col.cchTextMax = 100; col.pszText = (LPWSTR)text; pList->GetColumn(i,&col); dc.SetTextColor(RGB(0,0,0)); CFont* font = GetFont(); dc.SelectObject(font); dc.SetBkMode(TRANSPARENT); CString str ; str.Format(_T("%s"),text); dc.DrawText(str,rc,DT_CENTER |DT_VCENTER|DT_WORD_ELLIPSIS|DT_SINGLELINE); } } pen.DeleteObject(); bmp.DeleteObject(); brush.DeleteObject(); }
void CTestMFCDlg::OnPaint() { /* if (IsIconic()) { CPaintDC dc(this); // device context for painting SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0); // Center icon in client rectangle int cxIcon = GetSystemMetrics(SM_CXICON); int cyIcon = GetSystemMetrics(SM_CYICON); CRect rect; GetClientRect(&rect); int x = (rect.Width() - cxIcon + 1) / 2; int y = (rect.Height() - cyIcon + 1) / 2; // Draw the icon dc.DrawIcon(x, y, m_hIcon); } else { CDialog::OnPaint(); } */ CPaintDC dc(this); CRect rect; CBitmap bmp; bmp.LoadBitmap(IDB_BITMAP3); BITMAP bmpinfo; bmp.GetBitmap(&bmpinfo); CDC cdc; cdc.CreateCompatibleDC(&dc); cdc.SelectObject(bmp); CBrush brush; brush.CreatePatternBrush(&bmp); //GetClientRect(rect); GetClientRect(rect); dc.StretchBlt(0,0,rect.right,rect.bottom,&cdc,0,0,bmpinfo.bmWidth,bmpinfo.bmHeight,SRCCOPY); //dc.FillRect(CRect(0,0,rect.right/2,rect.bottom/2),&brush); //dc.FillSolidRect(0,0,rect.right/2,rect.bottom/2,RGB(0,0,255)); //dc.FillSolidRect(CRect(0,0,rect.right/2,rect.bottom/2),RGB(0,0,255)); //CDialog::OnPaint(); /* CDialog::OnInitDialog(); CBitmap bmp; bmp.LoadBitmap(IDB_BITMAP1); CBrush brush; brush.CreatePatternBrush(&bmp); bmp.DeleteObject(); */ }
void CRightChgUserAccView::OnPaint() { CPaintDC dc(this); // device context for painting // TODO: 在此处添加消息处理程序代码 // 不为绘图消息调用 CDialog::OnPaint() CBitmap bitmap; bitmap.LoadBitmap(IDB_BIT_BKIN); CBrush Brush; Brush.CreatePatternBrush(&bitmap); CBrush* pOldBrush=dc.SelectObject(&Brush); dc.FillRect(CRect(0,0,783,659),&Brush); dc.SelectObject(pOldBrush); }
void COverallDataView::OnPaint() { CPaintDC dc(this); // device context for painting if (m_masterSurveyList.GetLegQuery()!=NULL) { CRect r; CBrush brush; CBitmap bitmap; bitmap.LoadBitmap(IDB_QUESTIONBRUSH); brush.CreatePatternBrush(&bitmap); GetClientRect(r); dc.FillRect(r,&brush); } }
void CRightResetpassView::OnPaint() { CPaintDC dc(this); // device context for painting // TODO: 在此处添加消息处理程序代码 // 不为绘图消息调用 CDialog::OnPaint() CPen pen(PS_SOLID,1,RGB(205,231,208)); CBitmap bitmap; bitmap.LoadBitmap(IDB_BKIN); CBrush brush; brush.CreatePatternBrush(&bitmap); CBrush* pOldBrush = dc.SelectObject(&brush); CPen* pOldpen=dc.SelectObject(&pen); dc.FillRect(CRect(0,0,850,800),&brush); dc.SelectObject(pOldBrush); dc.SelectObject(pOldpen); }
void CRightQueExecpView::OnPaint() { CPaintDC dc(this); // device context for painting // TODO: 在此处添加消息处理程序代码 // 不为绘图消息调用 CDialog::OnPaint() CBitmap bitmap; bitmap.LoadBitmap(IDB_BIT_BKIN); CBrush Brush; CPen Pen; Pen.CreatePen(PS_SOLID,1,theApp.m_LineColor); Brush.CreatePatternBrush(&bitmap); CBrush* pOldBrush=dc.SelectObject(&Brush); CPen* pOldPen=dc.SelectObject(&Pen); dc.Rectangle(CRect(0,0,726,445)); dc.SelectObject(pOldBrush); dc.SelectObject(pOldPen); }
BOOL CImageEdit::OnEraseBkgnd(CDC* pDC) { CRect rect; GetClientRect(&rect); CDC dcMemory; BITMAP bmpInfo; CBitmap bitmap; bitmap.LoadBitmap(IDB_Bitmap_Back); bitmap.GetBitmap(&bmpInfo); CBrush brush; brush.CreatePatternBrush(&bitmap); pDC->FillRect(&rect, &brush); return TRUE; // return CEdit::OnEraseBkgnd(pDC); }
void CWmPaintTestView::OnMenuPatternBrush() { CDC* pDC = GetDC(); CBitmap Bmp; CBrush* pNewBrush = new CBrush; CBrush* pOldBrush = NULL; //비트맵 파일을 로딩한다. Bmp.LoadBitmap(IDB_Bitmap_Pattern); //비트맵을 가지고 패턴 브러시를 생성한다. pNewBrush->CreatePatternBrush(&Bmp); pOldBrush = pDC->SelectObject(pNewBrush); //비트맵 패턴이 입혀진 네모가 그려진다. pDC->Rectangle(CRect(210, 200, 310, 300)); pDC->SelectObject(pOldBrush); delete pNewBrush; ReleaseDC(pDC); }
///////////////////////////////////////////////////////////////////////////// // COFSNcDlg message handlers void COFSNcDlg::OnNcPaint( ) { //// Творим Что хотим CRect rWin,rClient; GetWindowRect(&rWin); GetClientRect(&rClient); CRect m_CaptionRect; m_CaptionRect.left = BoundaryX; m_CaptionRect.top = BoundaryY; m_CaptionRect.right = rWin.Width()- BoundaryX; m_CaptionRect.bottom = CaptionH + BoundaryY; ScreenToClient(&rWin); CRgn rgnWin,rgnClient,rgnUp,rgnCap; rgnUp.CreateRectRgn(0,0,0,0); rgnWin.CreateRectRgnIndirect(&rWin); rgnClient.CreateRectRgnIndirect(&rClient); rgnUp.CombineRgn(&rgnWin,&rgnClient,RGN_DIFF); rgnUp.OffsetRgn(CPoint(-rWin.left,-rWin.top)); rgnCap.CreateRectRgnIndirect(m_CaptionRect); CWindowDC dc(this); dc.SelectClipRgn(&rgnUp,RGN_COPY); CBrush br; if(pBoundaryBMP) br.CreatePatternBrush(pBoundaryBMP); else br.CreateSolidBrush(m_BoundaryColor); rgnUp.CombineRgn(&rgnUp,&rgnCap,RGN_DIFF); dc.FillRgn(&rgnUp,&br); DrawCaption(dc,m_CaptionRect); }
void CScreenDlg::DisplayInfo(){ if(PtInRect(&LEFT_RECT,m_ptMouse)){ m_rectInfo = RIGHT_RECT; }else if(PtInRect(&RIGHT_RECT,m_ptMouse)){ m_rectInfo = LEFT_RECT; } CClientDC dc(m_hWnd); COLORREF color = dc.GetPixel(m_ptMouse); CDC dcMem; dcMem.CreateCompatibleDC(dc.m_hDC); CBitmap bmp; bmp.CreateCompatibleBitmap(dc.m_hDC, m_size.cx, m_size.cy); HBITMAP pOldBmp = dcMem.SelectBitmap(bmp.m_hBitmap); // 0. get the background dcMem.BitBlt(0,0,m_size.cx, m_size.cy,m_dcMem.m_hDC, 0,0,SRCCOPY); // 1. draw info pane CBrush brushBK; brushBK.CreatePatternBrush(m_bmpInfoBK.m_hBitmap); CPen penBK; penBK.CreatePen(PS_SOLID,1,INFO_EDGECOLOR);//PS_SOLID,PS_DASHDOT HPEN pOldPen = dcMem.SelectPen(penBK.m_hPen); HBRUSH pOldBrush = dcMem.SelectBrush(brushBK.m_hBrush); dcMem.SetBrushOrg(m_rectInfo.left, m_rectInfo.top); dcMem.Rectangle(&m_rectInfo);// draw rectangle dcMem.SelectBrush(pOldBrush); dcMem.MoveTo(m_rectInfo.left, m_rectInfo.top+content_height); dcMem.LineTo(m_rectInfo.right, m_rectInfo.top+content_height); dcMem.SelectPen(pOldPen); // 2.draw the text dcMem.SetBkMode(TRANSPARENT); dcMem.SetTextColor(INFO_TEXT); dcMem.SelectFont(thinfont); static WCHAR str1[255]={}, str2[255]={}; int yoffset=TEXT_OFFSET+m_rectInfo.left; static const int fontsize=14; if(m_SelectingNow || m_SelectionFinished){ wsprintf(str1,tstart, m_rectSelect.left, m_rectSelect.top); wsprintf(str2,tend, m_rectSelect.right, m_rectSelect.bottom); dcMem.TextOut(yoffset, INFO_HEADER_H, str1); dcMem.TextOut(yoffset, fontsize + INFO_HEADER_H, str2); dcMem.SelectFont(boldfont); dcMem.TextOut(yoffset, fontsize*2+5 + INFO_HEADER_H, info_capture); dcMem.TextOut(yoffset, fontsize*3+5 + INFO_HEADER_H, info_hotkey); dcMem.SelectFont(thinfont); dcMem.TextOut(yoffset, fontsize*4+15 + INFO_HEADER_H, info_deselect); dcMem.TextOut(yoffset, fontsize*5+15 + INFO_HEADER_H, info_adjust); }else{ wsprintf(str1,tmouse, m_ptMouse.x, m_ptMouse.y); wsprintf(str2,tcolor, GetRValue(color), GetGValue(color), GetBValue(color)); dcMem.TextOut(yoffset, INFO_HEADER_H, str1); dcMem.TextOut(yoffset, fontsize + INFO_HEADER_H, str2); dcMem.SelectFont(boldfont); dcMem.TextOut(yoffset, fontsize*4+5+ INFO_HEADER_H, info_select); dcMem.TextOut(yoffset, fontsize*5+5 + INFO_HEADER_H, info_exit); dcMem.SelectFont(thinfont); } // 3. draw the selected region if(m_SelectingNow || m_SelectionFinished){ HPEN pOldPen1 = dcMem.SelectPen(penLine1.m_hPen); _6bees_gdi::_6BeeDrawRect(dcMem,m_rectSelect,true,0); int width1 =abs(m_rectSelect.right-m_rectSelect.left); int height1=abs(m_rectSelect.bottom-m_rectSelect.top); realleftx= min(m_rectSelect.left,m_rectSelect.right); realtopy = min(m_rectSelect.top,m_rectSelect.bottom); realrightx = max(m_rectSelect.left,m_rectSelect.right); realbottomy = max(m_rectSelect.top,m_rectSelect.bottom); m_rectSelect.left = realleftx; m_rectSelect.top = realtopy; m_rectSelect.right = realrightx; m_rectSelect.bottom = realbottomy; rect_w = abs(m_rectSelect.right-m_rectSelect.left); rect_h = abs(m_rectSelect.bottom-m_rectSelect.top); if (width1>MINRECT || height1>MINRECT){// if the cap area is too small(smaller than 30x30), we wont draw small rects. //draw size of capture area static WCHAR str3[20]={}; wsprintf(str3, tsize, rect_w, rect_h); dcMem.SetBkMode(OPAQUE); dcMem.SetBkColor(SELECT_RECTCOLOR); dcMem.SetTextColor(INFO_TEXT); //dcMem.SelectFont(boldfont); dcMem.TextOutW(m_rectSelect.left+5, m_rectSelect.top+5, str3); RECT r1={realleftx-3,realtopy-3,realleftx+3,realtopy+3}; _6bees_gdi::_6BeeDrawRect(dcMem,r1,true,0); r1.left += width1/2;r1.right += width1/2; _6bees_gdi::_6BeeDrawRect(dcMem,r1,true,0); r1.left += width1/2;r1.right += width1/2; _6bees_gdi::_6BeeDrawRect(dcMem,r1,true,0); r1.top += height1/2;r1.bottom += height1/2; _6bees_gdi::_6BeeDrawRect(dcMem,r1,true,0); r1.top += height1/2;r1.bottom += height1/2; _6bees_gdi::_6BeeDrawRect(dcMem,r1,true,0); r1.left -= width1/2;r1.right -= width1/2; _6bees_gdi::_6BeeDrawRect(dcMem,r1,true,0); r1.left -= width1/2;r1.right -= width1/2; _6bees_gdi::_6BeeDrawRect(dcMem,r1,true,0); r1.top -= height1/2;r1.bottom -= height1/2; _6bees_gdi::_6BeeDrawRect(dcMem,r1,true,0); } dcMem.SelectPen(pOldPen1); } // 4. display all dc.StretchBlt(0,0,m_size.cx, m_size.cy, dcMem.m_hDC, 0,0,m_size.cx, m_size.cy,SRCCOPY); // 5. draw magnifying rect window RECT mag={yoffset,m_rectInfo.top+content_height+TEXT_OFFSET,m_rectInfo.right-TEXT_OFFSET,m_rectInfo.bottom-TEXT_OFFSET}; int mag_w= abs(mag.right-mag.left); int mag_h= abs(mag.bottom-mag.top); const static int mouse_area_size=10; dc.StretchBlt(mag.left,mag.top,mag_w, mag_h,m_dcMem.m_hDC, m_ptMouse.x-mouse_area_size,m_ptMouse.y-mouse_area_size,mouse_area_size*2,mouse_area_size*2,SRCCOPY); // draw corss HPEN pOldPen2 = dc.SelectPen(penLine2.m_hPen); dc.MoveTo(mag.left+mag_w/2, mag.top); dc.LineTo(mag.left+mag_w/2, mag.bottom); dc.MoveTo(mag.left,mag.top+mag_h/2); dc.LineTo(mag.right,mag.top+mag_h/2); dc.SelectPen(pOldPen2); // draw magnifier window border dc.MoveTo(mag.left, mag.top); dc.LineTo(mag.right, mag.top); dc.LineTo(mag.right,mag.bottom); dc.LineTo(mag.left,mag.bottom); dc.LineTo(mag.left,mag.top); dc.SelectPen(pOldPen); }
void HistogramImg::DrawItem(LPDRAWITEMSTRUCT draw_item_struct) { if (draw_item_struct->itemAction != ODA_DRAWENTIRE) return; CDC* dc= CDC::FromHandle(draw_item_struct->hDC); dc->SetBkMode(OPAQUE); COLORREF rgb_back= RGB(255,255,255); if (bmp_) { CRect rect; GetClientRect(rect); int width= bmp_->GetWidth(); int height= bmp_->GetHeight(); if (width > rect.Width()) width = rect.Width(); if (height > rect.Height()) height = rect.Height(); if (width != bmp_->GetWidth() || height != bmp_->GetHeight()) { double ratio_org= double(bmp_->GetWidth()) / double(bmp_->GetHeight()); if (double(width) / double(height) > ratio_org) width = static_cast<int>(height * ratio_org); else height = static_cast<int>(width / ratio_org); } CRect dest_rect= rect; if (width < dest_rect.Width()) dest_rect.left = (dest_rect.Width() - width) / 2; else dest_rect.left = 0; if (height < rect.Height()) dest_rect.top = (dest_rect.Height() - height) / 2; else dest_rect.top = 0; dest_rect.right = dest_rect.left + width; dest_rect.bottom = dest_rect.top + height; CRect fill_rect= rect; fill_rect.right = dest_rect.left; if (fill_rect.Width() > 0) dc->FillSolidRect(fill_rect, rgb_back); fill_rect.left = dest_rect.right; fill_rect.right = rect.right; if (fill_rect.Width() > 0) dc->FillSolidRect(fill_rect, rgb_back); fill_rect = rect; fill_rect.bottom = dest_rect.top; if (fill_rect.Height() > 0) dc->FillSolidRect(fill_rect, rgb_back); fill_rect.top = dest_rect.bottom; fill_rect.bottom = rect.bottom; if (fill_rect.Height() > 0) dc->FillSolidRect(fill_rect, rgb_back); bmp_->Draw(dc, dest_rect); image_rect_ = dest_rect; } if (!selection_rect_.IsRectEmpty()) { CRect rect= selection_rect_; rect.NormalizeRect(); CBitmap bmp; bmp.LoadBitmap(IDB_PATTERN); CBrush br; br.CreatePatternBrush(&bmp); dc->SetBkColor(RGB(255,255,255)); dc->SetTextColor(RGB(255,0,0)); dc->FrameRect(rect, &br); } }
void CFileManagerDlg::DrawBackground(CDC * pDC) { int xx, ww; int iSaved = pDC->SaveDC(); CRect rt; GetClientRect(&rt); if (m_bmpBGTop.m_hObject == NULL) return; BITMAP bmTop, bmBottom; BITMAP bmNavBar, bmTitle, bmLogo, bmRBCorner; m_bmpBGTop.GetBitmap(&bmTop); m_bmpBGBottom.GetBitmap(&bmBottom); m_bmpNavBar.GetBitmap(&bmNavBar); m_bmpTitle.GetBitmap(&bmTitle); m_bmpLogo.GetBitmap(&bmLogo); m_bmpRBCorner.GetBitmap(&bmRBCorner); // Draw Top CBrush brush; brush.CreatePatternBrush(&m_bmpBGTop); CRect rtTop(rt.left, rt.top, rt.right, bmTop.bmHeight); pDC->FillRect(&rtTop, &brush); BLENDFUNCTION bf; memset(&bf, 0, sizeof(bf)); bf.BlendOp = AC_SRC_OVER; bf.BlendFlags = 0; bf.SourceConstantAlpha = 255; bf.AlphaFormat = AC_SRC_ALPHA; CDC dcMem; dcMem.CreateCompatibleDC(pDC); /*if (!m_bMaximized)*/ { CRect rtItem; CWnd *pWnd = GetDlgItem(IDC_PIC_SYSMENU); if (pWnd != NULL) { pWnd->GetWindowRect(&rtItem); ScreenToClient(&rtItem); int sz = min(rtItem.Width(), rtItem.Height()); ::DrawIconEx(*pDC, rtItem.left, rtItem.top, m_hIcon, sz, sz, 0, NULL, DI_NORMAL); } pWnd = GetDlgItem(IDC_PIC_TITLE); if (pWnd != NULL) { pWnd->GetWindowRect(&rtItem); ScreenToClient(&rtItem); dcMem.SelectObject(&m_bmpTitle); int margin = 2; pDC->AlphaBlend( rtItem.left, rtItem.top, bmTitle.bmWidth, bmTitle.bmHeight, &dcMem, 0, 0, bmTitle.bmWidth, bmTitle.bmHeight, bf); } } // CPoint pntLogo = GetLogoPos(); // dcMem.SelectObject(&m_bmpLogo); // pDC->AlphaBlend(pntLogo.x, pntLogo.y, bmLogo.bmWidth, bmLogo.bmHeight, // &dcMem, 0, 0, bmLogo.bmWidth, bmLogo.bmHeight, bf); // Draw Navigation Bar dcMem.SelectObject(&m_bmpNavBar); ww = bmNavBar.bmWidth; for (xx = rt.left; xx < rt.right; xx += ww) { pDC->BitBlt(xx, rt.top + bmTop.bmHeight, ww, bmNavBar.bmHeight, &dcMem, 0, 0, SRCCOPY); } // Draw Bottom dcMem.SelectObject(&m_bmpBGBottom); ww = bmBottom.bmWidth; for (xx = rt.left; xx < rt.right; xx += ww) { pDC->BitBlt(xx, rt.bottom - bmBottom.bmHeight, ww, bmBottom.bmHeight, &dcMem, 0, 0, SRCCOPY); } // Draw Right-Bottom Corner dcMem.SelectObject(&m_bmpRBCorner); int margin = 2; pDC->AlphaBlend( rt.right - bmRBCorner.bmWidth - margin, rt.bottom - bmRBCorner.bmHeight - margin, bmRBCorner.bmWidth, bmRBCorner.bmHeight, &dcMem, 0, 0, bmRBCorner.bmWidth, bmRBCorner.bmHeight, bf); pDC->RestoreDC(iSaved); }
void CColorPickerButton::_OnDraw(HDC hdc, RECT *prc, EGACOLOR color) { CDC *pDC = CDC::FromHandle(hdc); if (pDC) { // Figure out the right color - do color 1 for now. RGBQUAD color1 = EGA_TO_RGBQUAD(color.color1); RGBQUAD color2 = EGA_TO_RGBQUAD(color.color2); CBitmap bm; if (CreateDCCompatiblePattern(color1, color2, pDC, &bm)) { CBrush brushPat; if (brushPat.CreatePatternBrush(&bm)) { CRect rcShrunk(prc->left + 1, prc->top + 1, prc->right - 1, prc->bottom - 1); pDC->FillRect(&rcShrunk, &brushPat); } } //int cx = RECTWIDTH(*prc) / 2; //int cy = RECTHEIGHT(*prc) / 2; //RECT rectOverlay = { prc->left + cx, prc->top + cy, prc->right, prc->bottom }; int iModePrev = pDC->SetBkMode(TRANSPARENT); RGBQUAD colorCombine = _Combine(color1, color2); RGBQUAD colorTL = _Lighter(colorCombine); RGBQUAD colorBR = _Darker(colorCombine); // Draw an x maybe if (!_bOn) { /* RGBQUAD colorRedder = _Redden(colorCombine); CPen penX(PS_SOLID, 1, RGB_TO_COLORREF(colorRedder)); HGDIOBJ hgdiObjOld = pDC->SelectObject(&penX); pDC->MoveTo(prc->left, prc->bottom); pDC->LineTo(prc->right, prc->top); pDC->MoveTo(prc->left, prc->top); pDC->LineTo(prc->right, prc->bottom); pDC->SelectObject(hgdiObjOld);*/ } /* // Do highlights. CPen penTL(PS_SOLID, 2, RGB_TO_COLORREF(colorTL)); HGDIOBJ hgdiObj = pDC->SelectObject(&penTL); pDC->MoveTo(prc->left + 1, prc->bottom - 1); pDC->LineTo(prc->left + 1, prc->top + 1); pDC->LineTo(prc->right - 1, prc->top + 1); CPen penBR(PS_SOLID, 2, RGB_TO_COLORREF(colorBR)); pDC->SelectObject(&penBR); pDC->LineTo(prc->right -1 , prc->bottom - 1); pDC->LineTo(prc->left + 1, prc->bottom - 1); pDC->SelectObject(hgdiObj);*/ // Draw some text. int iColorPrev = pDC->SetTextColor(_GetTextColor(colorCombine)); CString text; GetWindowText(text); pDC->DrawText(text, prc, DT_CENTER | DT_VCENTER | DT_SINGLELINE); pDC->SetTextColor(iColorPrev); CRect rcPadding(0, 0, 0, 0); if (_bOn) { CRect rcSrc(CPoint(0, 0), g_bitmapHighlight.GetSize()); g_bitmapHighlight.AlphaBlendSkinParts(hdc, *prc, rcSrc, rcPadding, /*__EXT_BMP_FLAG_PREMULTIPLIED_RGB_CHANNELS |*/ CExtBitmap::__EDM_STRETCH, true, true, 0xFF); } else { CRect rcSrc(CPoint(0, 0), g_bitmapHighlightX.GetSize()); g_bitmapHighlightX.AlphaBlendSkinParts(hdc, *prc, rcSrc, rcPadding, /*__EXT_BMP_FLAG_PREMULTIPLIED_RGB_CHANNELS |*/ CExtBitmap::__EDM_STRETCH, true, true, 0xFF); } pDC->SetBkMode(iModePrev); } }
void CSynBCGPEditCtrl::OnDrawLineNumbersBar( CDC* pDC, CRect rect ) { ASSERT_VALID (pDC); pDC->FillSolidRect (rect, m_clrBackLineNumber); // Draw dividing line: rect.DeflateRect (0, 0, 1, 0); WORD wHatchBits1 [8] = { 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00 }; WORD wHatchBits2 [8] = { 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF }; CBitmap bmpPattern; bmpPattern.CreateBitmap (8, 8, 1, 1, (rect.top % 2) ? wHatchBits1 : wHatchBits2); CBrush br; br.CreatePatternBrush (&bmpPattern); CRect rectLine = rect; rectLine.left = rectLine.right - 1; COLORREF clrTextOld = pDC->SetTextColor (m_clrBackSidebar); pDC->FillRect (rectLine, &br); pDC->SetTextColor (clrTextOld); rect.DeflateRect (0, 0, 1, 0); // Determine start and end offsets of the visible part of buffer CPoint ptTopLeft (m_rectText.left + 1, m_rectText.top); CPoint ptBottomRight (m_rectText.right - 1, m_rectText.bottom - 1); int nStartOffset = HitTest (ptTopLeft); int nEndOffset = HitTest (ptBottomRight); if (nStartOffset == -1) { nStartOffset = 0; } if (nEndOffset == -1) { nEndOffset = m_strBuffer.GetLength () - 1; } nEndOffset = min (nEndOffset, m_strBuffer.GetLength ()); int nRowColumnTop = RowFromOffset (nStartOffset); int nRowColumnBottom = RowFromOffset (nEndOffset); // Draw line numbers: int nRow = nRowColumnTop; int nVirtualRow = GetVirtualRow (nRow); int nRowStartOffset = nStartOffset; while (nRow <= nRowColumnBottom && nRowStartOffset >= 0) { CRect rect (rect); rect.top = (nVirtualRow - m_nScrollOffsetVert) * m_nLineHeight; rect.bottom = rect.top + m_nLineHeight; OnDrawLineNumber (pDC, rect, nRow); NextRow (nRow, nVirtualRow, nRowStartOffset); } }