SetWorldTransform VB声明 Declare Function SetWorldTransform Lib "gdi32" Alias "SetWorldTransform" (ByVal hdc As Long, lpXform As xform) As Long 说明 设置世界转换 返回值 Long,执行成功为非零值,失败为0 参数表 参数 类型及说明 hdc Long,设备场景 lpXform xform,一个包含将用世界转换的结构 注解 适用于Windows NT 在使用世界转换前必须调用SetGraphicsMode函数设置图形模式为GM_ADVANCED模式
这个我看过,但是XFORM怎设置才有效果呢?
XFORM怎设置才有效果呢? ----------------------- 那就是一个几何学问题了。世界转换的算法是, x' = x * eM11 + y * eM21 + eDx y' = x * eM12 + y * eM22 + eDyx', y' 转换后的坐标 x , y 转换前的坐标(以上都是从 MSDN 抄的,详见 msdn.microsoft.com)
'一个例子: '所有图形都被切变,并且旋转了 45 度。 '只能在 Windows NT 3.51+, 2000, XP, 及其它基于 Windows NT 的系统上运行。Option ExplicitPrivate Type XFORM eM11 As Single eM12 As Single eM21 As Single eM22 As Single eDx As Single eDy As Single End Type Private Declare Function SetWorldTransform Lib "gdi32" (ByVal hdc As Long, lpXform As XFORM) As Long Private Declare Function CombineTransform Lib "gdi32" (lpxformResult As XFORM, lpxform1 As XFORM, lpxform2 As XFORM) As Long Private Const GM_ADVANCED = 2 Private Declare Function SetGraphicsMode Lib "gdi32" (ByVal hdc As Long, ByVal iMode As Long) As Long Private Const PI = 3.14159265358979 Private Const ROTATE_ANGLE = PI / 4#Private Sub Form_Load() Dim xf As XFORM, xf2 As XFORM Me.ScaleMode = vbPixels SetGraphicsMode Me.hdc, GM_ADVANCED With xf .eM11 = 1 .eM12 = 0 .eM21 = -0.4 .eM22 = 1 End With With xf2 .eM11 = CSng(Cos(ROTATE_ANGLE)) .eM12 = CSng(Sin(ROTATE_ANGLE)) .eM21 = -.eM12 .eM22 = .eM11 .eDx = 170 .eDy = -30 End With CombineTransform xf, xf, xf2 SetWorldTransform Me.hdc, xf End SubPrivate Sub Form_Paint() Me.Line (75, 75)-(150, 150), , B End Sub
Declare Function SetWorldTransform Lib "gdi32" Alias "SetWorldTransform" (ByVal hdc As Long, lpXform As xform) As Long
说明
设置世界转换
返回值
Long,执行成功为非零值,失败为0
参数表
参数 类型及说明
hdc Long,设备场景
lpXform xform,一个包含将用世界转换的结构
注解
适用于Windows NT
在使用世界转换前必须调用SetGraphicsMode函数设置图形模式为GM_ADVANCED模式
-----------------------
那就是一个几何学问题了。世界转换的算法是,
x' = x * eM11 + y * eM21 + eDx
y' = x * eM12 + y * eM22 + eDyx', y' 转换后的坐标
x , y 转换前的坐标(以上都是从 MSDN 抄的,详见 msdn.microsoft.com)
'所有图形都被切变,并且旋转了 45 度。
'只能在 Windows NT 3.51+, 2000, XP, 及其它基于 Windows NT 的系统上运行。Option ExplicitPrivate Type XFORM
eM11 As Single
eM12 As Single
eM21 As Single
eM22 As Single
eDx As Single
eDy As Single
End Type
Private Declare Function SetWorldTransform Lib "gdi32" (ByVal hdc As Long, lpXform As XFORM) As Long
Private Declare Function CombineTransform Lib "gdi32" (lpxformResult As XFORM, lpxform1 As XFORM, lpxform2 As XFORM) As Long
Private Const GM_ADVANCED = 2
Private Declare Function SetGraphicsMode Lib "gdi32" (ByVal hdc As Long, ByVal iMode As Long) As Long
Private Const PI = 3.14159265358979
Private Const ROTATE_ANGLE = PI / 4#Private Sub Form_Load()
Dim xf As XFORM, xf2 As XFORM
Me.ScaleMode = vbPixels
SetGraphicsMode Me.hdc, GM_ADVANCED
With xf
.eM11 = 1
.eM12 = 0
.eM21 = -0.4
.eM22 = 1
End With
With xf2
.eM11 = CSng(Cos(ROTATE_ANGLE))
.eM12 = CSng(Sin(ROTATE_ANGLE))
.eM21 = -.eM12
.eM22 = .eM11
.eDx = 170
.eDy = -30
End With
CombineTransform xf, xf, xf2
SetWorldTransform Me.hdc, xf
End SubPrivate Sub Form_Paint()
Me.Line (75, 75)-(150, 150), , B
End Sub