SetWorldTransform、cdc setmapmodee、MFC

SetGraphicsMode
  函数功能:该函数为指定的设备环境设置图形模式。
  函数原型:int SetGraphicsMode(HDC hdc, int iMode);
  参数:
  hdc:指向设备环境的句柄。
  iMode:指定图形模式,该参数可为下列值之一:
  GM_COMPAIBLE:设置与16位Windows相兼容的图形模式,这是缺省的模式。如果指定此值,应用程序只能通过调用设置窗口视窗范围和原点的函数来改变全局到设备的转换,但不是通过利用SetWorldTransform或ModifyWorldTransform,调用这些函数将失败,设置窗口和视窗范围和原点的函数的例子为SetViewportExtEx和SetwindowExtEx函数。
  GM_ADVANCED:Windows NT和Windows 98:设置高级图形模式,允许全局转换。如果应用程序设置或改变指定设备环境的全局转换,必须规定该值在这种模式中,所有的图形,包括文本输出,全部转换为设备环境规定的全局到设备的转换。
  Windows 95:不支持GM_ADVANCED,当操作增强的元文件时,Windows 95试图使Windows95中的增强的元文件看起来与在Windows NT上操作一样。为完成此功能,Windows 95当操作指定的增强元文件记录时,可以模仿GM_ADVANCED模式。
  返回值:如果调用成功,返回值为老图形模式,调用失败,返回值为零。若想获得更多错误信息,请调用GetLastError函数。
  备注:根据图形模式,有3种不同的表格输出:
  TextOutput:在GM_COMPATIBLE模式中,TrueType(或矢量字体)文本输出时的操作方式就该DC中全局到设备转换而言很象光栅字体文本输出。TrueType文本总是按从左到右和从上到下的顺序写,即使图形的剩余部分在X或Y轴被翻动,只有TrueType(或矢量字体)文本的高被定为合适的高度,在GM_COMPATIBLE模式中写非水平文本的唯一办法,是为该设备环境中选举的字体指定非零表格的大小和方向。
  在GM_ADVANCED模式中TrueType(或矢量字体)文本输出完全转换为设备环境中域到设备的转换,光栅字体只有很受局限的转换能力(通过某些整型系数来伸展)。图形设备界面(GDI)试图创造出最好的输出。
  Rectangle Exclusion:如果设置缺省的GM_COMPATIBLE图形模式,当画长方形时,系统不包括底部和最右的边。GM_ADVANCED图形模式应用于画底边和右边包括在内的长方形。
  Arc Drawing:如果设置缺省的GM_COMPATIBLE图形为模式,GDI用设备空间中当前弧的方向来画弧,根据此协议,弧不管页面到设备的转换,此转换要求沿着X或Y轴的翻动。如果设置了GM_ADVANCED图形模式,GDI总是在逻辑空间逆时针方向画弧。这就是说在GM_COMPATIBLE图形模式中,弧控制点和弧本身,都全遵从设备环境的全局到设备的转换。
SetWorldTransform
  函数功能:该函数为指定的设备环境设置全局空间和页面空间之间的二维的线性转变,此转换可用于比例缩放、旋转、剪切或翻译图形的输出。
  函数原型:BOOL SetWorldTransform(HDC hdc, CONST XFORM *lpXform);
  hdc:指向设备环境的句柄。
  lpxform:指向XFORM结构的指针,此结构含有转换数据。
  返回值:如果函数调用成功,返回值为非零值,否则为零。
  Windows NT:若想获得更多错误信息,请调用GetLastError函数。
  备注:对任何全局空间中的坐标点(X、Y),页面空间中的转换坐标点(X、Y)以下式来决定。
  X'=X*eM11+y*eM21+eDx, Y'+X*eM12+y*eM22+eDy
  转换矩阵为下列矩阵:
  |eM11 eM120|
  |eM21 eM220|
  |eDx eDy | 映射方式(由当前窗口和视口原点定义的)用于定义单位和比例。全局转换常用于以不依靠设备的方式来缩放或旋转逻辑图像。缺省全局转换是偏移为零的等同矩阵。除非先调用SetGraphicsMode函数将给定设备环境的图形模式设置为GM_ADVANCED,否则SetworldTranform函数调用将失败,同样,也不可能重新把设备环境的图形方式设置成缺省的GM_COMPATIBLE方式,除非全局转已经通过调用SetWorldtransform或ModifyworldTransform函数首先重新设置缺省的等同转换。
使用XFORM来控制DC时,需要先设置绘图模式SetGraphicsMode为GM_ADVANCED,再用SetWorldTransform。
否则SetWorldTransform函数会失败
映射后的坐标与映射前的坐标关系为
x' = x * eM11 + y * eM21 + eDx,&
y' = x * eM12 + y * eM22 + eDy,&
若要设置缩放比例,则只需设置eM11和eM22为相应的比例,其余设置为0即可;
若要设置一个逆时针旋转了@度的坐标系映射,则eM11为cos(@), eM12为-sin(@), eM21 为 sin(@), eM22为cos(@)
若要使坐标系平移(a,b),则eDx=a, eDy = b。
若要设置一个缩放比例为0.5,逆时针旋转30度,平移(20,50)的坐标系,则eM11 = 0.5 * cos(30) = 0.4330, eM12 = 0.5 * [- sin( 30 )] = -0.25, eM21 = 0.5 * sin ( 30 ) = 0.25, eM22 = 0.5 * cos( 30 ) = 0.4330, eDx = 20, eDy = 50
注:以上关系只在不改变和原屏幕坐标一样的XY轴关系(X轴正方向为Y轴正方向逆时针旋转90度)的情况下成立。
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:64818次
排名:第19391名
原创:27篇
转载:63篇
评论:19条
(1)(3)(3)(2)(2)(1)(1)(1)(1)(4)(16)(9)(8)(13)(14)(11)请教Maskblt函数问题
[问题点数:100分,结帖人bojinyu]
请教Maskblt函数问题
[问题点数:100分,结帖人bojinyu]
不显示删除回复
显示所有回复
显示星级回复
显示得分回复
只显示楼主
本帖子已过去太久远了,不再提供回复功能。CDC::SetWorldTransform
CDC::SetWorldTransform
Visual Studio 2013
Sets a two-dimensional linear transformation between world space and page space for the specified device context. This transformation can be used to scale, rotate, shear, or translate graphics output.
BOOL SetWorldTransform(
const XFORM& rXform
Reference to an
structure that contains the transformation data.
Returns a nonzero value on success.
Returns 0 on failure.
To get extended error information, call .
This method wraps the Windows GDI function .
Header: afxwin.h
Your feedback about this content is important.Let us know what you think.
Additional feedback?
1500 characters remaining
Thank you!
We appreciate your feedback.
Have a suggestion to improve MSDN Library?
Visit our UserVoice Page to submit and vote on ideas!
Dev centers
Learning resourcesSetGraphicsMode
  函数功能:该函数为指定的设备环境设置图形模式。
  函数原型:int SetGraphicsMode(HDC hdc, int iMode);
  参数:
  hdc:指向设备环境的句柄。
  iMode:指定图形模式,该参数可为下列值之一:
  GM_COMPAIBLE:设置与16位Windows相兼容的图形模式,这是缺省的模式。如果指定此值,应用程序只能通过调用设置窗口视窗范围和原点的函数来改变全局到设备的转换,但不是通过利用SetWorldTransform或ModifyWorldTransform,调用这些函数将失败,设置窗口和视窗范围和原点的函数的例子为SetViewportExtEx和SetwindowExtEx函数。
  GM_ADVANCED:Windows NT和Windows 98:设置高级图形模式,允许全局转换。如果应用程序设置或改变指定设备环境的全局转换,必须规定该值在这种模式中,所有的图形,包括文本输出,全部转换为设备环境规定的全局到设备的转换。
  Windows 95:不支持GM_ADVANCED,当操作增强的元文件时,Windows 95试图使Windows95中的增强的元文件看起来与在Windows NT上操作一样。为完成此功能,Windows 95当操作指定的增强元文件记录时,可以模仿GM_ADVANCED模式。
  返回值:如果调用成功,返回值为老图形模式,调用失败,返回值为零。若想获得更多错误信息,请调用GetLastError函数。
  备注:根据图形模式,有3种不同的表格输出:
  TextOutput:在GM_COMPATIBLE模式中,TrueType(或矢量字体)文本输出时的操作方式就该DC中全局到设备转换而言很象光栅字体文本输出。TrueType文本总是按从左到右和从上到下的顺序写,即使图形的剩余部分在X或Y轴被翻动,只有TrueType(或矢量字体)文本的高被定为合适的高度,在GM_COMPATIBLE模式中写非水平文本的唯一办法,是为该设备环境中选举的字体指定非零表格的大小和方向。
  在GM_ADVANCED模式中TrueType(或矢量字体)文本输出完全转换为设备环境中域到设备的转换,光栅字体只有很受局限的转换能力(通过某些整型系数来伸展)。图形设备界面(GDI)试图创造出最好的输出。
  Rectangle Exclusion:如果设置缺省的GM_COMPATIBLE图形模式,当画长方形时,系统不包括底部和最右的边。GM_ADVANCED图形模式应用于画底边和右边包括在内的长方形。
  Arc Drawing:如果设置缺省的GM_COMPATIBLE图形为模式,GDI用设备空间中当前弧的方向来画弧,根据此协议,弧不管页面到设备的转换,此转换要求沿着X或Y轴的翻动。如果设置了GM_ADVANCED图形模式,GDI总是在逻辑空间逆时针方向画弧。这就是说在GM_COMPATIBLE图形模式中,弧控制点和弧本身,都全遵从设备环境的全局到设备的转换。
SetWorldTransform
  函数功能:该函数为指定的设备环境设置全局空间和页面空间之间的二维的线性转变,此转换可用于比例缩放、旋转、剪切或翻译图形的输出。
  函数原型:BOOL SetWorldTransform(HDC hdc, CONST XFORM *lpXform);
  hdc:指向设备环境的句柄。
  lpxform:指向XFORM结构的指针,此结构含有转换数据。
  返回值:如果函数调用成功,返回值为非零值,否则为零。
  Windows NT:若想获得更多错误信息,请调用GetLastError函数。
  备注:对任何全局空间中的坐标点(X、Y),页面空间中的转换坐标点(X、Y)以下式来决定。
  X'=X*eM11+y*eM21+eDx, Y'+X*eM12+y*eM22+eDy
  转换矩阵为下列矩阵:
  |eM11 eM120|
  |eM21 eM220|
  |eDx eDy | 映射方式(由当前窗口和视口原点定义的)用于定义单位和比例。全局转换常用于以不依靠设备的方式来缩放或旋转逻辑图像。缺省全局转换是偏移为零的等同矩阵。除非先调用SetGraphicsMode函数将给定设备环境的图形模式设置为GM_ADVANCED,否则SetworldTranform函数调用将失败,同样,也不可能重新把设备环境的图形方式设置成缺省的GM_COMPATIBLE方式,除非全局转已经通过调用SetWorldtransform或ModifyworldTransform函数首先重新设置缺省的等同转换。
使用XFORM来控制DC时,需要先设置绘图模式SetGraphicsMode为GM_ADVANCED,再用SetWorldTransform。
否则SetWorldTransform函数会失败
映射后的坐标与映射前的坐标关系为
x' = x * eM11 + y * eM21 + eDx,&
y' = x * eM12 + y * eM22 + eDy,&
若要设置缩放比例,则只需设置eM11和eM22为相应的比例,其余设置为0即可;
若要设置一个逆时针旋转了@度的坐标系映射,则eM11为cos(@), eM12为-sin(@), eM21 为 sin(@), eM22为cos(@)
若要使坐标系平移(a,b),则eDx=a, eDy = b。
若要设置一个缩放比例为0.5,逆时针旋转30度,平移(20,50)的坐标系,则eM11 = 0.5 * cos(30) = 0.4330, eM12 = 0.5 * [- sin( 30 )] = -0.25, eM21 = 0.5 * sin ( 30 ) = 0.25, eM22 = 0.5 * cos( 30 ) = 0.4330, eDx = 20, eDy = 50
注:以上关系只在不改变和原屏幕坐标一样的XY轴关系(X轴正方向为Y轴正方向逆时针旋转90度)的情况下成立。
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:920549次
积分:4833
积分:4833
排名:第1788名
原创:44篇
转载:655篇
评论:65条
(9)(5)(2)(27)(14)(5)(1)(20)(24)(5)(11)(78)(57)(74)(3)(10)(4)(6)(1)(12)(1)(5)(4)(1)(22)(18)(1)(78)(4)(1)(1)(2)(13)(25)(8)(6)(9)(1)(2)(5)(3)(1)(1)(1)(4)(2)(1)(7)(5)(27)(9)(8)(9)(20)(4)(16)(10)(8)(2)

我要回帖

更多关于 setmapmode 的文章

 

随机推荐