视口和窗口坐标在GDI中是有这个概念的,正常情况下,这两个坐标一致,即它们的原点和宽高都是相同的,但是我们可以修改这两个坐标系统来简单快速实现一些变换操作,如缩放等,首先就必须要理解这两个坐标的概念了,简答说一句话,即:视口坐标(物理坐标)的高度宽度是确定显示区域的,而窗口坐标(逻辑坐标)是为显示区域刻度尺寸的,所以缩放操作可以通过扩大视口区域的方法来实现。就这么简答的记忆,千万不要混淆。
//下面贴一段缩放的代码供大家参考
var
sz: TSize;
pt: TPoint;
begin
//
SetMapMode(Self.Canvas.Handle, MM_ISOTROPIC); // MM_ANISOTROPIC
//修改窗口的宽度和高度,即逻辑坐标的宽高
SetWindowExtEx(Canvas.Handle, ClientWidth, ClientHeight, nil);
//修改视口的宽度和高度,即物理坐标的宽高
//suofang为缩放因子,浮点数
SetViewportExtEx(Self.Canvas.Handle, trunc(ClientWidth * suofang) , trunc( Clie//ntHeight * suofang), @sz);
Canvas.Ellipse(0,0, ClientWidth, ClientHeight);
Canvas.TextOut(0,0, 'HELLO world');