📄 untitled-11.txt
字号:
40 MFC Windows程序设计(第 2版)
模式画圆和正方形是非常理想的。下面的程序代码是画一个圆,该回直径为窗口宽度和高
度中较小的那一个:
CRect rect;
GetClientRect(&rect);
dc.SetMapMode(M:M. ISOTROPIC);
dc.SetwindowExt(5G0, 500);
dc.SetVieaportExt(rect.Width(), rect.Height(》;
dc.ElliPse (,0,500,500);
对于 Windows,再次将窗口的逻辑尺寸设为 500单位 x 500单位。然而,在把逻辑单位
转换为设备单位时,GDI将输出设备的长宽比也考虑进去了。第14章中的CI。Ck(时钟)程序
用MM.ISOTROPIC映射模式画了一个圆的时钟,并使它随窗口的尺寸大小变化而自动缩
放。如果没有MM—ISOTROPIC映射模式的帮助,就只能手动调整时钟的大小了。
现在简单介绍一下SetwindowExt和SetViewportExt函数。规定: SetwindowExt设定“窗口
范围”; SetViewportExt设定“视口范围”。可以这样认为,窗口的尺寸以逻辑单位计算,视口的
尺寸以设备单位或像素点计算。当Windows对逻辑坐标值和设备坐标值进行相互转换时,
使用一对公式,其中包含窗口逻辑尺寸(窗口范围)、实际尺寸(视口范围)以及坐标原点位
置。设定窗口范围和视口范围时,实际上是在自己的缩放比例参数内编程。一般说来,视口
范围是画图所在窗口的大小(以像素点数目计算),而窗口范围是指以逻辑单位表示的窗口
尺寸。
使用SetwindowExt和SetViewportExt时要注意:在MM—ISOTROPIC映射模式下,应该首
先调用SetwindowExt。否则,部分窗口客户区可能会因落在窗口的逻辑范围之外而不能使
用。而在MM_ANISOTROPIC映射模式下,窗口范围和视口范围中先设置哪个都无关紧要。
2.1.6坐标转换
调用 CDC:: LPt0DP函数可将逻辑坐标值转换为设备坐标值。反之,调用 CDC:: DPt0LP
函数可将设备坐标值转换为逻辑坐标值。
如果您想得到以设备坐标值表示的窗口中心点位置,则只需取用像素点表示的窗口长
度和宽度的平分值即可。 CWnd:: GetClientRect返回以像素点表示的窗口尺寸。
CRect rect;
GetClientRect(&rect);
CPoint Point(rect.Width()/ 2, reCt.Height()/ 2);
如果想得到以MM_LOENGLISH单位表示的窗口中。已点位置,则需使用DPt0LP函数。
CRGCt IGCt;
GetCI土entRect(&rect);
CPointpoint(rect.Width()/2, rect.Height()/2);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -