MFC学习笔记(五)
来源:互联网 发布:mac 查看svn版本号 编辑:程序博客网 时间:2024/05/05 10:53
一:映射模式dc.SetMapMode(MM_ANISOTROPIC),窗口范围SetWindowExt和视口范围函数SetViewportExt。
void CMainWindow::OnPaint(){CPaintDC dc(this);CRect rect;GetClientRect(&rect);dc.SetMapMode(MM_ANISOTROPIC);dc.SetWindowExt(500,500);dc.SetViewportExt(300,100); //情形一//dc.SetViewportExt(300,300); //情形二//dc.SetViewportExt(rect.Width(),rect.Height()); //情形三dc.Ellipse(0,0,500,500);}
二:设置坐标原点。其实质是设置一个偏移量,然后新的坐标都以偏移为基础,进行坐标的加减。
SetViewportOrg()函数和SetWindowOrg()函数进行偏移量的设置。前者是对视口视图(设备坐标系)进行设置,
后者是对窗口坐标(逻辑坐标系)进行设置。
将原点移到中心,方法一:
void CMainWindow::OnPaint(){CPaintDC dc(this);CRect rect;GetClientRect(&rect);CPoint point(rect.Width()/2,rect.Height()/2);dc.SetViewportOrg(point);dc.Rectangle(-50,-50,50,50);}将原点移到中心,方法二:
void CMainWindow::OnPaint(){CPaintDC dc(this);CRect rect;GetClientRect(&rect);CPoint point(rect.Width()/2,rect.Height()/2);dc.SetMapMode(MM_LOENGLISH);dc.DPtoLP(&point);dc.SetWindowOrg(-point.x,-point.y);dc.Rectangle(-50,-50,50,50);}将原点移到左下角:
void CMainWindow::OnPaint(){CPaintDC dc(this);CRect rect;GetClientRect(&rect);dc.SetMapMode(MM_HIMETRIC);dc.SetViewportOrg(0,rect.Height());dc.Rectangle(1000,1000,5000,5000);}
------------------------------------------------------------------------------------------------------------------------------------
研究了一下,我觉得是不是可以这样理解这两个函数:
物理坐标原点始终都是左上角,初始状态逻辑坐标原点也是左上角。
SetViewportOrg(x,y)的作用是逻辑坐标原点向右移动x个单位,向下移动y个单位(当然些时x轴以向右为正方向,y轴以向下为正方向),也就是说,这个函数的作用是将逻辑坐标原点从原来位置分别向着正方向移动若干个单位。
比如:
SetViewportOrg(100,100);//这句的作用是将逻辑坐标原点向右移100,向下移100.
SetWindowOrg(x,y)的作用是将逻辑坐标原点向左移x个单位,向上移y个单位。也就是说这个函数的作用是将逻辑坐标原点从原来位置分别向着负方向移动若干个单位。
比如:
SetWindowOrg(100,100)//这句的作用是将逻辑坐标原点从原来的位置向左移100个单位,向上移100个单位。
我试了一下将这两句同时写:
pDC->SetWindowOrg(100,100);
pDC->SetViewportOrg(100,100);
发现逻辑坐标原点又回到了左上角。
而将它改成:
pDC->SetWindowOrg(50,50);
pDC->SetViewportOrg(100,100);
发现,结果也是符合我上面所说的。
总结,这两个函数应该可以看作是将逻辑坐标进行移动,但是两者移动的方向恰好相反,SetViewportOrg是向正方向移动,而SetWindowOrg是向着负方向移动。另外,SetMapMode选择不同的映射模式应该也会影响到这两个函数。
该段截自:http://bbs.csdn.net/topics/340078257
------------------------------------------------------------------------------------------------------------------------------------
- MFC学习笔记(五)
- VC++/MFC学习笔记(五)
- MFC六大关键技术之仿真学习笔记(五)
- 《深入浅出MFC》笔记(五)
- 孙鑫-MFC笔记五--对话框
- 孙鑫-MFC笔记五--对话框
- MFC学习日记五:Mfc文本编程
- MFC学习_MFC入门(五)
- 吕鑫MFC学习系列五
- MFC学习笔记五——消息映射(Message Mapping)
- MFC学习笔记之五—————对话框编程及控件初步操作
- MFC学习笔记之五—————对话框编程及控件的操作
- MFC rtti 学习笔记
- 《深入浅出mfc》学习笔记
- MFC学习笔记
- MFC学习笔记一
- MFC学习笔记
- MFC学习笔记
- Java从0开始 1
- C++求职宝典:第14章 面向对象
- discuz2.5 俄文版 编辑时出现\n\n的问题
- UI 第二节复习
- 哈希表函数详解
- MFC学习笔记(五)
- 通过反射访问构造方法
- Struts2拦截器
- 关于Android: FATAL EXCEPTION: GLThread
- Sqrt(x)
- 汇编编写彩票36选7摇奖
- linux 通信之无名管道学习
- EAGLE转Protel文件
- 访问或添加request / session / application属性