MFC中设备坐标系到逻辑坐标系之间的转换函数DPtoLP的用法示例

由于初次接触MFC的绘图函数,好不容易弄明白了坐标方面的基本概念,如设备坐标系、逻辑坐标系、SetWindowExt、SetWindowOrg、SetViewportExt、SetViewportOrg。结果在OnMouseMove(UINT nFlags, CPoint point) 这个方法又遇到一些问题,因为此时传入的point是设备坐标系,我们需要做一下设备坐标系到逻辑坐标系之间的转换,但是网上资料大多都直接给出用ScreenToClient方法或者DPtoLP方法,并没有一些特别的注意事项,经常不少时间的摸索,终于知道原来在使用DPtoLP之间需要重新定义一下设备坐标和逻辑坐标之间的映射关系,而这个映射关系实际上在初始化时已经定义,我错误的以为这样逻辑坐标系就不用再管了。废话不多了,直接贴上代码:

void CSunliming_201328014629078View::OnMouseMove(UINT nFlags, CPoint point) 
{
	// TODO: Add your message handler code here and/or call default
	CRect cRect;
	pDC->SetMapMode(MM_ISOTROPIC); //设定各同向性坐标系
	AfxGetMainWnd()->GetClientRect(cRect);
	pDC->SetWindowExt(cRect.Width(),cRect.Height());//设置窗口大小
	pDC->SetWindowOrg(0, 0); 
	pDC->SetViewportExt(cRect.Width(),-cRect.Height());
	pDC->SetViewportOrg(cRect.Width()/2,cRect.Height()/2);  //设置视口原点为中心,两原点之间建立映射,扩展之间成比例
	DPtoLP(pDC->GetSafeHdc(),&point,randSize);
	if(current >= 0 ) 
	{
		m_rands[current]->setXPos(point.x);
		m_rands[current]->setYPos(point.y);
		Invalidate() ;
	}
}
初学MFC绘图,写这篇文章只为给自己做个记录,以后不至于在这种问题上纠结半天,如果这篇文章对大家有用,it's fine with me!!!

  • 2
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值