void CSizingControlBar::OnNcPaint() { // get window DC that is clipped to the non-client area CWindowDC dc(this); // the HDC will be released by the destructor CRect rcClient, rcBar; GetClientRect(rcClient); //mpc-hc custom code start //ClientToScreen(rcClient); //mpc-hc custom code end GetWindowRect(rcBar); //mpc-hc custom code start // Convert to client coordinates to account for possible RTL layout ScreenToClient(rcBar); //mpc-hc custom code end rcClient.OffsetRect(-rcBar.TopLeft()); rcBar.OffsetRect(-rcBar.TopLeft()); CDC mdc; mdc.CreateCompatibleDC(&dc); CBitmap bm; bm.CreateCompatibleBitmap(&dc, rcBar.Width(), rcBar.Height()); CBitmap* pOldBm = mdc.SelectObject(&bm); // draw borders in non-client area CRect rcDraw = rcBar; DrawBorders(&mdc, rcDraw); // erase the NC background //mpc-hc custom code start mdc.FillRect(rcDraw, CBrush::FromHandle( (HBRUSH) GetClassLongPtr(m_hWnd, GCLP_HBRBACKGROUND))); //mpc-hc custom code end if (m_dwSCBStyle & SCBS_SHOWEDGES) { CRect rcEdge; // paint the sizing edges for (int i = 0; i < 4; i++) if (GetEdgeRect(rcBar, GetEdgeHTCode(i), rcEdge)) mdc.Draw3dRect(rcEdge, ::GetSysColor(COLOR_BTNHIGHLIGHT), ::GetSysColor(COLOR_BTNSHADOW)); } NcPaintGripper(&mdc, rcClient); // client area is not our bussiness :) dc.IntersectClipRect(rcBar); dc.ExcludeClipRect(rcClient); dc.BitBlt(0, 0, rcBar.Width(), rcBar.Height(), &mdc, 0, 0, SRCCOPY); mdc.SelectObject(pOldBm); bm.DeleteObject(); mdc.DeleteDC(); }
void CMatrixStatic::OnPaint(HWND hWnd) { COLORREF SEGM_COLORS[3] = { RGB(63, 181, 255), // BLUE ON RGB(23, 64, 103), // BLUE OFF RGB(0, 0, 0), // BLACK }; RECT rc; CRect m_rect; GetClientRect(&m_rect); int x = 0, y = 0; int strlen = m_csStrText.GetLength(); if (strlen == 0) return; CPaintDC dc(this); // device context for painting HBITMAP bmp; COLORMAP ColorMap[4];; ColorMap[0].from = SEGM_COLORS[0]; ColorMap[0].to = m_crOnColor; ColorMap[1].from = SEGM_COLORS[1]; ColorMap[1].to = m_crOffColor; ColorMap[2].from = SEGM_COLORS[2]; ColorMap[2].to = m_crBackColor; //bmp = ::CreateMappedBitmap(AfxGetInstanceHandle(), m_iImagematrix, 0, ColorMap, 3); //@@code modify --> bmp = ::CreateMappedBitmap(GetThisModule(), m_iImagematrix, 0, ColorMap, 3); CDC dcMemory; dcMemory.CreateCompatibleDC(&dc); // Select the bitmap into the in-memory DC //CBitmap* pOldBitmap = dcMemory.SelectObject(CBitmap::FromHandle(bmp)); //@@code modify --> HBITMAP pOldBitmap = dcMemory.SelectObject(bmp); int charcount = 0; int linecount = 1; HBRUSH hbBkBrush = CreateSolidBrush(m_crBackColor); FillRect(dc.m_hDC, &m_rect, hbBkBrush); for (int ix = 0; ix < strlen; ix++) { GetCharBmpOffset(&rc, (char)m_csStrText[ix]); dc.BitBlt(x, y, (m_icharwidth + m_ixspacing), (m_icharheight+m_iyspacing), &dcMemory, rc.left, rc.top, SRCCOPY); x += m_icharwidth + m_ixspacing; charcount++; if ((charcount == m_iMaxXChars) && m_iMaxYChars == 1) break; else if ((charcount == m_iMaxXChars) && m_iMaxYChars > 1) { if (linecount == m_iMaxYChars) break; x = charcount = 0; y += m_icharheight + m_iyspacing; linecount++; } } dcMemory.SelectObject(pOldBitmap); dcMemory.DeleteDC(); DeleteObject(bmp); DeleteObject(hbBkBrush); }
// Protected member functions BOOL COXScreenGrabber::PrepareWindow(BOOL bClient, CRect& ScrRect, CWnd* pWnd) { if (pWnd == NULL) pWnd = CWnd::GetForegroundWindow(); if (pWnd == NULL) pWnd = CWnd::GetDesktopWindow(); ASSERT(pWnd != NULL); if (!pWnd->IsWindowVisible()) return FALSE; if (pWnd == CWnd::GetDesktopWindow()) { // create a DC for the screen and create CDC SreenDC; if (!SreenDC.CreateDC(_T("DISPLAY"), NULL, NULL, NULL)) return FALSE; // get screen resolution and set Rect ScrRect.left = 0; ScrRect.top = 0; ScrRect.right = SreenDC.GetDeviceCaps(HORZRES); ScrRect.bottom = SreenDC.GetDeviceCaps(VERTRES); SreenDC.DeleteDC(); } else { // Move window which was selected to top of Z-order for // the capture, and make it redraw itself pWnd->SetWindowPos(NULL, 0, 0, 0, 0, SWP_DRAWFRAME | SWP_NOSIZE | SWP_NOMOVE); pWnd->UpdateWindow(); if (bClient) { // get the client area dimensions pWnd->GetClientRect(&ScrRect); // convert client coords to screen coords CPoint pt1(ScrRect.left, ScrRect.top); CPoint pt2(ScrRect.right, ScrRect.bottom); pWnd->ClientToScreen(&pt1); pWnd->ClientToScreen(&pt2); ScrRect.left = pt1.x; ScrRect.top = pt1.y; ScrRect.right = pt2.x; ScrRect.bottom = pt2.y; } else pWnd->GetWindowRect(&ScrRect); } return TRUE; }
void CDLGTabPic::OnPaint() { CPaintDC dc(this); // device context for painting // TODO: Add your message handler code here // Do not call CDialog::OnPaint() for painting messages //贴背景图 CRect rect; GetClientRect(&rect); //从资源中载入位图 CBitmap bitmap; bitmap.LoadBitmap(IDB_FIND_BACK); BITMAP bmp; bitmap.GetBitmap(&bmp); CDC memdc; memdc.CreateCompatibleDC(&dc); memdc.SelectObject(bitmap); dc.SetStretchBltMode(COLORONCOLOR); dc.StretchBlt(0,0,rect.Width(),rect.Height(),&memdc,0,0,bmp.bmWidth,bmp.bmHeight,SRCCOPY); memdc.DeleteDC(); int w,h; if(bim) { //显示图片 CDC *pDC=m_pic.GetDC(); CRect rect; m_pic.GetClientRect(&rect);//获得pictrue控件所在的举行区域 PicAutoWH(rect.Width(),rect.Height(),pic._GetWidth(),pic._GetHeight(),&w,&h); pic.DrawPicture(*pDC, (rect.Width()-w)/2,(rect.Height()-h)/2,w,h); m_pic.ReleaseDC(pDC); } if(bimsmall) { //显示图片 CDC *pDCsmall=m_pic_small.GetDC(); CRect rectsmall; m_pic_small.GetClientRect(&rectsmall);//获得pictrue控件所在的举行区域 PicAutoWH(rectsmall.Width(),rectsmall.Height(),picsmall._GetWidth(),picsmall._GetHeight(),&w,&h); picsmall.DrawPicture(*pDCsmall,(rectsmall.Width()-w)/2,(rectsmall.Height()-h)/2,w,h); m_pic_small.ReleaseDC(pDCsmall); } GetDlgItem(IDC_STATIC_TXT)->SetWindowText(m_txt); CDialog::OnPaint(); }
void CMFCWorldView::OnDraw(CDC* pDC) { //获取文档 CMFCWorldDoc* pDoc = GetDocument(); ASSERT_VALID(pDoc); if (!pDoc) return; //准备内存绘图缓冲区 CDC MemDC; CBitmap MemBitmap; MemDC.CreateCompatibleDC(NULL);//创建绘图设备 //绘图区域大小,可以像这样中直接使用窗口大小,也可以自己计算需要多大的区域 MemBitmap.CreateCompatibleBitmap(pDC,870,510);CBitmap *pOldBit=MemDC.SelectObject(&MemBitmap);//创建绘图区 MemDC.FillSolidRect(0,0,870,510,RGB(255,255,255));//初始化 //读取文档 char** p; p = pDoc->getmap(5); //画刷定义 int wallc=RGB(0,0,0);//墙是黑色 CBrush wallBrush(wallc); int playc=RGB(0,255,0);//玩家是绿色 CBrush playBrush(playc); int exitc=RGB(255,0,0);//出口是红色 CBrush exitBrush(exitc); CBrush *oldBrush; //缓冲区绘图 for (int i = 0; i <= 2*MM; ++i) { for (int j = 0; j <= 2*NN; ++j) { switch (p[j][i]) { case WALL: oldBrush = MemDC.SelectObject(&wallBrush); MemDC.Rectangle(Start+i*cubelong,Start+j*cubelong,Start+(i+1)*cubelong,Start+(j+1)*cubelong); MemDC.SelectObject(oldBrush); break; case PLAY: oldBrush = MemDC.SelectObject(&playBrush); MemDC.Rectangle(Start+i*cubelong,Start+j*cubelong,Start+(i+1)*cubelong,Start+(j+1)*cubelong); MemDC.SelectObject(oldBrush); break; case EXIT: oldBrush = MemDC.SelectObject(&exitBrush); MemDC.Rectangle(Start+i*cubelong,Start+j*cubelong,Start+(i+1)*cubelong,Start+(j+1)*cubelong); MemDC.SelectObject(oldBrush); } } } //将内存中的图拷贝到屏幕上进行显示 pDC->BitBlt(0,0,870,510,&MemDC,0,0,SRCCOPY); //绘图完成后的清理 MemBitmap.DeleteObject(); MemDC.DeleteDC(); }
//绘画透明图 bool AFCStretchImage(CDC * pDesDC, int iXDes, int iYDes, int iDesWidth, int iDesHeight, HBITMAP hBitBmp, int iXScr, int iYScr, int iScrWidth, int iScrHeight, COLORREF crColor) { CDC MemDC; MemDC.CreateCompatibleDC(pDesDC); MemDC.SelectObject(hBitBmp); //return AFCStretchBlt(pDesDC,iXDes,iYDes,iDesWidth,iDesHeight,&MemDC,iXScr,iYScr,iScrWidth,iScrHeight,crColor); bool b = ::TransparentBlt(pDesDC->GetSafeHdc(),iXDes,iYDes,iDesWidth,iDesHeight,MemDC.GetSafeHdc(),iXScr,iYScr,iScrWidth,iScrHeight,crColor); MemDC.DeleteDC(); return b; }
BOOL CSingleExamDlg::OnEraseBkgnd(CDC* pDC) { CDialog::OnEraseBkgnd(pDC); CRect rcClient; GetClientRect(&rcClient); pDC->FillRect(rcClient, &CBrush(RGB(255, 255, 255))); //225, 242, 250 //画虚线 if (GetDlgItem(IDC_STATIC_ExamTime)->GetSafeHwnd()) { CPen *pOldPen = NULL; CPen pPen; pPen.CreatePen(PS_DASH, 1, RGB(106, 218, 239)); pOldPen = pDC->SelectObject(&pPen); CRect rtTmp; GetDlgItem(IDC_STATIC_ExamTime)->GetWindowRect(rtTmp); ScreenToClient(&rtTmp); CPoint pt1, pt2; pt1.x = rtTmp.left; pt1.y = rtTmp.bottom + 1; pt2.x = pt1.x + 350; pt2.y = pt1.y; pDC->MoveTo(pt1); pDC->LineTo(pt2); pDC->SelectObject(pOldPen); pPen.Detach(); } DrawBorder(pDC); int iX, iY; CDC memDC; BITMAP bmp; if (memDC.CreateCompatibleDC(pDC)) { CBitmap *pOldBmp = memDC.SelectObject(&m_bmpExamType); m_bmpExamType.GetBitmap(&bmp); pDC->SetStretchBltMode(COLORONCOLOR); pDC->StretchBlt(rcClient.right - bmp.bmWidth - 10, 1, bmp.bmWidth, bmp.bmHeight, &memDC, 0, 0, bmp.bmWidth, bmp.bmHeight, SRCCOPY); pOldBmp = memDC.SelectObject(&m_bmpExamTypeLeft); m_bmpExamTypeLeft.GetBitmap(&bmp); pDC->SetStretchBltMode(COLORONCOLOR); pDC->StretchBlt(rcClient.left, rcClient.top, bmp.bmWidth, rcClient.bottom, &memDC, 0, 0, bmp.bmWidth, bmp.bmHeight, SRCCOPY); memDC.SelectObject(pOldBmp); } memDC.DeleteDC(); return TRUE; }
void CLineDiffBar::OnPaint() { CPaintDC dc(this); // device context for painting CRect rect; GetClientRect(rect); int height = rect.Height(); int width = rect.Width(); CDC cacheDC; VERIFY(cacheDC.CreateCompatibleDC(&dc)); cacheDC.FillSolidRect(&rect, ::GetSysColor(COLOR_WINDOW)); if (m_pCacheBitmap == NULL) { m_pCacheBitmap = new CBitmap; VERIFY(m_pCacheBitmap->CreateCompatibleBitmap(&dc, width, height)); } CBitmap *pOldBitmap = cacheDC.SelectObject(m_pCacheBitmap); CRect upperrect = CRect(rect.left, rect.top, rect.right, rect.bottom/2); CRect lowerrect = CRect(rect.left, rect.bottom/2, rect.right, rect.bottom); if ((m_pMainFrm)&&(m_pMainFrm->m_pwndLeftView)&&(m_pMainFrm->m_pwndRightView)) { CLeftView* leftView = m_pMainFrm->m_pwndLeftView; CRightView* rightView = m_pMainFrm->m_pwndRightView; if ((leftView->IsWindowVisible())&&(rightView->IsWindowVisible())) { BOOL bViewWhiteSpace = leftView->m_bViewWhitespace; BOOL bInlineDiffs = leftView->m_bShowInlineDiff; leftView->m_bViewWhitespace = TRUE; leftView->m_bShowInlineDiff = TRUE; leftView->m_bShowSelection = false; rightView->m_bViewWhitespace = TRUE; rightView->m_bShowInlineDiff = TRUE; rightView->m_bShowSelection = false; // Use left and right view to display lines next to each other leftView->DrawSingleLine(&cacheDC, &upperrect, m_nLineIndex); rightView->DrawSingleLine(&cacheDC, &lowerrect, m_nLineIndex); leftView->m_bViewWhitespace = bViewWhiteSpace; leftView->m_bShowInlineDiff = bInlineDiffs; leftView->m_bShowSelection = true; rightView->m_bViewWhitespace = bViewWhiteSpace; rightView->m_bShowInlineDiff = bInlineDiffs; rightView->m_bShowSelection = true; } } VERIFY(dc.BitBlt(rect.left, rect.top, width, height, &cacheDC, 0, 0, SRCCOPY)); cacheDC.SelectObject(pOldBitmap); cacheDC.DeleteDC(); }
BOOL CWinApp::CreatePrinterDC(CDC& dc) { HDC hDC = AfxCreateDC(m_hDevNames, m_hDevMode); if (hDC != NULL) { dc.DeleteDC(); VERIFY(dc.Attach(hDC)); return TRUE; } return FALSE; }
void CxSkinButton::DrawBitmap(CDC* dc, HBITMAP hbmp, RECT r, int DrawMode) { // DrawMode: 0=Normal; 1=stretch; 2=tiled fill if(DrawMode==2){ FillWithBitmap(dc,hbmp,r); return; } if(!hbmp) return; //safe check int cx=r.right - r.left; int cy=r.bottom - r.top; CDC dcBmp,dcMask; dcBmp.CreateCompatibleDC(dc); dcBmp.SelectObject(hbmp); if (m_bMask.m_hObject!=NULL){ dcMask.CreateCompatibleDC(dc); dcMask.SelectObject(m_bMask); CDC hdcMem; hdcMem.CreateCompatibleDC(dc); CBitmap hBitmap; hBitmap.CreateCompatibleBitmap(dc,cx,cy); hdcMem.SelectObject(hBitmap); hdcMem.BitBlt(r.left,r.top,cx,cy,dc,0,0,SRCCOPY); if(!DrawMode){ hdcMem.BitBlt(r.left,r.top,cx,cy,&dcBmp,0,0,SRCINVERT); hdcMem.BitBlt(r.left,r.top,cx,cy,&dcMask,0,0,SRCAND); hdcMem.BitBlt(r.left,r.top,cx,cy,&dcBmp,0,0,SRCINVERT); } else { int bx=GetBitmapWidth(hbmp); int by=GetBitmapHeight(hbmp); hdcMem.StretchBlt(r.left,r.top,cx,cy,&dcBmp,0,0,bx,by,SRCINVERT); hdcMem.StretchBlt(r.left,r.top,cx,cy,&dcMask,0,0,bx,by,SRCAND); hdcMem.StretchBlt(r.left,r.top,cx,cy,&dcBmp,0,0,bx,by,SRCINVERT); } dc->BitBlt(r.left,r.top,cx,cy,&hdcMem,0,0,SRCCOPY); hdcMem.DeleteDC(); hBitmap.DeleteObject(); DeleteDC(dcMask); } else { if(!DrawMode){ dc->BitBlt(r.left,r.top,cx,cy,&dcBmp,0,0,SRCCOPY); } else { int bx=GetBitmapWidth(hbmp); int by=GetBitmapHeight(hbmp); dc->StretchBlt(r.left,r.top,cx,cy,&dcBmp,0,0,bx,by,SRCCOPY); } } DeleteDC(dcBmp); }
void CUserModify2::DrawRangeImage(int i, CDC *pDC, CRect rc){ HBITMAP hBitmap1 = NULL; HBITMAP hBitmap2 = NULL; CBitmap bit[2]; if(hBitmap1 ==NULL||hBitmap2 ==NULL){ hBitmap1 = (HBITMAP)::LoadImage(NULL,_T("images/top.bmp"), IMAGE_BITMAP, 0, 0, LR_DEFAULTSIZE|LR_LOADFROMFILE); hBitmap2 = (HBITMAP)::LoadImage(NULL,_T("images/band.bmp"), IMAGE_BITMAP, 0, 0, LR_DEFAULTSIZE|LR_LOADFROMFILE); if(hBitmap1 == NULL||hBitmap2 == NULL) { AfxMessageBox(_T("无法加载图片")); PostQuitMessage(0); } if (bit[0].m_hObject) bit[0].Detach(); if (bit[1].m_hObject) bit[1].Detach(); bit[0].Attach(hBitmap1); bit[1].Attach(hBitmap2); } CDC MemDC; BITMAP bm; bit[i].GetBitmap(&bm); int li_Width = bm.bmWidth; int li_Height = bm.bmHeight; MemDC.CreateCompatibleDC(pDC); CBitmap* pOldBitmap = MemDC.SelectObject(&bit[i]); int x=rc.left; int y=rc.top; while (y < (rc.Height()+rc.top)) { while(x < (rc.Width()+rc.left)) { pDC->BitBlt(x, y, li_Width, li_Height, &MemDC, 0, 0, SRCCOPY); x += li_Width; } x = rc.left; y += li_Height; } //pDC->StretchBlt(x, y, rc.right - rc.left, rc.bottom - rc.top, &MemDC, 0, 0,2,2 ,SRCCOPY); MemDC.SelectObject(pOldBitmap); MemDC.DeleteDC(); }
// 从一个位图创建一个加上透明颜色的位图 HBITMAP CCatchScreenDlg::CreateTransparentColorBitmap(CDC *pDC, CBitmap* pOrgBitmap, const CRect& rcRect) { // 创建一个与屏幕设备描述表兼容的位图 HBITMAP hBitmap = CreateCompatibleBitmap(pDC->GetSafeHdc(),rcRect.Width() , rcRect.Height()); CDC dcMem; dcMem.CreateCompatibleDC(pDC); // 把新位图选到内存设备描述表中 HBITMAP hOldBitmap = (HBITMAP) dcMem.SelectObject(hBitmap); CDC dcCompatible; dcCompatible.CreateCompatibleDC(CDC::FromHandle(dcMem.m_hDC)); HBITMAP hOldBitmap2 = (HBITMAP)dcCompatible.SelectObject(pOrgBitmap->GetSafeHandle()); dcMem.BitBlt(0, 0, rcRect.Width() , rcRect.Height(),&dcCompatible, 0, 0, SRCCOPY); DrawTransparentColor(&dcMem,rcRect); hBitmap = (HBITMAP)dcMem.SelectObject(hOldBitmap); dcCompatible.SelectObject(hOldBitmap2); dcCompatible.DeleteDC(); dcMem.DeleteDC(); return hBitmap; }
HRGN CSkinWin::GetRegion(int w, int h) { CWnd *pWnd = CWnd::FromHandle(m_hWnd); CRect wr; pWnd->GetWindowRect(wr); //SKIN_SHANG 右边框 //wr.left+=m_BorderRightWidth; CRgn rgn; if ( m_bTrans ) { CDC *pDC = pWnd->GetDC(); CDC memDC; CMyBitmap bmp; CBitmap *obmp; memDC.CreateCompatibleDC(pDC); bmp.CreateCompatibleBitmap( pDC, w, m_TitleHeight ); obmp = memDC.SelectObject(&bmp); /* memDC.FillSolidRect( 0, 0, w, h, 0 ); DrawFrame( &memDC, 0, 0, w, h, 0 ); */ DrawTitle( &memDC, m_BorderLeftWidth , 0, wr.Width() - m_BorderRightWidth - m_BorderLeftWidth + 1, 0 ); DrawLeft( &memDC, 0, 0, m_bmpLeft.Height(), 0 ); //SKIN_SHANG 右边框 DrawRight( &memDC, wr.Width() - m_BorderRightWidth , 0, m_bmpRight.Height(), 0 ); memDC.SelectObject(obmp); //wyw memDC.DeleteDC(); pWnd->ReleaseDC( pDC ); rgn.CreateRectRgn( 0, m_TitleHeight, wr.Width(), wr.Height() ); HRGN hrgn = bmp.CreateRgnFromFile( m_colTrans ); CRgn newrgn; newrgn.CreateRectRgn( 0, m_TitleHeight, wr.Width(), wr.Height() ); newrgn.CombineRgn( &rgn, CRgn::FromHandle(hrgn), RGN_XOR ); //wyw bmp.DeleteObject(); DeleteObject(hrgn); rgn.DeleteObject(); return (HRGN)newrgn.Detach(); } else rgn.CreateRectRgn( 0, 0, wr.Width(), wr.Height() ); return (HRGN)rgn.Detach(); }
//透明绘画 bool CSkinImage::AlphaDrawImage(CDC * pDestDC, int xDest, int yDest, int cxDest, int cyDest, int xSrc, int ySrc, COLORREF crTrans) { //效验状态 if (IsNull()) return false; //建立 DC CDC DCImage; DCImage.CreateCompatibleDC(pDestDC); DCImage.SelectObject(HBITMAP(*this)); DCImage.SetBkColor(crTrans); DCImage.SetBkMode(TRANSPARENT); //建立掩码图 CDC DCMask; CBitmap BMPMask; BMPMask.CreateBitmap(cxDest,cyDest,1,1,NULL); DCMask.CreateCompatibleDC(pDestDC); DCMask.SelectObject(&BMPMask); DCMask.BitBlt(0,0,cxDest,cyDest,&DCImage,xSrc,ySrc,SRCCOPY); //绘画目标图 CDC DCDest; CBitmap BMPDest; DCDest.CreateCompatibleDC(pDestDC); BMPDest.CreateCompatibleBitmap(pDestDC,cxDest,cyDest); DCDest.SelectObject(&BMPDest); DCDest.BitBlt(0,0,cxDest,cyDest,pDestDC,xDest,yDest,SRCCOPY); DCDest.BitBlt(0,0,cxDest,cyDest,&DCImage,xSrc,ySrc,SRCINVERT); DCDest.BitBlt(0,0,cxDest,cyDest,&DCMask,0,0,SRCAND); DCDest.BitBlt(0,0,cxDest,cyDest,&DCImage,xSrc,ySrc,SRCINVERT); pDestDC->BitBlt(xDest,yDest,cxDest,cyDest,&DCDest,0,0,SRCCOPY); //清理资源 DCMask.DeleteDC(); DCDest.DeleteDC(); DCImage.DeleteDC(); BMPMask.DeleteObject(); BMPDest.DeleteObject(); return true; }
CCoolBar::CCoolBar() { m_hNotifyWnd = NULL; m_cyGripper = 12; SetSCBStyle(GetSCBStyle() | SCBS_SIZECHILD); m_bActive = FALSE; CDC dc; dc.CreateCompatibleDC(NULL); m_sFontFace = (::EnumFontFamilies(dc.m_hDC, _T("宋体"), (FONTENUMPROC) EnumFontFamProc, 0) == 0) ? _T("宋体") : _T("Tahoma"); dc.DeleteDC(); }
void ATMFontMan::ValidateCache() { CDC Screen; if (Screen.CreateIC(TEXT("DISPLAY"), 0, 0, 0)) { EnumFontFamilies(Screen.m_hDC, NULL, (FONTENUMPROC) ATMFontMan_CallBackValidateFont, NULL); Screen.DeleteDC(); } }
void ATMFontMan::EnumAllFonts(OILEnumFonts* pClass) { CDC Screen; if (Screen.CreateIC(TEXT("DISPLAY"), 0, 0, 0)) { EnumFontFamilies(Screen.m_hDC, NULL, (FONTENUMPROC) ATMFontMan_CallBackDispatchFont, (LPARAM)pClass); Screen.DeleteDC(); } }
void ATMFontMan::FindClosestFont() { CDC Screen; if (Screen.CreateIC(TEXT("DISPLAY"), 0, 0, 0)) { EnumFontFamilies(Screen.m_hDC, NULL, (FONTENUMPROC) ATMFontMan_CallBackFindClosestFont, NULL); Screen.DeleteDC(); } }
void CSkinComboBox_ListBox::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct) { //变量定义 CRect rcItem=lpDrawItemStruct->rcItem; CDC * pDCControl=CDC::FromHandle(lpDrawItemStruct->hDC); //创建缓冲 CDC BufferDC; CBitmap ImageBuffer; BufferDC.CreateCompatibleDC(pDCControl); ImageBuffer.CreateCompatibleBitmap(pDCControl,rcItem.Width(),rcItem.Height()); //设置环境 BufferDC.SelectObject(&ImageBuffer); BufferDC.SelectObject(GetCtrlFont()); //获取字符 CString strString; GetText(lpDrawItemStruct->itemID,strString); //计算位置 CRect rcString; rcString.SetRect(4,0,rcItem.Width()-8,rcItem.Height()); //颜色定义 COLORREF crTextColor=((lpDrawItemStruct->itemState&ODS_SELECTED)!=0)?m_colSelectText:m_colNormalText; COLORREF crBackColor=((lpDrawItemStruct->itemState&ODS_SELECTED)!=0)?RGB(10,36,106):RGB(255,255,255); //绘画背景 BufferDC.FillSolidRect(0,0,rcItem.Width(),rcItem.Height(),crBackColor); if ( (lpDrawItemStruct->itemState&ODS_SELECTED) != 0 ) { if ( m_pSelectImg!= NULL && !m_pSelectImg->IsNull() ) { rcItem.DeflateRect(1,1,1,1); m_pSelectImg->Draw(&BufferDC,CRect(0,0,rcItem.Width(),rcItem.Height())); } } //绘画字符 BufferDC.SetBkMode(TRANSPARENT); BufferDC.SetTextColor(crTextColor); BufferDC.DrawText(strString,&rcString,DT_VCENTER|DT_SINGLELINE); //绘画界面 pDCControl->BitBlt(rcItem.left,rcItem.top,rcItem.Width(),rcItem.Height(),&BufferDC,0,0,SRCCOPY); //清理资源 BufferDC.DeleteDC(); ImageBuffer.DeleteObject(); }
void CRevisionGraphWnd::BuildPreview() { m_Preview.DeleteObject(); if (!m_bShowOverview) return; // is there a point in drawing this at all? int nodeCount = this->m_Graph.numberOfNodes(); if ((nodeCount > REVGRAPH_PREVIEW_MAX_NODES) || (nodeCount == 0)) return; float origZoom = m_fZoomFactor; CRect clientRect = GetClientRect(); CSize preViewSize (max (REVGRAPH_PREVIEW_WIDTH, clientRect.Width() / 4) ,max (REVGRAPH_PREVIEW_HEIGHT, clientRect.Height() / 4)); // zoom the graph so that it is completely visible in the window CRect graphRect = GetGraphRect(); float horzfact = float(graphRect.Width())/float(preViewSize.cx); float vertfact = float(graphRect.Height())/float(preViewSize.cy); m_previewZoom = min (DEFAULT_ZOOM, 1.0f/(max(horzfact, vertfact))); // make sure the preview window has a minimal size m_previewWidth = (int)min (max (graphRect.Width() * m_previewZoom, 30), preViewSize.cx); m_previewHeight = (int)min (max (graphRect.Height() * m_previewZoom, 30), preViewSize.cy); CClientDC ddc(this); CDC dc; if (!dc.CreateCompatibleDC(&ddc)) return; m_Preview.CreateCompatibleBitmap(&ddc, m_previewWidth, m_previewHeight); HBITMAP oldbm = (HBITMAP)dc.SelectObject (m_Preview); // paint the whole graph DoZoom (m_previewZoom, false); CRect rect (0, 0, m_previewWidth, m_previewHeight); GraphicsDevice dev; dev.pDC = &dc; DrawGraph(dev, rect, 0, 0, true); // now we have a bitmap the size of the preview window dc.SelectObject(oldbm); dc.DeleteDC(); DoZoom (origZoom, false); }
//绘画同意标志 void CUsingSkinClass::DrawArgeeFlag(CDC * pDC, int iXPos, int iYPos) { CGameImageHelper ImageHandle(&m_PicAgree); CDC destdc; destdc.CreateCompatibleDC(pDC); destdc.SelectObject(ImageHandle); ::TransparentBlt(pDC->GetSafeHdc(),iXPos,iYPos,ImageHandle.GetWidth(),ImageHandle.GetHeight(),destdc.GetSafeHdc(),0,0,ImageHandle.GetWidth(),ImageHandle.GetHeight(),destdc.GetPixel(0,0)); //AFCStretchImage(pDC,iXPos,iYPos,AGREE_WIDTH,AGREE_HEIGHT,ImageHandle,0,0,AGREE_WIDTH,AGREE_HEIGHT,RGB(0,128,128)); ///{{ Added by zxd 20100709 释放GDI资源 destdc.DeleteDC(); /// Added by zxd 20100709 释放GDI资源}} return; }
void Process::MyDraw() { CRect rc; pDCShow->GetWindow()->GetClientRect(&rc); pDCShow->Rectangle(&rc); CDC dc; CBitmap *pOldBitmap; dc.CreateCompatibleDC(pDCShow); pOldBitmap=dc.SelectObject(m_pResMap); pDCShow->StretchBlt(0,0,m_nWndWidth,m_nWndHeight,&dc,0,0,m_nWndWidth,m_nWndHeight,SRCCOPY); dc.SelectObject(pOldBitmap); dc.DeleteDC(); }
//透明绘画 bool CUserFaceRes::AlphaDrawImage(CDC * pDestDC, int xDest, int yDest, int cxDest, int cyDest, CDC * pScrDC, int xSrc, int ySrc, int X, int Y) { //效验参数 ASSERT(pScrDC!=NULL); ASSERT(pDestDC!=NULL); //建立 DC pScrDC->SetBkColor(COLOR_TRANS); pScrDC->SetBkMode(TRANSPARENT); //建立掩码图 CDC DCMask; CBitmap BMPMask; BMPMask.CreateBitmap(cxDest,cyDest,1,1,NULL); DCMask.CreateCompatibleDC(pDestDC); DCMask.SelectObject(&BMPMask); DCMask.BitBlt(0,0,cxDest,cyDest,pScrDC,xSrc,ySrc,SRCCOPY); //绘画目标图 CDC DCDest; CBitmap BMPDest; DCDest.CreateCompatibleDC(pDestDC); BMPDest.CreateCompatibleBitmap(pDestDC,cxDest,cyDest); DCDest.SelectObject(&BMPDest); DCDest.BitBlt(0,0,cxDest,cyDest,pDestDC,xDest,yDest,SRCCOPY); DCDest.BitBlt(0,0,cxDest,cyDest,pScrDC,xSrc,ySrc,SRCINVERT); DCDest.BitBlt(0,0,cxDest,cyDest,&DCMask,0,0,SRCAND); DCDest.BitBlt(0,0,cxDest,cyDest,pScrDC,xSrc,ySrc,SRCINVERT); //pDestDC->BitBlt(xDest,yDest,cxDest,cyDest,&DCDest,0,0,SRCCOPY); pDestDC->StretchBlt(xDest,yDest,X/*cxDest*/,Y/*cyDest*/,&DCDest,0,0,cxDest,cyDest,SRCCOPY); //清理资源 DCMask.DeleteDC(); DCDest.DeleteDC(); BMPMask.DeleteObject(); BMPDest.DeleteObject(); return true; }
void CXTPPopupControl::SetRegionAlphaLayer(CXTPImageManagerIcon* pIcon) { if (!pIcon) return; if (!m_pfnUpdateLayeredWindow) return; CXTPImageManagerIconHandle hShadow; hShadow.CopyHandle(pIcon->GetIcon()); if (!hShadow.PreMultiply()) return; PBYTE pBits = hShadow.PreMultiply(); CSize szIcon = hShadow.GetExtent(); int cx = szIcon.cx; int cy = szIcon.cy; BLENDFUNCTION bf; bf.BlendOp = AC_SRC_OVER; bf.BlendFlags = 0; bf.SourceConstantAlpha = 255; bf.AlphaFormat = 0x01; POINT pt = {0, 0}; CClientDC cDC(this); CDC dc; dc.CreateCompatibleDC(&cDC); UINT* pvBits = NULL; HBITMAP hBitmap = CXTPImageManager::Create32BPPDIBSection(cDC, cx, cy, (LPBYTE*)&pvBits); if (pvBits == NULL || hBitmap == NULL) return; MEMCPY_S(pvBits, pBits, cx * cy* 4); HBITMAP hOld = (HBITMAP)SelectObject(dc, hBitmap); ModifyStyleEx(0, WS_EX_LAYERED); m_pfnUpdateLayeredWindow((HWND)GetSafeHwnd(), (HDC)0, 0, &szIcon, dc.GetSafeHdc(), &pt, 0, &bf, 0x02); SelectObject(dc, hOld); DeleteObject(hBitmap); dc.DeleteDC(); m_bLayered = TRUE; }
void CSizingControlBar::OnNcPaint() { // get window DC that is clipped to the non-client area CWindowDC dc(this); CRect rcClient, rcBar; GetClientRect(rcClient); ClientToScreen(rcClient); GetWindowRect(rcBar); rcClient.OffsetRect(-rcBar.TopLeft()); rcBar.OffsetRect(-rcBar.TopLeft()); CDC mdc; mdc.CreateCompatibleDC(&dc); CBitmap bm; bm.CreateCompatibleBitmap(&dc, rcBar.Width(), rcBar.Height()); CBitmap* pOldBm = mdc.SelectObject(&bm); // draw borders in non-client area CRect rcDraw = rcBar; DrawBorders(&mdc, rcDraw); // erase the NC background mdc.FillRect(rcDraw, CBrush::FromHandle( (HBRUSH) GetClassLong(m_hWnd, GCL_HBRBACKGROUND))); if (m_dwSCBStyle & SCBS_SHOWEDGES) { CRect rcEdge; // paint the sizing edges for (int i = 0; i < 4; i++) if (GetEdgeRect(rcBar, GetEdgeHTCode(i), rcEdge)) mdc.Draw3dRect(rcEdge, ::GetSysColor(COLOR_BTNHIGHLIGHT), ::GetSysColor(COLOR_BTNSHADOW)); } NcPaintGripper(&mdc, rcClient); // client area is not our bussiness :) dc.IntersectClipRect(rcBar); dc.ExcludeClipRect(rcClient); dc.BitBlt(0, 0, rcBar.Width(), rcBar.Height(), &mdc, 0, 0, SRCCOPY); // cycy for BoundsChecker Debug //ReleaseDC(&dc); mdc.SelectObject(pOldBm); bm.DeleteObject(); mdc.DeleteDC(); }
//重画函数 void CDlgOptionItem::OnPaint() { CPaintDC dc(this); //获取位置 CRect rcRect; GetClientRect(&rcRect); //建立缓冲 CDC BufferDC; CBitmap BufferBmp; BufferDC.CreateCompatibleDC(&dc); BufferBmp.CreateCompatibleBitmap(&dc,rcRect.Width(),rcRect.Height()); BufferDC.SelectObject(&BufferBmp); //绘画背景 COLORREF crBackGround=CSkinWndObject::m_SkinAttribute.m_crBackGround; BufferDC.FillSolidRect(0,0,rcRect.Width(),TITLE_HEIGHT,crBackGround); //绘画上框 CBrush BackBrush(TITLE_GROUND_COLOR); CPen LinePen(PS_SOLID,1,CSkinWndObject::m_SkinAttribute.m_crInsideBorder); BufferDC.SelectObject(&LinePen); BufferDC.SelectObject(&BackBrush); BufferDC.RoundRect(0,0,rcRect.Width(),TITLE_HEIGHT+10,10,10); //绘画下框 BufferDC.FillSolidRect(0,TITLE_HEIGHT,rcRect.Width(),rcRect.Height()-TITLE_HEIGHT,crBackGround); BufferDC.SelectObject(GetStockObject(NULL_BRUSH)); BufferDC.RoundRect(0,0,rcRect.Width(),rcRect.Height(),10,10); //绘画标题 LPCTSTR pszTitle=GetTitleText(); CRect rcTitil(10,0,rcRect.Width()-20,TITLE_HEIGHT); BufferDC.SetBkMode(TRANSPARENT); BufferDC.SetTextColor(RGB(10,10,10)); BufferDC.SelectObject(CSkinAttribute::m_DefaultFont); BufferDC.DrawText(pszTitle,lstrlen(pszTitle),rcTitil,DT_END_ELLIPSIS|DT_VCENTER|DT_SINGLELINE); //绘画界面 dc.BitBlt(0,0,rcRect.Width(),rcRect.Height(),&BufferDC,0,0,SRCCOPY); //清理资源 BufferDC.DeleteDC(); LinePen.DeleteObject(); BackBrush.DeleteObject(); BufferBmp.DeleteObject(); return; }
//透明绘画 bool CSkinImage::AlphaDrawImage(CDC * pDestDC, INT xDest, INT yDest, INT cxDest, INT cyDest, INT xSrc, INT ySrc, COLORREF crTransColor) { //无效区域 CRect rcDirty; pDestDC->GetClipBox(&rcDirty); //绘画判断 if (IsNull()==true) return false; //位置调整 tagImageRender ImageRender; GetDrawImageArea(xDest,yDest,cxDest,cyDest,xSrc,ySrc,rcDirty,ImageRender); //颜色保存 COLORREF crTextColor=pDestDC->SetTextColor(RGB(0,0,0)); COLORREF crBackColor=pDestDC->SetBkColor(RGB(255,255,255)); //掩码对象 CDC MaskDC; CBitmap MaskImage; MaskDC.CreateCompatibleDC(pDestDC); MaskImage.CreateBitmap(ImageRender.cxRender,ImageRender.cyRender,1,1,NULL); //位图 DC CDC * pDCImage=CDC::FromHandle(GetDC()); COLORREF crImageBkColor=pDCImage->SetBkColor(crTransColor); //构造掩码 MaskDC.SelectObject(&MaskImage); MaskDC.BitBlt(0,0,ImageRender.cxRender,ImageRender.cyRender,pDCImage,ImageRender.nXImage,ImageRender.nYImage,SRCINVERT); //绘画对象 pDestDC->BitBlt(ImageRender.nXScreen,ImageRender.nYScreen,ImageRender.cxRender,ImageRender.cyRender, pDCImage,ImageRender.nXImage,ImageRender.nYImage,SRCINVERT); pDestDC->BitBlt(ImageRender.nXScreen,ImageRender.nYScreen,ImageRender.cxRender,ImageRender.cyRender, &MaskDC,0,0,SRCAND); pDestDC->BitBlt(ImageRender.nXScreen,ImageRender.nYScreen,ImageRender.cxRender,ImageRender.cyRender, pDCImage,ImageRender.nXImage,ImageRender.nYImage,SRCINVERT); //颜色还原 pDestDC->SetBkColor(crBackColor); pDestDC->SetTextColor(crTextColor); //释放资源 ReleaseDC(); MaskDC.DeleteDC(); MaskImage.DeleteObject(); return true; }
CBitmap* LTBitmapBuffer::GetBitmapCopy() { CDC dc; dc.CreateCompatibleDC(p_DC); CBitmap* pbmpNew = new CBitmap; pbmpNew->CreateCompatibleBitmap(p_DC, Width(), Height()); CBitmap* pbmpOld = dc.SelectObject(pbmpNew); dc.BitBlt(0, 0, Width(), Height(), p_DC, 0, 0, SRCCOPY); dc.SelectObject(pbmpOld); dc.DeleteDC(); return pbmpNew; }
void CMyBtn::OnPaint() { CPaintDC dc(this); // device context for painting CRect rcClient; GetClientRect(&rcClient); //内存画图////////////////////////// CDC szMemDC; szMemDC.CreateCompatibleDC(&dc); CBitmap btScreen; btScreen.CreateCompatibleBitmap(&dc, rcClient.Width(), rcClient.Height()); szMemDC.SelectObject(&btScreen); btScreen.DeleteObject(); szMemDC.Rectangle(rcClient); //按妞背景 if(bTrackLeave) //是否离开的标志 { DrawRangeImage(&m_BitmapBack[0],&szMemDC,rcClient); } else { DrawRangeImage(&m_BitmapBack[1],&szMemDC,rcClient); } if(m_btnText.GetLength() > 0) { CSize sz = szMemDC.GetTextExtent(m_btnText); long nLeft = (rcClient.Width() - sz.cx)/2; long nTop = (rcClient.Height() - sz.cy)/2; szMemDC.SetBkMode(TRANSPARENT); szMemDC.SetTextColor(RGB(255,255,255)); szMemDC.TextOut(nLeft,nTop,m_btnText,m_btnText.GetLength()); } //创建不规则窗体 //ChangeWindowRgn(&szMemDC); dc.BitBlt(rcClient.left, rcClient.top, rcClient.Width(), rcClient.Height(), &szMemDC, 0, 0, SRCCOPY); szMemDC.DeleteDC(); }
void CMessageBox::OnPaint() { CPaintDC dc(this); // device context for painting CRect rect; CRect drawrect; GetClientRect(&rect); GetClientRect(&drawrect); //create a memory device-context. This is done to help reduce //screen flicker, since we will paint the entire control to the //off screen device context first. CDC memDC; CBitmap bitmap; memDC.CreateCompatibleDC(&dc); bitmap.CreateCompatibleBitmap(&dc, rect.Width(), rect.Height()); CBitmap* pOldBitmap = memDC.SelectObject(&bitmap); memDC.BitBlt(rect.left, rect.top, rect.Width(), rect.Height(), &dc, 0,0, SRCCOPY); memDC.SetBkMode(TRANSPARENT); memDC.SetBkColor(GetSysColor(COLOR_WINDOW)); memDC.SetTextColor(GetSysColor(COLOR_WINDOWTEXT)); //OnDrawBackground(); drawrect.DeflateRect(MESSAGEBOX_BORDERMARGINX, MESSAGEBOX_BORDERMARGINY); if (m_hIcon != NULL) { DrawIconEx(memDC.m_hDC, drawrect.left, drawrect.top + ((drawrect.Height() - m_szAllButtons.cy - MESSAGEBOX_TEXTBUTTONMARGIN - m_szIcon.cy) / 2), m_hIcon, m_szIcon.cx, m_szIcon.cy, 0, NULL, DI_NORMAL); drawrect.left += m_szIcon.cx + MESSAGEBOX_ICONMARGIN; } DrawHTML(&memDC, drawrect, m_sMessage, m_LogFont); //Copy the memory device context back into the original DC. dc.BitBlt(rect.left, rect.top, rect.Width(), rect.Height(), &memDC, 0,0, SRCCOPY); //Cleanup resources. memDC.SelectObject(pOldBitmap); memDC.DeleteDC(); bitmap.DeleteObject(); }