读书人

坐标系的转换有关问题

发布时间: 2012-02-05 12:07:15 作者: rapoo

坐标系的转换问题
环境:VS2005
CMyView 的基类是CScrollView
void CMyView::OnInitialUpdate()
{
CScrollView::OnInitialUpdate();

CSize sizeTotal;
// TODO: 计算此视图的合计大小
sizeTotal.cx = sizeTotal.cy = 1000;
SetScrollSizes(MM_LOMETRIC, sizeTotal);
}

void CMyView::OnDraw(CDC* pDC)
{
CGridDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
if (!pDoc)
return;

// TODO: 在此处为本机数据添加绘制代码
Graphics graphics(pDC-> m_hDC);
Pen pen(Color(255, 0, 0, 255));
graphics.DrawLine(&pen, 0, 0, 200, 100);
}

void CMyView::OnPrepareDC(CDC* pDC, CPrintInfo* pInfo)
{
// TODO: 在此添加专用代码和/或调用基类
CRect rect;
GetClientRect(&rect);
pDC-> SetMapMode(MM_LOMETRIC);
pDC-> SetViewportOrg(0,rect.Height());

CScrollView::OnPrepareDC(pDC, pInfo);
}

不知道是什么原因,view里没有我想要的直线.



[解决办法]
onpaint
[解决办法]
SetScrollSizes(MM_LOMETRIC, sizeTotal);
//把MM_LOMETRIC 改成 MM_TEXT...
[解决办法]
.....

你添加了滚动条后
设备坐标和逻辑坐标就不同了 //没加前是一样的
要转换坐标..
这样才能在你指定的位置上画出线
//-----------------------------------
对鼠标响应消息函数的光标转换:
CClientDC dc( this );
OnprepareDC( &dc );
DPtoLP( &point );
//------------------------------------
再试试..

//-------------------------------------
SetScrollSizes( MM_..,sizeTotal )中的参数设置问题..
你要查MSDN
看你需要什么...?

//--------------------------------------
画完线后
还要做保存处理
不然View 一有 "动作 ",图就不见了..

读书人网 >VC/MFC

热点推荐