示例#1
0
void CGumpView::OnDraw(CDC* pDC)
{
	CDocument* pDoc = GetDocument();
	// TODO: 여기에 그리기 코드를 추가합니다.
	if (!m_pDib) return;

	CRect rect;
	GetClientRect(rect);

	CSize sizeWnd = rect.Size();
	CSize sizeDib = m_pDib->GetDimensions();

	if (sizeDib.cx <= 0 || sizeDib.cy <= 0) return;
	
	double ratio = min(float(sizeWnd.cx) / sizeDib.cx, float(sizeWnd.cy) / sizeDib.cy);

	if (ratio < 1.0) {
		sizeDib = CSize(int(sizeDib.cx * ratio), int(sizeDib.cy * ratio));
	}

	CPoint point;
	point.x = max(0, sizeWnd.cx /2 - sizeDib.cx/2);
	point.y = max(0, sizeWnd.cy /2 - sizeDib.cy/2);

	CRect rcBound(point.x-1, point.y-1, point.x+sizeDib.cx+1, point.y+sizeDib.cy+1);
	
	CPen pen(PS_DOT, 1, RGB(128,128,128));
	CPen* pOld = pDC->SelectObject(&pen);
	pDC->Rectangle(rcBound);
	pDC->SelectObject(pOld);

	m_pDib->Draw(pDC, point, sizeDib);
}
示例#2
0
void CWizShadowEffect::draw(QPainter *painter)
{
    PixmapPadMode mode = PadToEffectiveBoundingRect;
    if (painter->paintEngine()->type() == QPaintEngine::OpenGL2)
        mode = NoPad;

    // Draw pixmap in device coordinates to avoid pixmap scaling.
    QPoint offset(0, 0);
    const QPixmap pixmap = sourcePixmap(Qt::DeviceCoordinates, &offset, mode);
    if (pixmap.isNull())
        return;
    //
    QTransform restoreTransform = painter->worldTransform();
    painter->setWorldTransform(QTransform());
    painter->setBrush(QBrush(Qt::NoBrush));
    QSize sz = pixmap.size();
    painter->drawPixmap(offset.x(), offset.y(), pixmap);
    //
    QRect rcBound(offset.x() - 1, offset.y() - 1, sz.width() + 1, sz.height() + 1);
    m_shadow->DrawBorder(painter, rcBound);
    //
    painter->setWorldTransform(restoreTransform);

}