19,469
社区成员
发帖
与我相关
我的任务
分享
pDC->SetMapMode(2);//----------------------------------
CDC memDC;
CBitmap bitmap;
//CDC* pImageDC;
memDC.CreateCompatibleDC(NULL);
memDC.SetMapMode(2);//----------------------------------------
CBitmap *pOldBmp;
if (bitmap.GetSafeHandle() != nullptr)
bitmap.DeleteObject();
bitmap.CreateCompatibleBitmap(pDC, 500, 500);
pOldBmp = memDC.SelectObject(&bitmap);
memDC.FillSolidRect(0, 0, 500, 500, RGB(200,2,2));
//pDC->BitBlt(10, 10, 500, 500, &memDC, 0, 0, SRCCOPY);
pDC->BitBlt(500, -500, 500, 500, &memDC, 0, 0, SRCCOPY);
memDC.DeleteDC();
bitmap.DeleteObject();
// Decode world transformation and mapping mode
//The following formula shows the math involved
//in converting a point from page space to device space.
//Dx = ((Lx - WOx) * VEx / WEx) + VOx
//The following variables are involved.
//Dx x value in device units
//Lx x value in logical units (also known as page space units)
//WOx window x origin
//VOx viewport x origin
//WEx window x-extent
//VEx viewport x-extent
void CLoEnglishView::DecodeTransform(CDC* pDC)
{
POINT windoworg; GetWindowOrgEx(pDC->m_hDC, &windoworg);
SIZE windowext; GetWindowExtEx(pDC->m_hDC, &windowext);
POINT viewportorg; GetViewportOrgEx(pDC->m_hDC, &viewportorg);
SIZE viewportext; GetViewportExtEx(pDC->m_hDC, &viewportext);
TCHAR formulax[128];
TCHAR formulay[128];
wsprintf(formulax, "Dx = (Lx-%d)*(%d/%d) + %d", windoworg.x, viewportext.cx, windowext.cx, viewportorg.x);
wsprintf(formulay, "Dy = (Ly-%d)*(%d/%d) + %d", windoworg.y, viewportext.cy, windowext.cy, viewportorg.y);
POINT p[2] = { 10, 10, 10, 35 };
pDC->DPtoLP(p, 2);
pDC->SetBkMode(TRANSPARENT);
pDC->TextOut(p[0].x, p[0].y, formulax, _tcslen(formulax));
pDC->TextOut(p[1].x, p[1].y, formulay, _tcslen(formulay));
//
// CRect rc(10,60,200,76);// dp
// pDC->DPtoLP(rc);
// pDC->DrawText("DrawText OK !",13,&rc,DT_TOP|DT_LEFT);
}