MFC Windows 程序设计 第二章 在窗口中绘图
来源:互联网 发布:海迅开料软件 编辑:程序博客网 时间:2024/05/16 19:01
第二章 在窗口中绘图
1、设备描述表 CPaintDC、CClientDC、CWindowDC、CMetaFileDC、CDC,通过这些DC使用GDI(图形设备接口)进行画图,6个常用GDI对象Pen、Brush、Font、Bitmap、Palette、Region。
2、绘图模式:默认模式是R2_COPYPEN,将像素点复制到显示平面上,使用SetROP2修改绘图模式,R2_NOT模式通过反转像素来画图,还有其他一些模式可供选择。
3、映射模式:cdc输出函数使用的是逻辑坐标值,设备坐标值指的是窗口中相应像素点位置,默认使用的是MM_TEXT,1个单位等于1个像素点,使用非MM_TEXT映射模式可以方便的按比例缩放输出,这时尺寸和距离与输出设备的物理分辨率无关。
常用映射模式:MM_TEXT(1像素)、MM_LOMETRIC(0.1mm)、MM_HIMETRIC(0.01mm)、MM_LOENGLISH(0.01in)、MM_HIENGLISH(0.001in)、MM_TWIPS(1/1440in)、MM_ISOTROPIC(用户自定义,x和y同等缩放)、MM_ANISOTROPIC(用户自定义,x和y独立缩放)
坐标原点在左上角,MM_TEXT正向是向下,其他模式正向是向上,因此使用其他模式时,y坐标值应给负值,可使用函数SetMapMode来改变默认映射模式。
在使用公制映射模式时,在屏幕上显示的1逻辑英寸并不等于实际中的1英寸,因为window并不知道您的显示器的物理分辨率dpi(指监视器在水平或者垂直方向上每英寸内可显示的点数),不过打印机与其他硬拷贝设备不同,可以控制一个600dpi的激光打印机在1英寸内打印600点,
所以在MM_LOENGLISH映射模式下,100单位长的线在打印纸上的长度也正好是1英寸。
4、MM_ISOTROPIC和、MM_ANISOTROPIC模式通常用于根据窗口尺寸按比例自动调节画图的输出大小的场合,以下是范例代码:
CRect rect;
GetClientRect(&rect);
dc.SetMapMode(MM_ANISOTROPIC);
dc.SetWindowExt(500,500);
dc.SetViewportExt(rect.Width(),rect.Height());
dc.Ellipse(0,0,500,500);
这时x轴正向向右,y轴正向向下,可以通过传负值进行反转。
SetWindowExt设置窗口尺寸,以逻辑单位表示,SetViewportExt设置窗口视口大小,以设备单位(像素点)计算。
5、坐标转换:CDC::DPtoLP(设备坐标值转为逻辑坐标值)和CDC::LPtoDC(逻辑坐标值转为设备坐标值(像素表示)),通常用于鼠标命中测试,鼠标点击返回的是设备坐标值(像素表示)。
6、移动原点:CDC::SetWindowOrg移动窗口原点,CDC::SetViewportOrg移动视口的原点,这两个函数的区别还分不太清,需要再研究。
SetWindowOrg(x,y)等于将设备点原点(0,0)(左上角)将
7、用户坐标值是原点设立在窗口客户区左上角的设备坐标值,屏幕坐标值是原点位于屏幕左上角的设备坐标值,可以通过CWnd::ClientToScreen和CWnd::ScreenToClient进行转换。
8、GetDeviceCaps获取设备信息。
9、备用GDI对象,NULL_PEN、NULL_BRUSH等,GDI对象的删除与取消,使用备用GDI对象在不使用后可以不进行删除。
10、滚动条的添加,OnCreate、OnSize、OnHScroll、OnVScroll函数。
11、框架窗口的删除,在继承于CFrameWnd中的OnNcDestroy函数中的执行 delete this进行删除。
1、设备描述表 CPaintDC、CClientDC、CWindowDC、CMetaFileDC、CDC,通过这些DC使用GDI(图形设备接口)进行画图,6个常用GDI对象Pen、Brush、Font、Bitmap、Palette、Region。
2、绘图模式:默认模式是R2_COPYPEN,将像素点复制到显示平面上,使用SetROP2修改绘图模式,R2_NOT模式通过反转像素来画图,还有其他一些模式可供选择。
3、映射模式:cdc输出函数使用的是逻辑坐标值,设备坐标值指的是窗口中相应像素点位置,默认使用的是MM_TEXT,1个单位等于1个像素点,使用非MM_TEXT映射模式可以方便的按比例缩放输出,这时尺寸和距离与输出设备的物理分辨率无关。
常用映射模式:MM_TEXT(1像素)、MM_LOMETRIC(0.1mm)、MM_HIMETRIC(0.01mm)、MM_LOENGLISH(0.01in)、MM_HIENGLISH(0.001in)、MM_TWIPS(1/1440in)、MM_ISOTROPIC(用户自定义,x和y同等缩放)、MM_ANISOTROPIC(用户自定义,x和y独立缩放)
坐标原点在左上角,MM_TEXT正向是向下,其他模式正向是向上,因此使用其他模式时,y坐标值应给负值,可使用函数SetMapMode来改变默认映射模式。
在使用公制映射模式时,在屏幕上显示的1逻辑英寸并不等于实际中的1英寸,因为window并不知道您的显示器的物理分辨率dpi(指监视器在水平或者垂直方向上每英寸内可显示的点数),不过打印机与其他硬拷贝设备不同,可以控制一个600dpi的激光打印机在1英寸内打印600点,
所以在MM_LOENGLISH映射模式下,100单位长的线在打印纸上的长度也正好是1英寸。
4、MM_ISOTROPIC和、MM_ANISOTROPIC模式通常用于根据窗口尺寸按比例自动调节画图的输出大小的场合,以下是范例代码:
CRect rect;
GetClientRect(&rect);
dc.SetMapMode(MM_ANISOTROPIC);
dc.SetWindowExt(500,500);
dc.SetViewportExt(rect.Width(),rect.Height());
dc.Ellipse(0,0,500,500);
这时x轴正向向右,y轴正向向下,可以通过传负值进行反转。
SetWindowExt设置窗口尺寸,以逻辑单位表示,SetViewportExt设置窗口视口大小,以设备单位(像素点)计算。
5、坐标转换:CDC::DPtoLP(设备坐标值转为逻辑坐标值)和CDC::LPtoDC(逻辑坐标值转为设备坐标值(像素表示)),通常用于鼠标命中测试,鼠标点击返回的是设备坐标值(像素表示)。
6、移动原点:CDC::SetWindowOrg移动窗口原点,CDC::SetViewportOrg移动视口的原点,这两个函数的区别还分不太清,需要再研究。
SetWindowOrg(x,y)等于将设备点原点(0,0)(左上角)将
7、用户坐标值是原点设立在窗口客户区左上角的设备坐标值,屏幕坐标值是原点位于屏幕左上角的设备坐标值,可以通过CWnd::ClientToScreen和CWnd::ScreenToClient进行转换。
8、GetDeviceCaps获取设备信息。
9、备用GDI对象,NULL_PEN、NULL_BRUSH等,GDI对象的删除与取消,使用备用GDI对象在不使用后可以不进行删除。
10、滚动条的添加,OnCreate、OnSize、OnHScroll、OnVScroll函数。
11、框架窗口的删除,在继承于CFrameWnd中的OnNcDestroy函数中的执行 delete this进行删除。
- MFC Windows 程序设计 第二章 在窗口中绘图
- MFC Windows程序设计--在窗口绘图
- 20160315 第2章 在窗口中绘图(来自《MFC Windows 程序设计(第2版)》)
- 第二章 在窗口中绘图
- 第二章 在窗口中绘图GDI
- Windows 窗口绘图基础 MFC
- 在窗口中绘图
- windows程序设计(20):MFC绘图
- 在窗口中绘图(转)
- C#在窗口中绘图
- 第四章 WINDOWS绘图程序设计
- MFC Windows程序设计(第二版)第一章笔记
- MFC Windows 程序设计->最顶层窗口
- MFC Windows 程序设计->控制窗口大小 WM_GETMINMAXINFO
- 在windows/MFC编程中如何设置窗口半透明
- SDL 在指定窗口中绘图
- SDL 在指定窗口中绘图
- SDL 在指定窗口中绘图
- 编码风格
- [leetcode] Wildcard matching——编程菜鸟们绝对值得一看
- Field 'id' doesn't have a default value
- Android OS - Processes and the Zygote!
- UTF8编码转换 CChineseCode
- MFC Windows 程序设计 第二章 在窗口中绘图
- linux命令大全
- poj1077八数码问题——境界六(IDA*)
- MFC Windows 程序设计 第三章 鼠标与键盘
- HDU 4661 Message Passing 【Tree】
- MFC Windows 程序设计 第四章 菜单
- Myeclipse项目的调试与发布
- 进程调度
- MFC Windows 程序设计 第五 MFC集合类