第一張圖是代碼,第二張是界面。

uj5u.com熱心網友回復:
代碼 不要用 圖 !uj5u.com熱心網友回復:
MM_TEXT 與 MM_LOENGLISH 單位 不同uj5u.com熱心網友回復:
afx_msg void cmainwindw::OnLButtonDown(UINT nFlags, CPoint point){ CClientDC dc(this); CRect rect; GetClientRect(&rect); dc.SetMapMode(MM_LOENGLISH); CPoint pp(rect.Width()/2,-(rect.Height()/2)); dc.LPtoDP(&pp); dc.SetViewportOrg(pp); dc.MoveTo(0,0); dc.LineTo(-rect.Width() / 2, -(rect.Height() / 2)); dc.MoveTo(0,0); dc.LineTo(rect.Width() / 2, (rect.Height() / 2)); dc.MoveTo(0, 0); dc.LineTo(-rect.Width() / 2, (rect.Height() / 2)); dc.MoveTo(0, 0); dc.LineTo(rect.Width() / 2, -(rect.Height() / 2)); dc.Ellipse(-200,200,200,-200);}
uj5u.com熱心網友回復:
afx_msg void cmainwindw::OnLButtonDown(UINT nFlags, CPoint point)
{
CClientDC dc(this);
CRect rect;
GetClientRect(&rect); dc.SetMapMode(MM_LOENGLISH);
CPoint pp(rect.Width()/2,-(rect.Height()/2)); dc.LPtoDP(&pp);
dc.SetViewportOrg(pp);
dc.MoveTo(0,0);
dc.LineTo(-rect.Width() / 2, -(rect.Height() / 2)); dc.MoveTo(0,0);
dc.LineTo(rect.Width() / 2, (rect.Height() / 2)); dc.MoveTo(0, 0);
dc.LineTo(-rect.Width() / 2, (rect.Height() / 2)); dc.MoveTo(0, 0);
dc.LineTo(rect.Width() / 2, -(rect.Height() / 2)); dc.Ellipse(-200,200,200,-200);
}
uj5u.com熱心網友回復:
// Convert size in points to device coordinatevoid CLoEnglishView::PointToDevice(CDC *pDC, SIZE & size)
{
int dpix = pDC->GetDeviceCaps(LOGPIXELSX);// 144
int dpiy = pDC->GetDeviceCaps(LOGPIXELSY);// 144
size.cx = size.cx * dpix / 72;// 11737 * 144 / 72=20
size.cy = size.cy * dpiy / 72;// 4
}
// Convert size in device coordinate to logical coordinate
void CLoEnglishView::DeviceToLogical(CDC *pDC, SIZE & size)
{
POINT p[2] = { 0, 0, size.cx, size.cy };
pDC->DPtoLP(p, 2);
size.cx = abs(p[1].x - p[0].x);
size.cy = abs(p[1].y - p[0].y);
}
uj5u.com熱心網友回復:
"MM_LOENGLISH模式下使用雙緩沖繪制視窗"https://download.csdn.net/download/schlafenhamster/9427265
本程式演示如何在MM_LOENGLISH模式下用雙緩沖繪制視窗。重點在 MM_TEXT 和 MM_LOENGLISH 模式時 BitBlt 的呼叫。
uj5u.com熱心網友回復:
我不用這個模式了。。
我用自定義模式或者LOM開頭的。
uj5u.com熱心網友回復:
還有你這個好像有些復雜,我看書上或者網上有個簡單的方法,就是用setwindowExt 和setviewExt改變邏輯單位的大小。
uj5u.com熱心網友回復:
只不過我不會用而已。
uj5u.com熱心網友回復:
客戶區變了是什么意思? 原來是什么樣的SDI, MID 客戶區的繪制應該在 CXXXXView View類中進行, 是不是選錯處理的類了?
uj5u.com熱心網友回復:
給 你 寫 了一個
void CLoEnglishView::OnLButtonDown(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
static BOOL sw=FALSE;
CClientDC dc(this);
//back color
CRect rect;
GetClientRect(&rect);
dc.SetMapMode(MM_TEXT);
SetWindowOrgEx(dc, 0, 0,NULL);
SetViewportOrgEx(dc, 0, 0,NULL);
if(sw)
dc.FillSolidRect(0, 0, rect.Width(),rect.Height(), RGB(255, 128, 255));
else
dc.FillSolidRect(0, 0, rect.Width(),rect.Height(), RGB(255, 255, 128));
if(!sw)
{
sw=TRUE;
dc.SetMapMode(MM_LOENGLISH);
SetWindowOrgEx(dc, 0, 0, NULL);
SetViewportOrgEx(dc, rect.right/2, rect.bottom/2,NULL);
}
else
{
sw=FALSE;
dc.SetMapMode(MM_TEXT);
SetWindowOrgEx(dc, 0, 0 ,NULL);
SetViewportOrgEx(dc, rect.right/2, rect.bottom/2,NULL);
}
CPoint pp;
GetViewportOrgEx(dc,&pp);//
rect.OffsetRect(pp.x,pp.y);//
dc.DPtoLP(&rect);
dc.MoveTo(0,0);
dc.LineTo(-rect.Width() / 2, -(rect.Height() / 2));
dc.MoveTo(0,0);
dc.LineTo(rect.Width() / 2, (rect.Height() / 2));
dc.MoveTo(0, 0);
dc.LineTo(-rect.Width() / 2, (rect.Height() / 2));
dc.MoveTo(0, 0);
dc.LineTo(rect.Width() / 2, -(rect.Height() / 2));
CRect rc(-80,-80,80,80);
rc.OffsetRect(pp.x,pp.y);//
dc.DPtoLP(&rc);//
dc.SelectObject(GetStockObject(NULL_BRUSH));
dc.Ellipse(rc);
// CScrollView::OnLButtonDown(nFlags, point);
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/37047.html
標籤:圖形處理/算法
上一篇:ffmpeg決議264視頻幀
