void DrawBitmap(HDC hdc, int x, int y, HBITMAP hBitmap) { HBITMAP hOldbm; HDC hMemDC; BITMAP bm; POINT ptSize, ptOrg; hMemDC = CreateCompatibleDC(hdc); hOldbm = (HBITMAP)SelectObject(hMemDC, hBitmap); if (hOldbm) { SetMapMode(hMemDC, GetMapMode(hdc)); GetObject(hBitmap, sizeof(BITMAP), (LPSTR)&bm); ptSize.x = bm.bmWidth; ptSize.y = bm.bmHeight; DPtoLP(hdc, &ptSize, 1); ptOrg.x = 0; ptOrg.y = 0; DPtoLP(hMemDC, &ptOrg, 1); BitBlt(hdc, x, y, ptSize.x, ptSize.y, hMemDC, ptOrg.x, ptOrg.y, SRCCOPY); SelectObject(hMemDC, hOldbm); } DeleteDC(hMemDC); }
/* CWallBrowserStretchView() */ CWallBrowserStretchView::CWallBrowserStretchView() { m_pWinAppEx = (CWinAppEx*)AfxGetApp(); m_bLoaded = FALSE; m_bHavePicture = FALSE; memset(m_szFileName,'\0',sizeof(m_szFileName)); m_nViewType = m_pWinAppEx->m_Config.GetNumber(WALLBROWSER_OPTIONS_KEY,WALLBROWSER_VIEWTYPE_KEY); if(m_nViewType==VIEWTYPE_SCROLL) { // modalita' visualizzazione (centrato/isotropic) SetCenterMode(TRUE); SetMapMode(MM_ANISOTROPIC); SetCursorZoomMode(CURSOR_MODE_BYCLICK); } else if(m_nViewType==VIEWTYPE_STRETCH) { // modalita' visualizzazione (centrato/text) SetCenterMode(FALSE); SetMapMode(MM_TEXT); SetCursorZoomMode(CURSOR_MODE_NONE); } m_nDrawMode = m_pWinAppEx->m_Config.GetNumber(WALLBROWSER_OPTIONS_KEY,WALLBROWSER_DRAWMODE_KEY); m_rcInvalid.SetRect(-1,-1,-1,-1); m_rcClient.SetRect(-1,-1,-1,-1); m_ImageOperation.SetImage(NULL); m_ImageDraw.SetImage(NULL); m_bRebuildPalette = FALSE; // mettere a TRUE con le operazioni che cambiano l'immagine (ad es. grayscale) memset(m_szStatus,'\0',sizeof(m_szStatus)); m_pMainFrameStatusBar = NULL; m_nUndoLevel = 0; m_nRedoLevel = 0; m_nLastOperation = -1; m_nRedo = -1; }
void SetHIMETRICtoDP(HDC hdc, SIZE* sz) { POINT pt; int nMapMode = GetMapMode(hdc); if (nMapMode < MM_ISOTROPIC && nMapMode != MM_TEXT) { // when using a constrained map mode, map against physical inch SetMapMode(hdc, MM_HIMETRIC); pt.x = sz->cx; pt.y = sz->cy; LPtoDP(hdc, &pt, 1); sz->cx = pt.x; sz->cy = pt.y; SetMapMode(hdc, nMapMode); } else { // map against logical inch for non-constrained mapping modes int cxPerInch, cyPerInch; cxPerInch = GetDeviceCaps(hdc, LOGPIXELSX); cyPerInch = GetDeviceCaps(hdc, LOGPIXELSY); sz->cx = MulDiv(sz->cx, cxPerInch, HIMETRIC_INCH); sz->cy = MulDiv(sz->cy, cyPerInch, HIMETRIC_INCH); } pt.x = sz->cx; pt.y = sz->cy; DPtoLP(hdc, &pt, 1); sz->cx = pt.x; sz->cy = pt.y; }
RenderContext::RenderContext(Widget* widget) : widget_(widget) , gdi_(NULL) { HDC wnd_dc = BeginPaint(widget->hwnd(), &ps_); SetGraphicsMode(wnd_dc, GM_ADVANCED); SetMapMode(wnd_dc, MM_TEXT); SetBkMode(wnd_dc, OPAQUE); //SetBkMode(wnd_dc, TRANSPARENT); dc_ = ::CreateCompatibleDC(wnd_dc); //dc_ = wnd_dc; SetGraphicsMode(dc_, GM_ADVANCED); SetMapMode(dc_, MM_TEXT); SetBkMode(dc_, OPAQUE); //SetMapMode(dc_, MM_LOENGLISH); //SetWorldTransform(dc_, &Matrix().ToXFORM()); RECT rc; ::GetClientRect(widget->hwnd(), &rc); rect_ = rc; bitmap_ = CreateDIB(rect_.width(), rect_.height()); bitmap_prev_ = (HBITMAP)::SelectObject(dc_, bitmap_); gdi_ = new Gdiplus::Graphics(dc_); }
int TooltipManagerWin::CalcTooltipHeight() { // Ask the tooltip for it's font. int height; HFONT hfont = reinterpret_cast<HFONT>( SendMessage(tooltip_hwnd_, WM_GETFONT, 0, 0)); if(hfont != NULL) { HDC dc = GetDC(tooltip_hwnd_); HFONT previous_font = static_cast<HFONT>(SelectObject(dc, hfont)); int last_map_mode = SetMapMode(dc, MM_TEXT); TEXTMETRIC font_metrics; GetTextMetrics(dc, &font_metrics); height = font_metrics.tmHeight; // To avoid the DC referencing font_handle_, select the previous font. SelectObject(dc, previous_font); SetMapMode(dc, last_map_mode); ReleaseDC(NULL, dc); } else { // Tooltip is using the system font. Use gfx::Font, which should pick // up the system font. height = gfx::Font().GetHeight(); } // Get the margins from the tooltip RECT tooltip_margin; SendMessage(tooltip_hwnd_, TTM_GETMARGIN, 0, (LPARAM)&tooltip_margin); return height + tooltip_margin.top + tooltip_margin.bottom; }
void ALMAPI TABLE_WLAY::Draw(HDC hDC, RECT *clipRect) { RECT tmpRect; BOOL bIntersect; bIntersect = IntersectRect(&tmpRect, clipRect, &m_rcItem); tmpRect = m_rcItem; // always draw to the entire // visual rect if (bIntersect) { OWndLStoDS(m_oiParent, (LPPOINT)&tmpRect, 2); int saveDC = SaveDC(hDC); int mode = SetMapMode(hDC, MM_TEXT); table->WIDR_Draw(hDC, &tmpRect); //widr->rectPtr); SetMapMode(hDC, mode); // restore LOMETRIC mode RestoreDC(hDC, saveDC); if (table->VertScroll()) { UpdateWindow(table->hVertScroll); } if (table->HorzScroll()) { UpdateWindow(table->hHorzScroll); } } }
void __fastcall TTaeQRRichText::Print(int OfsX, int OfsY){ TFormatRange Range; int LogX,LogY,TextLength,OldMapMode; bool HasExpanded; TTaeRichEdit* ARichEdit; Extended Expanded; ARichEdit=ParentRichEdit==NULL?FRichEdit:ParentRichEdit; { register i=sizeof(TFormatRange); register char *c=(char *) &Range; while(i--) *c++=0; } Range.hdc= ParentReport->QRPrinter->Canvas->Handle; Range.hdcTarget= Range.hdc; LogX= GetDeviceCaps(Range.hdc, LOGPIXELSX); LogY= GetDeviceCaps(Range.hdc, LOGPIXELSY); Range.rc=Rect(QRPrinter->XPos(OfsX + Size->Left) * 1440 / LogX, QRPrinter->YPos(OfsY + Size->Top) * 1440 / LogY, QRPrinter->XPos(OfsX + Size->Width + Size->Left) * 1440 / LogX, QRPrinter->YPos(OfsY + Size->Height + Size->Top) * 1440 / LogY); Range.rcPage=Rect(0,0, QRPrinter->XSize(QRPrinter->PaperWidth) * 1440 / LogX, QRPrinter->YSize(QRPrinter->PaperLength) * 1440 / LogY); if(PrintFinished) LastChar= 0; HasExpanded=false; Expanded=0; TextLength=ARichEdit->GetTextLen(); Range.chrg.cpMax= -1; Range.chrg.cpMin= LastChar; OldMapMode= SetMapMode(Range.hdc, MM_TEXT); SendMessage(ARichEdit->Handle, EM_FORMATRANGE,0,0); LastChar= SendMessage(ARichEdit->Handle, EM_FORMATRANGE, 0, (long)&Range); if(LastChar<TextLength&&AutoStretch&&TextLength>0&&Parent->InheritsFrom(__classid(TQRCustomBand))){ PrintFinished=false; while(LastChar<=TextLength&&((TQRCustomBand*)Parent)->CanExpand(50)){ ((TQRCustomBand*)Parent)->ExpandBand(50,Expanded,HasExpanded); Range.rc.bottom = QRPrinter->YPos(OfsY+Size->Top+Size->Height+Expanded) * 1440 / LogY; LastChar= SendMessage(ARichEdit->Handle, EM_FORMATRANGE, 0, (long)&Range); } LastChar= SendMessage(ARichEdit->Handle, EM_FORMATRANGE, 1, (long)&Range); if(LastChar>=TextLength||LastChar==-1){ LastChar=TextLength; PrintFinished=true; } } else { LastChar= SendMessage(ARichEdit->Handle, EM_FORMATRANGE, 1, (long)&Range); PrintFinished=true; inherited::Print(OfsX,OfsY); } SetMapMode(ParentReport->QRPrinter->Canvas->Handle, OldMapMode); if(PrintFinished) SendMessage(ARichEdit->Handle, EM_FORMATRANGE, 0, 0); }
void CLCDGfx::DrawText(int nX, int nY, LPCTSTR sText) { // map mode text, with transparency int nOldMapMode = SetMapMode(m_hDC, MM_TEXT); int nOldBkMode = SetBkMode(m_hDC, TRANSPARENT); ::TextOut(m_hDC, nX, nY, sText, (int)_tcslen(sText)); // restores SetMapMode(m_hDC, nOldMapMode); SetBkMode(m_hDC, nOldBkMode); }
static void CalculateWindowHeight(void) { HDC hdc = GetDC(GetDesktopWindow()); int oldMapMode = SetMapMode(hdc,MM_TEXT); HFONT hOldFont = (HFONT) SelectObject(hdc,GetFont(FONT_INPUT)); TEXTMETRIC tm; GetTextMetrics(hdc,&tm); inputHeight = tm.tmHeight + tm.tmInternalLeading; SelectObject(hdc,hOldFont); SetMapMode(hdc,oldMapMode); ReleaseDC(GetDesktopWindow(),hdc); }
void BDRAW_TransparentBlt (HDC hdc, COLORREF clrTran) { // // Method #1 -- By Jeff Prosise // HDC hdcImage, hdcAnd, hdcXor, hdcTemp ; HBITMAP htAnd, htXor, htTemp ; HBITMAP htOldImage, htOldAnd, htOldXor, htOldTemp ; int nImage, nAnd, nXor, nTemp ; hdcImage = CreateCompatibleDC (hdc) ; htOldImage = (HBITMAP) SelectObject (hdcImage, BoardCfg.htTemp) ; nImage = SetMapMode (hdcImage, GetMapMode (hdc)) ; hdcAnd = CreateCompatibleDC (hdc) ; nAnd = SetMapMode (hdcAnd, GetMapMode (hdc)) ; htAnd = CreateBitmap (BoardCfg.nss, BoardCfg.nss, 1, 1, NULL) ; htOldAnd = (HBITMAP) SelectObject (hdcAnd, htAnd) ; SetBkColor (hdcImage, clrTran) ; BitBlt (hdcAnd, 0, 0, BoardCfg.nss, BoardCfg.nss, hdcImage, 0, 0, SRCCOPY) ; hdcXor = CreateCompatibleDC (hdc) ; nXor = SetMapMode (hdcXor, GetMapMode (hdc)) ; htXor = CreateCompatibleBitmap (hdcImage, BoardCfg.nss, BoardCfg.nss) ; htOldXor = (HBITMAP) SelectObject (hdcXor, htXor) ; BitBlt (hdcXor, 0, 0, BoardCfg.nss, BoardCfg.nss, hdcImage, 0, 0, SRCCOPY ) ; BitBlt (hdcXor, 0, 0, BoardCfg.nss, BoardCfg.nss, hdcAnd, 0, 0, 0x220326) ; hdcTemp = CreateCompatibleDC (hdc) ; nTemp = SetMapMode (hdcTemp, GetMapMode (hdc)) ; htTemp = CreateCompatibleBitmap (hdcImage, BoardCfg.nss, BoardCfg.nss) ; htOldTemp = (HBITMAP) SelectObject (hdcTemp, htTemp) ; BitBlt (hdcTemp, 0, 0, BoardCfg.nss, BoardCfg.nss, hdc, 0, 0, SRCCOPY ) ; BitBlt (hdcTemp, 0, 0, BoardCfg.nss, BoardCfg.nss, hdcAnd, 0, 0, SRCAND ) ; BitBlt (hdcTemp, 0, 0, BoardCfg.nss, BoardCfg.nss, hdcXor, 0, 0, SRCINVERT) ; BitBlt (hdc, 0, 0, BoardCfg.nss, BoardCfg.nss, hdcTemp, 0, 0, SRCCOPY ) ; SetMapMode (hdcTemp, nTemp ) ; SetMapMode (hdcXor, nXor ) ; SetMapMode (hdcAnd, nAnd ) ; SetMapMode (hdcImage, nImage) ; SelectObject (hdcTemp, htOldTemp ) ; SelectObject (hdcXor, htOldXor ) ; SelectObject (hdcAnd, htOldAnd ) ; SelectObject (hdcImage, htOldImage) ; DeleteObject (hdcTemp ) ; DeleteObject (hdcXor ) ; DeleteObject (hdcAnd ) ; DeleteObject (hdcImage) ; DeleteObject (htTemp ) ; DeleteObject (htXor ) ; DeleteObject (htAnd ) ; }
///////////////////////////////////////////////////////////////////// // TMapDC // ------ // void TMapDC::SetupOrg() { #ifdef WINDOWS_SCALING // Set window and viewport scale and extension SetMapMode (MM_ANISOTROPIC); SetViewportOrg (TPoint(ScrCenterX, ScrCenterY)); SetWindowOrg (TPoint(OrigX, OrigY)) ; if ( Scale > 1.0 ) { // dc.SetWindowExt (TSize(ScrMaxX, ScrMaxY)); // dc.SetViewportExt (TSize(ScrMaxX * MUL_SCALE, -ScrMaxY * MUL_SCALE)); SetWindowExt (TSize(1, 1)); SetViewportExt (TSize(MUL_SCALE, -MUL_SCALE)); } else if (Scale <= 1.0 ) { SetWindowExt (TSize(ScrMaxX * DIV_SCALE, ScrMaxY * DIV_SCALE)); SetViewportExt (TSize(ScrMaxX, -ScrMaxY)); } /* for (int x = MIN_MAP_X ; x <= MAX_MAP_X ; x+=1000) for (SHORT y = MIN_MAP_Y ; y <= MAX_MAP_Y ; y+=1000) { char msg[80]; wsprintf (msg,"(%d:%d)", x/1000, y/1000); dc.TextOut (x, y, msg); } */ #endif }
void WinPaint::paint(HDC hdc){ HPEN hP; //¶¨Ò廱ʾä±ú HBRUSH hB; //¶¨Òå»Ë¢¾ä±ú SetMapMode(hdc,MM_TEXT); hB=CreateSolidBrush(RGB(255,255,255)); SelectObject(hdc,hB); Rectangle(hdc,0,0,2000,2000); hP=CreatePen(PS_SOLID,1,RGB(255,0,0)); SelectObject(hdc,hP); DeleteObject(hB); DeleteObject(hP); for(unsigned i = 0; i < roles.size(); i++){ hB=CreateSolidBrush(RGB(i*37 % 255,i*111 % 255,i*153 % 255)); SelectObject(hdc,hB); RECT rect = getRect(roles[i]->getAABB()); Rectangle(hdc,rect.left,rect.top,rect.right,rect.bottom); DeleteObject(hB); } hP=CreatePen(PS_SOLID,1,RGB(0,0,255)); hB=CreateHatchBrush(HS_CROSS,RGB(0,255,0));//ÂÌÉ«Íø×´ SelectObject(hdc,hP); SelectObject(hdc,hB); //¸üлˢ£¬Óá°ÂÌÉ«Íø×´¡± for(unsigned i = 0; i < houses.size(); i++){ RECT rect = getRect(houses[i]->getAABB()); Rectangle(hdc,rect.left,rect.top,rect.right,rect.bottom); } DeleteObject(hB); DeleteObject(hP); }
// petzold, pp 621-622 void DrawBitmap(HDC hdc, HBITMAP hBitmap, int xStart, int yStart) { BITMAP bm; HDC hdcMem; POINT ptSize, ptOrg; hdcMem = CreateCompatibleDC(hdc); SelectObject(hdcMem, hBitmap); SetMapMode(hdcMem, GetMapMode(hdc)); GetObject(hBitmap, sizeof(BITMAP), (LPSTR) &bm); ptSize.x = bm.bmWidth; ptSize.y = bm.bmHeight; DPtoLP(hdc, &ptSize, 1); ptOrg.x = 0; ptOrg.y = 0; DPtoLP(hdcMem, &ptOrg, 1); BitBlt(hdc, xStart, yStart, ptSize.x, ptSize.y, hdcMem, ptOrg.x, ptOrg.y, SRCCOPY); DeleteDC(hdcMem); }
void PageGDICalls (HDC hdcPrn, int cxPage, int cyPage) { static TCHAR szTextStr[] = TEXT ("Hello, Printer!") ; Rectangle (hdcPrn, 0, 0, cxPage, cyPage) ; MoveToEx (hdcPrn, 0, 0, NULL) ; LineTo (hdcPrn, cxPage, cyPage) ; MoveToEx (hdcPrn, cxPage, 0, NULL) ; LineTo (hdcPrn, 0, cyPage) ; SaveDC (hdcPrn) ; SetMapMode (hdcPrn, MM_ISOTROPIC) ; SetWindowExtEx (hdcPrn, 1000, 1000, NULL) ; SetViewportExtEx (hdcPrn, cxPage / 2, -cyPage / 2, NULL) ; SetViewportOrgEx (hdcPrn, cxPage / 2, cyPage / 2, NULL) ; Ellipse (hdcPrn, -500, 500, 500, -500) ; SetTextAlign (hdcPrn, TA_BASELINE | TA_CENTER) ; TextOut (hdcPrn, 0, 0, szTextStr, lstrlen (szTextStr)) ; RestoreDC (hdcPrn, -1) ; }
void SetIsotropic(HDC hdc, int cxClient, int cyClient) { SetMapMode(hdc, MM_ISOTROPIC); SetWindowExtEx(hdc, 1000, 1000, NULL); SetViewportExtEx(hdc, cxClient / 2, -cyClient / 2, NULL); SetViewportOrgEx(hdc, cxClient / 2, cyClient / 2, NULL); }
void DrawBitmap(HDC hdc, const Irect& r, u32* data, u32 w, u32 h) { BITMAPINFO bmi; bmi.bmiHeader.biSize = sizeof(BITMAPINFOHEADER); bmi.bmiHeader.biWidth = w; bmi.bmiHeader.biHeight = h; bmi.bmiHeader.biPlanes = 1; bmi.bmiHeader.biBitCount = 32; bmi.bmiHeader.biCompression = BI_RGB; bmi.bmiHeader.biSizeImage = 0; bmi.bmiHeader.biXPelsPerMeter = 0; bmi.bmiHeader.biYPelsPerMeter = 0; bmi.bmiHeader.biClrUsed = 0; bmi.bmiHeader.biClrImportant = 0; SetMapMode (hdc, MM_ANISOTROPIC ); SetStretchBltMode(hdc, HALFTONE ); int err = StretchDIBits ( hdc, r.x1, r.y1, (r.x2-r.x1), (r.y2-r.y1), 0, 0, w, h, data, &bmi, DIB_RGB_COLORS, SRCCOPY); if (err==GDI_ERROR){ Log("!StretchDIBits - Draw failed."); } }
void startPrint(HWND hWnd, char *dirpath, char *filename, char* maptitle) { char *pdfDriver = "Win2PDF"; pdfDC = CreateDC("WINSPOOL", pdfDriver, NULL, NULL); if (!pdfDC) { error_stop("cannot open PDF driver: ", pdfDriver); } int horzres = GetDeviceCaps(pdfDC, HORZRES); int vertres = GetDeviceCaps(pdfDC, VERTRES); // Let's find the aspect ratio of the page double aspectRatio = (double) vertres / (double)horzres; pageWidth = DESIRED_PAGE_WIDTH; pageHeight = (int)((double)DESIRED_PAGE_WIDTH * aspectRatio); SetMapMode(pdfDC, MM_ISOTROPIC); SetViewportExtEx(pdfDC, horzres, vertres, NULL); SetWindowExtEx(pdfDC, pageWidth, pageHeight, NULL); DOCINFO docInfo = {0}; docInfo.cbSize = sizeof(docInfo); char fullpath[MAX_PATH] = {0}; strcpy_s(fullpath, sizeof(fullpath), dirpath); strcat_s(fullpath, sizeof(fullpath), filename); docInfo.lpszDocName = filename; docInfo.lpszOutput = fullpath; StartDoc(pdfDC, &docInfo); StartPage(pdfDC); }
void DrawTime(HWND hwnd, HBRUSH hBrushRed) { PAINTSTRUCT ps; HDC hdc; hdc = BeginPaint(hwnd, &ps); SetMapMode(hdc, MM_ISOTROPIC); SetWindowExtEx(hdc, WINDOW_WIDTH, WINDOW_HEIGHT, NULL); SetViewportExtEx(hdc, WINDOW_WIDTH / 2, WINDOW_HEIGHT / 2, NULL); SelectObject(hdc, GetStockObject(NULL_PEN)); SelectObject(hdc, hBrushRed); SetBkMode(hdc, TRANSPARENT); if (n_chess % 2 + 1 == 1) { SetViewportOrgEx(hdc, PLAYER1_TIME_X1, PLAYER1_TIME_Y1, NULL); _DisplayTime(hwnd, hdc); SetViewportOrgEx(hdc, PLAYER2_TIME_X1 - 80, PLAYER2_TIME_Y1, NULL); DisplayTwoDigits(hdc, 0, FALSE); DisplayColon(hdc); DisplayTwoDigits(hdc, 0, FALSE); } else { SetViewportOrgEx(hdc, PLAYER1_TIME_X1, PLAYER1_TIME_Y1, NULL); DisplayTwoDigits(hdc, 0, FALSE); DisplayColon(hdc) ; DisplayTwoDigits(hdc, 0, FALSE); SetViewportOrgEx (hdc, PLAYER2_TIME_X1 - 80, PLAYER2_TIME_Y1, NULL); _DisplayTime(hwnd, hdc); } EndPaint(hwnd,&ps); }
/** ** Higher-level interface: Output Enhanced META File format (-m emf) **/ int to_emf(const GEN_PAR * pg, const OUT_PAR * po) { HANDLE outDC; int err = 0; if (!pg->quiet) Eprintf("\n\n- Writing emf code to \"%s\"\n", *po->outfile == '-' ? "stdout" : po->outfile); /* Init. */ if (*po->outfile != '-') { if ((outDC = CreateEnhMetaFile(NULL, po->outfile, NULL, "hp2xx\0\0")) == 0) { PError("hp2xx (emf)"); return ERROR; } } else { PError("hp2xx (Cant send metafile to stdout emf)"); return ERROR; } SetMapMode(outDC, MM_ANISOTROPIC); SetViewportExtEx(outDC, 10, -10, NULL); // size mult err = plotit(outDC, pg, po); CloseEnhMetaFile(outDC); if (!pg->quiet) { Eprintf("\nlines=%d moves=%d", lines, moves); Eprintf("\n"); } return err; }
static void MaskRegion( HDC hdc, RECT * rct, COLORREF cTransparentColor, COLORREF cBackgroundColor ) { HDC hdcTemp, hdcObject, hdcBack, hdcMem; POINT ptSize; COLORREF cColor; HBITMAP bmAndObject, bmAndBack, bmBackOld, bmObjectOld, bmAndTemp, bmTempOld, bmAndMem, bmMemOld; HBRUSH hBrush, hBrOld; ptSize.x = rct->right - rct->left + 1; ptSize.y = rct->bottom - rct->top + 1; hBrush = CreateSolidBrush(cBackgroundColor); hdcTemp = CreateCompatibleDC(hdc); hdcObject = CreateCompatibleDC(hdc); hdcBack = CreateCompatibleDC(hdc); hdcMem = CreateCompatibleDC(hdc); bmAndTemp = CreateCompatibleBitmap(hdc, ptSize.x, ptSize.y); bmAndMem = CreateCompatibleBitmap(hdc, ptSize.x, ptSize.y); bmAndObject = CreateBitmap(ptSize.x, ptSize.y, 1, 1, NULL); bmAndBack = CreateBitmap(ptSize.x, ptSize.y, 1, 1, NULL); bmTempOld = SelectObject(hdcTemp, bmAndTemp); bmMemOld = SelectObject(hdcMem, bmAndMem); bmBackOld = SelectObject(hdcBack, bmAndBack); bmObjectOld = SelectObject(hdcObject, bmAndObject); hBrOld = SelectObject(hdcMem, hBrush); BitBlt(hdcTemp, 0, 0, ptSize.x, ptSize.y, hdc, rct->left, rct->top, SRCCOPY); SetMapMode(hdcTemp, GetMapMode(hdc)); cColor = SetBkColor(hdcTemp, cTransparentColor); BitBlt(hdcObject, 0, 0, ptSize.x, ptSize.y, hdcTemp, 0, 0, SRCCOPY); SetBkColor(hdcTemp, cColor); BitBlt(hdcBack, 0, 0, ptSize.x, ptSize.y, hdcObject, 0, 0, NOTSRCCOPY); PatBlt(hdcMem, 0,0, ptSize.x, ptSize.y, PATCOPY); BitBlt(hdcMem, 0, 0, ptSize.x, ptSize.y, hdcObject, 0, 0, SRCAND); BitBlt(hdcTemp, 0, 0, ptSize.x, ptSize.y, hdcBack, 0, 0, SRCAND); BitBlt(hdcMem, 0, 0, ptSize.x, ptSize.y, hdcTemp, 0, 0, SRCPAINT); BitBlt(hdc, rct->left, rct->top, ptSize.x, ptSize.y, hdcMem, 0, 0, SRCCOPY); DeleteObject(SelectObject(hdcMem, hBrOld)); DeleteObject(SelectObject(hdcTemp, bmTempOld)); DeleteObject(SelectObject(hdcMem, bmMemOld)); DeleteObject(SelectObject(hdcBack, bmBackOld)); DeleteObject(SelectObject(hdcObject, bmObjectOld)); DeleteDC(hdcMem); DeleteDC(hdcBack); DeleteDC(hdcObject); DeleteDC(hdcTemp); }
Renderer::Renderer() { m_hDC = CreateCompatibleDC(NULL); SetBkMode(m_hDC, TRANSPARENT); SetTextColor(m_hDC, 0xffffff); SetMapMode(m_hDC, MM_TEXT); }
/* WinDrawBitmap must be used for drawing bitmaps on screen. For reasons of efficiency it uses memory device context, BitBlt, and bitmap handle. */ void WinDrawBitmap (int w, int h, int destx, int desty, HBITMAP hbmp, OSPictContext context ) { HDC compatibleDC; POINT size, origin, dest; HGDIOBJ prevObj; size.x = w; size.y = h; origin.x = 0; origin.y = 0; dest.x = destx; dest.y = desty; // Create a compatible device context compatibleDC = CreateCompatibleDC (context->hDC); if (compatibleDC == NULL) rMessageBox (NULL,MB_APPLMODAL,"WinDrawBitmap","CreateCompatibleDC failed"); // Select bitmap into compatible device context prevObj = SelectObject (compatibleDC, hbmp); SetMapMode (compatibleDC, GetMapMode (context->hDC)); DPtoLP (context->hDC, &size, 1); DPtoLP (context->hDC, &dest, 1); DPtoLP (compatibleDC, &origin, 1); BitBlt (context->hDC, dest.x, dest.y, size.x, size.y, compatibleDC, origin.x, origin.y, SRCCOPY); SelectObject (compatibleDC, prevObj); DeleteDC (compatibleDC); } /* WinDrawBitmap */
void CMFC_DemoView::OnDraw(CDC* pDC) { CMFC_DemoDoc* pDoc = GetDocument(); ASSERT_VALID(pDoc); if (!pDoc) return; // TODO: 在此处为本机数据添加绘制代码 CClientDC hdc(this); SetMapMode(hdc, MM_ANISOTROPIC); //设置映像模式 HPEN hP = (HPEN)GetStockObject(BLACK_PEN); //黑色画笔 HBRUSH hB = (HBRUSH)GetStockObject(DKGRAY_BRUSH); //画刷 SelectObject(hdc, hB); //选择画刷 SelectObject(hdc, hP); //选择画笔 RoundRect(hdc, 50, 120, 100, 200, 15, 15); //绘制圆角矩形 hB = (HBRUSH)GetStockObject(LTGRAY_BRUSH); //采用亮灰色画刷 SelectObject(hdc, hB); //选择画刷 Ellipse(hdc, 150, 50, 200, 150); //绘制椭圆 hB = (HBRUSH)GetStockObject(HOLLOW_BRUSH); //虚画刷 SelectObject(hdc, hB); //选择画刷 Pie(hdc, 250, 50, 300, 100, 250, 50, 300, 50); //绘制饼形 hP = CreatePen(PS_DASHDOT, 1, RGB(0, 0, 255)); hB = CreateHatchBrush(HS_HORIZONTAL, RGB(0, 255, 0)); SelectObject(hdc, hP); SelectObject(hdc, hB); RoundRect(hdc, 35, 220, 115, 270, 15, 15); Ellipse(hdc, 125, 170, 225, 220); Pie(hdc, 250, 120, 300, 170, 300, 120, 300, 170); }
//KMemDC KMemDC::KMemDC(HDC hDC, const RECT* pRect):KDC(){ assert(hDC!=NULL); // Some initialization m_hDCPaint=hDC; // Get the rectangle to draw if(!pRect) ::GetClipBox(hDC,&m_rect); else m_rect=*pRect; // Create a Memory DC CreateCompatibleDC(hDC); ::LPtoDP(hDC,(POINT*)(&m_rect),2); m_bitmap=::CreateCompatibleBitmap(hDC, m_rect.right-m_rect.left,m_rect.bottom-m_rect.top); m_oldBitmap=(HBITMAP)SelectObject(m_bitmap); SetMapMode(::GetMapMode(hDC)); SIZE size; ::GetWindowExtEx(hDC,&size); SetWindowExt(size); ::GetViewportExtEx(hDC,&size); SetViewportExt(size); ::DPtoLP(hDC,(POINT*)(&m_rect),2); SetWindowOrg(m_rect.left, m_rect.top); // Fill background FillSolidRect(&m_rect, ::GetBkColor(hDC)); }
void rectdraw0(long *w, long *x, long *y, long lw) { char tmppath[MAX_PATH], fname[MAX_PATH]; struct plot_eng plotWin32; HDC hEmf; int bg_r,bg_g,bg_b; GetTempPath(sizeof(tmppath), tmppath); sprintf(fname, "%s\\gp-ploth-%lx.emf", tmppath, time(NULL)/(24*60*60)*1000+GetTickCount()); hEmf = CreateEnhMetaFile(GetDC(NULL), fname, NULL, NULL); SetMapMode(hEmf, MM_TEXT); SelectObject(hEmf, GetStockObject(DEFAULT_GUI_FONT)); color_to_rgb(gel(GP_DATA->colormap,1), &bg_r, &bg_g, &bg_b); SetBkColor(hEmf, RGB(bg_r,bg_g,bg_b)); SetBkMode(hEmf, OPAQUE); plotWin32.sc=&SetForeground; plotWin32.pt=&DrawPoint; plotWin32.ln=&DrawLine; plotWin32.bx=&DrawRectangle; plotWin32.mp=&DrawPoints; plotWin32.ml=&DrawLines; plotWin32.st=&DrawString; plotWin32.pl=&pari_plot; plotWin32.data=(void*)hEmf; gen_rectdraw0(&plotWin32, w, x, y, lw, 1, 1); DeleteEnhMetaFile(CloseEnhMetaFile(hEmf)); ShellExecute(NULL,NULL,fname,NULL,NULL,SW_SHOWDEFAULT); }
static GpStatus METAFILE_PlaybackGetDC(GpMetafile *metafile) { GpStatus stat = Ok; stat = GdipGetDC(metafile->playback_graphics, &metafile->playback_dc); if (stat == Ok) { /* The result of GdipGetDC always expects device co-ordinates, but the * device co-ordinates of the source metafile do not correspond to * device co-ordinates of the destination. Therefore, we set up the DC * so that the metafile's bounds map to the destination points where we * are drawing this metafile. */ SetMapMode(metafile->playback_dc, MM_ANISOTROPIC); SetWindowOrgEx(metafile->playback_dc, metafile->bounds.X, metafile->bounds.Y, NULL); SetWindowExtEx(metafile->playback_dc, metafile->bounds.Width, metafile->bounds.Height, NULL); SetViewportOrgEx(metafile->playback_dc, metafile->playback_points[0].X, metafile->playback_points[0].Y, NULL); SetViewportExtEx(metafile->playback_dc, metafile->playback_points[1].X - metafile->playback_points[0].X, metafile->playback_points[2].Y - metafile->playback_points[0].Y, NULL); } return stat; }
//******************************************************************* // helper to set scaling for print/preview static void SetScale(HDC dc, int uthei, int utwi, const OUT_PAR * po) { int width, height, mul, div; float yfact, xfact; long left, right, low, high; low = (int) (po->ymin - MARGIN); high = (int) (po->ymax + MARGIN); left = (int) po->xmin - MARGIN; right = (int) po->xmax + MARGIN; width = right - left; height = high - low; //to this point only used dest coords yfact = uthei / (float) height; xfact = utwi / (float) width; SetMapMode(dc, MM_ANISOTROPIC); if (fabs(yfact) < fabs(xfact)) { div = height; mul = uthei; } else { div = width; mul = utwi; } SetViewportExtEx(dc, mul, -mul, NULL); // size mult SetWindowExtEx(dc, div, div, NULL); // size divisor SetWindowOrgEx(dc, left, high, NULL); // where was origo SetViewportOrgEx(dc, 0, 0, NULL); // where do i want origo }
// New constructor that takes origin and extent. If you use this, don't // give origin/extent arguments to wxMakeMetafilePlaceable. wxMetafileDCImpl::wxMetafileDCImpl( wxDC *owner, const wxString& file, int WXUNUSED(xext), int WXUNUSED(yext), int WXUNUSED(xorg), int WXUNUSED(yorg) ) : wxPMDCImpl(owner) { m_minX = 10000; m_minY = 10000; m_maxX = -10000; m_maxY = -10000; if (!file.empty() && wxFileExists(file)) wxRemoveFile(file); // m_hDC = (WXHDC) CreateMetaFile(file); m_ok = true; // ::SetWindowOrgEx((HDC) m_hDC,xorg,yorg, NULL); // ::SetWindowExtEx((HDC) m_hDC,xext,yext, NULL); // Actual Windows mapping mode, for future reference. m_windowsMappingMode = MM_ANISOTROPIC; SetMapMode(wxMM_TEXT); // NOTE: does not set HDC mapmode (this is correct) }
// Original constructor that does not takes origin and extent. If you use this, // *DO* give origin/extent arguments to wxMakeMetafilePlaceable. wxMetafileDCImpl::wxMetafileDCImpl(wxDC *owner, const wxString& file) : wxMSWDCImpl(owner) { m_metaFile = NULL; m_minX = 10000; m_minY = 10000; m_maxX = -10000; m_maxY = -10000; // m_title = NULL; if ( wxFileExists(file) ) wxRemoveFile(file); if ( file.empty() ) m_hDC = (WXHDC) CreateMetaFile(NULL); else m_hDC = (WXHDC) CreateMetaFile(file); m_ok = (m_hDC != (WXHDC) 0) ; // Actual Windows mapping mode, for future reference. m_windowsMappingMode = wxMM_TEXT; SetMapMode(wxMM_TEXT); // NOTE: does not set HDC mapmode (this is correct) }
void RedrawClientArea(HWND hWnd, HDC hDC) { HDC hDCMem; if (hBitmap) { GetBitmapPosition(hWnd); hDCMem = CreateCompatibleDC(hDC); SelectObject (hDCMem, hBitmap); SetMapMode (hDCMem, GetMapMode(hDC)); if (hPalette) { SelectPalette(hDC, hPalette, FALSE); RealizePalette(hDC); SelectPalette(hDCMem, hPalette, FALSE); RealizePalette(hDCMem); } BitBlt(hDC, offset_x, offset_y, pbmi->bmiHeader.biWidth, pbmi->bmiHeader.biHeight, hDCMem, 0, 0, SRCCOPY); DeleteDC(hDCMem); } return; }