(1)確定繪圖的深度比例關系,如按照1:200繪圖,則電腦螢屏中 Y 軸的 1mm 代表實際井深的200mm;X軸表示對應井深的測量資料,由刻度型別和相應道寬決定其坐標,不存在與實際對應的比例
(2)設定繪圖的映射模式,根據設定的映射模式和確定的繪圖比例關系,將實際井深資料轉化為邏輯坐標,并將對應井深的測量值根據用戶的選擇(用戶可以選擇道寬,線型刻度或對數刻度等)將其轉化為為邏輯坐標;
(3)利用函式 GetWindowExt 和 GetViewportExt獲取現有映射模(MM_HIMETRIC)下的視窗范圍windowsize和視口范圍viewsize;
(4)重新設定映射模式為MM_ANISOTROPIC;
(5)利用函式 SetWindowEx重新確定視窗范圍為windowsize;
我的部分代碼是on prepare dc里初始化,然后在ondraw里畫圖:
void CZyView::OnPrepareDC(CDC *pDC, CPrintInfo *pInfo)
{
pDC->SetMapMode(MM_ANISOTROPIC);
CRect rcClient;
GetClientRect(rcClient);
int cx = rcClient.Width();
int cy = rcClient.Height();
// pDC->SetViewportOrg(cx/2, cy/2);
pDC->SetViewportOrg(0, 0);
// pDC->SetViewportExt(cx, cy);
pDC->SetViewportExt(1000, 1000);
pDC->SetWindowOrg(0,0);
pDC->SetWindowExt(1000, 1000);
}
void CZyView::OnDraw(CDC* pDC)
{
CZyDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
// TODO: add draw code for native data here
CRect rcClient;
GetClientRect(rcClient);
int cx = rcClient.Width();
int cy = rcClient.Height();
CDC memDc;
// 創建記憶體DC
memDc.CreateCompatibleDC(NULL);
CBitmap memBtm;
// 創建記憶體位圖
memBtm.CreateCompatibleBitmap(pDC, cx, cy);
memDc.SelectObject(&memBtm);
// 設定映射模式
memDc.SetMapMode(MM_ANISOTROPIC);
// memDc.SetViewportOrg(cx/2, cy/2);
memDc.SetViewportOrg(0, 0);
memDc.SetWindowOrg(0,0);
// memDc.SetViewportExt(cx, cy);
memDc.SetViewportExt(1000, 1000);
memDc.SetWindowExt(1000, 1000);
// 設備坐標轉為邏輯坐標
memDc.DPtoLP(rcClient);
memDc.BitBlt(rcClient.left, rcClient.top, rcClient.Width(), rcClient.Height(),
pDC, rcClient.left, rcClient.top, SRCCOPY);
// 填充記憶體畫板顏色
memDc.FillSolidRect(rcClient.left, rcClient.top, rcClient.Width(), rcClient.Height(),RGB(255,255,255));
CPen pen;
pen.CreatePen(PS_SOLID, 1, RGB(0,0,0));
CPen *pOldPen = (CPen*)memDc.SelectObject(&pen);
memDc.MoveTo(100, 100);
memDc.LineTo(100, 200);
memDc.MoveTo(200, 100);
memDc.LineTo(200, 200);
memDc.SelectObject(pOldPen);
pen.DeleteObject();
pDC->BitBlt(rcClient.left, rcClient.top, rcClient.Width(), rcClient.Height(),
&memDc, rcClient.left, rcClient.top, SRCCOPY);
ReleaseDC(&memDc);
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/147871.html
標籤:基礎類
