社区
界面
帖子详情
关于MFC坐标问题
fleiou2008
2009-06-22 12:47:44
如何在单文档的视图区域定义属于自己的坐标系,或者说如何定义工作区坐标。eg:左上角是0,0 右下角是500,400
...全文
191
9
打赏
收藏
关于MFC坐标问题
如何在单文档的视图区域定义属于自己的坐标系,或者说如何定义工作区坐标。eg:左上角是0,0 右下角是500,400
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
9 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
大数学家拉格朗日
2009-06-22
打赏
举报
回复
通过SetWindowExt吧……我记得,我尝试写一个例子出来看看
oysoft
2009-06-22
打赏
举报
回复
CDC::SetViewportOrg
virtual CPoint SetViewportOrg( int x, int y );
virtual CPoint SetViewportOrg( POINT point );
写不动代码的人
2009-06-22
打赏
举报
回复
SetWindowOrg 、SetViewportOrg、SetWindowExt、SetViewportExt区别
按习惯,(0,0)就原点,原点就是(0,0),但是如果用此来理解windows的map mode,就会走弯路。其实,稍微改变一下观念,windows的map mode就比较好理解了。举例说明:
page space---->device space
pDC->SetMapMode(MM_LOMETRIC);
pDC->SetWindowOrg(40,0); //这句“设定”page space的原点为(40,0),注意,
//这时(40,0)就是原点,原点就是(40,0)这个点,其实,(0,0)与原点没有必然联系。这一句对下面的画图函数在page space中所作的图不会有任何影响。一句话:SetWindowOrg就是指定一下,page space中哪个点为原点。
pDC->Rectangle(0,0,100,-100);
pDC->Rectangle(0,-100,50,-200);
同理,SetViewportOrg也是指定一下,device space中哪个点为原点,两个坐标系映射时,两个原点重合。
SetWindowExt设定page space的大小,SetViewportOrg设定device space的大小,其实,真正有意义的只是两者的比例关系,例如,在一个1024*768的显示屏上:
pDC->SetMapMode(MM_ISOTROPIC);
pDC->SetWindowExt(10240,7680);
pDC->SetViewportExt(1024,768);
pDC->Rectangle(0,0,100,100);
就会画一个10 pixels*10 pixels的矩形。其本质就是,X方向,每个逻辑单位有1024/10240个象素,Y方向每个逻辑单位有768/7680个象素。因此,下面的代码有相同的作用:
pDC->SetMapMode(MM_ISOTROPIC);
pDC->SetWindowExt(102400,76800);
pDC->SetViewportExt(10240,7680);
pDC->Rectangle(0,0,100,100);
softist
2009-06-22
打赏
举报
回复
void CBbbbbView::OnMouseMove(UINT nFlags, CPoint point)
{
CView::OnMouseMove(nFlags, point);
CClientDC dc(this);
CRect r;
GetClientRect(&r);
dc.SetMapMode(MM_ANISOTROPIC);
dc.SetWindowExt(500,-400);
dc.SetViewportExt(r.Width(), r.Height());
point.x = point.x * 500 / r.Width();
point.y = -point.y * 400 / r.Height();
dc.SetPixel(point.x, point.y, RGB(255,0,0));
CString strText;
strText.Format(_T("x=%d, y=%d"), point.x, -point.y);
((CFrameWnd*)AfxGetMainWnd())->SetMessageText(strText);
}
楼主是否要这样的程序。
SetMapMode的说明可以看看容易懂得解说。好多书是越看越糊涂
http://www.softist.com/programemo/setext/setext.htm
大数学家拉格朗日
2009-06-22
打赏
举报
回复
你更改了映射模式了么?或者使用过pDC->SetWindowOrg之类的函数么
如果没有的话,发生这么奇妙的事情我也不知道该怎么解释了……
fleiou2008
2009-06-22
打赏
举报
回复
是这样, 我定义了一个鼠标移动的消息用来跟着鼠标显示当前的位置, 代码是这样的:
void CT1View::OnMouseMove(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
CString st;
st.Format(("%d %d"),point.x,point.y);
CDC *pDC=GetDC();
pDC->TextOut(500,0,st);
ReleaseDC(pDC);
CView::OnMouseMove(nFlags, point);
}
但是运行的时候我的左上角不是0,0。 而是别的不确定的数。就是说 X的坐标移动到哪都对,而Y的坐标放哪都不对
fleiou2008
2009-06-22
打赏
举报
回复
是这样, 我定义了一个鼠标移动的消息用来跟着鼠标显示当前的位置, 代码是这样的:
void CT1View::OnMouseMove(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
CString st;
st.Format(("%d %d"),point.x,point.y);
CDC *pDC=GetDC();
pDC->TextOut(500,0,st);
ReleaseDC(pDC);
CView::OnMouseMove(nFlags, point);
}
但是运行的时候我的左上角不是0,0。 而是别的不确定的数。
大数学家拉格朗日
2009-06-22
打赏
举报
回复
这个例子要说明的就是,设置500,400为窗口的固定坐标,这个固定坐标由整个客户区表示的,无论你放大还是缩小客户区,窗口的大小都是500*400
大数学家拉格朗日
2009-06-22
打赏
举报
回复
例子写好了,不知道是不是你想要的
pDC->SetMapMode(MM_ANISOTROPIC); //更改当前的映射模式,X轴与Y轴的范围可以不同
pDC->SetWindowExt(500,400); //设定窗口(逻辑坐标范围)为500*400
CRect rectWnd;
this->GetClientRect(rectWnd); //获得客户端窗口的设备坐标下的范围
pDC->SetViewportExt(rectWnd.Width(),rectWnd.Height()); //更改视口(设备坐标)为整个客户区
pDC->DPtoLP(rectWnd); //将设备坐标转为逻辑坐标
pDC->Rectangle(rectWnd); //画一个充满窗口的矩形
pDC->Ellipse(rectWnd); //画一个充满窗口的圆形
pDC->Ellipse(200,150,300,250); //画一个半径是50逻辑坐标的圆形
楼主可以把这些代码扔到OnDraw里面查看一下效果
MFC
坐标
轴及函数图像绘制
利用VS建立
MFC
基于对话框的工程,其他默认。之后添加两个文本输入控件,两个按钮控件,并为文本控件建立两个Csting型的变量。打开文件名+Dlg.cpp。找到:OnPaint() 函数,在该函数最后的 }前添加实现代码。本资源以上传全部解决方案文件,可直接运行使用。
MFC
坐标
转换
MFC
坐标
转换详细描述。
MFC
坐标
转换详细描述。
MFC
坐标
转换详细描述。
C++
MFC
实战速成教程(VS2013)上
让零基础朋友快速掌握
MFC
的开发,进入到C++的Windows编程之殿堂。
MFC
规模庞大,结构复杂,导致很多初学者学习困难。本教程,则排除一切对初步者的干扰,从
MFC
庞大的结构中,单刀直入,取出最核心的类,以简明易懂的方式,剖析于学员面前。并通过纯手工方式编写
MFC
的程序,把
MFC
的基础架构,功能,由来,作用一一详细展示。以此为基础,进而把
MFC
的各个类,以及类之间的协作关系融汇贯通。
MFC
绘图映射模式设备
坐标
问题
Windows 绘图映射模式,对于逻辑
坐标
系和设备
坐标
系的转换及其何时设备
坐标
系的变化,以帮助程序理解的方式说明设备
坐标
系的在不同模式下不同的情形。
MFC
实现获取鼠标
坐标
MFC
实现获取鼠标
坐标
MFC
实现获取鼠标
坐标
MFC
实现获取鼠标
坐标
MFC
实现获取鼠标
坐标
MFC
实现获取鼠标
坐标
界面
15,979
社区成员
115,896
社区内容
发帖
与我相关
我的任务
界面
VC/MFC 界面
复制链接
扫一扫
分享
社区描述
VC/MFC 界面
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章