Пример #1
0
void CAutoPFAView::OnPrepareDC(CDC* pDC, CPrintInfo* pInfo) 
{
	// TODO: Add your specialized code here and/or call the base class
	
	CScrollView::OnPrepareDC(pDC, pInfo);
	pDC->SetMapMode(MM_ANISOTROPIC);
	CPoint ptVpOrg(0, 0);
	ptVpOrg = -GetDeviceScrollPosition();
	pDC->SetViewportOrg(ptVpOrg);
	int xLogPixPerInch = pDC->GetDeviceCaps(LOGPIXELSX);
	int yLogPixPerInch = pDC->GetDeviceCaps(LOGPIXELSY);
	pDC->SetWindowExt(xLogPixPerInch,yLogPixPerInch);
	pDC->SetViewportExt( (int)(xLogPixPerInch*m_Scale),
		                 (int)(yLogPixPerInch*m_Scale));
	m_xWindowExt = xLogPixPerInch;
	m_yWindowExt = yLogPixPerInch;
	m_xWindowOrg = 0;
	m_xViewOrg = ptVpOrg.x;
	m_yWindowOrg = 0;
	m_yViewOrg = ptVpOrg.y;
	m_xViewExt = xLogPixPerInch*m_Scale;
	m_yViewExt = yLogPixPerInch*m_Scale;

	CAutoPFADoc* pDoc = GetDocument();
	ASSERT_VALID(pDoc);
	CFont Font;
	Font.CreateFontIndirect(&pDoc->m_workSpaceRef.GetFont());
	pDC->SelectObject(&Font);
    pDC->SetBkMode(TRANSPARENT);
	pDC->SetTextAlign(TA_CENTER);
}
Пример #2
0
void CScrollWnd::OnPrepareDC(CDC* pDC, CPrintInfo* pInfo)
{
	ASSERT_VALID(pDC);
	
#ifdef _DEBUG
	if (m_nMapMode == MM_NONE)
	{
		TRACE0("Error: must call SetScrollSizes() or SetScaleToFitSize()");
		TRACE0("\tbefore painting scroll Wnd.\n");
		ASSERT(FALSE);
		return;
	}
#endif //_DEBUG
	ASSERT(m_totalDev.cx >= 0 && m_totalDev.cy >= 0);
	switch (m_nMapMode)
	{
	case MM_SCALETOFIT:
		pDC->SetMapMode(MM_ANISOTROPIC);
		pDC->SetWindowExt(m_totalLog);  // window is in logical coordinates
		pDC->SetViewportExt(m_totalDev);
		if (m_totalDev.cx == 0 || m_totalDev.cy == 0)
			TRACE0("Warning: CScrollWnd scaled to nothing.\n");
		break;
		
	default:
		ASSERT(m_nMapMode > 0);
		pDC->SetMapMode(m_nMapMode);
		break;
	}
	
	CPoint ptVpOrg(0, 0);       // assume no shift for printing
	if (!pDC->IsPrinting())
	{
		ASSERT(pDC->GetWindowOrg() == CPoint(0,0));
		
		// by default shift Viewport origin in negative direction of scroll
		ptVpOrg = -GetDeviceScrollPosition();
		
		if (m_bCenter)
		{
			CRect rect;
			GetClientRect(&rect);
			
			// if client area is larger than total device size,
			// override scroll positions to place origin such that
			// output is centered in the window
			if (m_totalDev.cx < rect.Width())
				ptVpOrg.x = (rect.Width() - m_totalDev.cx) / 2;
			if (m_totalDev.cy < rect.Height())
				ptVpOrg.y = (rect.Height() - m_totalDev.cy) / 2;
		}
	}
	pDC->SetViewportOrg(ptVpOrg);
	
//	CWnd::OnPrepareDC(pDC, pInfo);     // For default Printing behavior
}