Visual C++ 概念:移植和升级 (MSDN 摘抄的,就一盗版)
2005-03-28 16:35
375 查看
Visual C++ 概念:移植和升级
ms-help://MS.MSDNQTR.2003FEB.2052/vccore/html/_core_graphics_functions.htm
大多数必须替换的 Windows 3.x API 函数返回合并的 x- 和 y- 坐标
在 Windows 3.x 中,x- 和 y- 坐标都是 16 位,并且被合并成 32 位 (DWORD) 函数返回值,这是最大的有效大小。在 Win32 中,两个坐标都是 32 位,合计 64 位,因此太大而不能放在单个返回值中。每个 Windows 3.x 函数都被替换为同名的 Win32 函数,但添加了 Ex 后缀。Ex 函数使用附加参数而非返回值传递 x- 和 y- 坐标。Win32 和 Windows 3.x 都支持这些新函数。
有问题的图形函数分为两组。第一组是设置坐标的函数,它们在下表中与 Win32 版本一起列出。
Windows 3.x 函数 函数的可移植版本
MoveTo MoveToEx
OffsetViewportOrg OffsetViewportOrgEx
OffsetWindowOrg OffsetWindowOrgEx
ScaleViewportExt ScaleViewportExtEx
ScaleWindowExt ScaleWindowExtEx
SetBitmapDimension SetBitmapDimensionEx
SetMetaFileBits SetMetaFileBitsEx
SetViewportExt SetViewportExtEx
SetWindowExt SetWindowExtEx
SetWindowOrg SetWindowOrgEx
第一列中的每个函数都返回值,尽管程序代码常常忽略该值。然而,即使不关心返回值,也必须用新的形式替换旧函数调用。Win32 不支持旧函数。
每个 Ex 函数都包含一个指向数据接收位置的附加参数。该函数调用后,此数据提供与相应函数的返回值相同的信息。如果不需要此信息,可将 NULL 传递给该参数。
在 Windows 3.x 下,可以按如下方式编写 MoveTo 函数调用:
MoveTo( hDC, x, y );
在两种 Windows 版本都支持的可移植版本中,MoveTo 调用重新编写如下。注意,MoveToEx 返回的信息被忽略:
MoveToEx( hDC, x, y, NULL );
一般的规则是,将 NULL 作为最后一个参数传递,除非需要使用 Windows 3.x 版返回的 x- 和 y- 坐标。在后一种情况中,使用下面关于 Get 函数的几段中概述的过程。
Windows 3.x 函数 函数的可移植版本
GetAspectRatioFilter GetAspectRatioFilterEx
GetBitmapDimension GetBitmapDimensionEx
GetBrushOrg GetBrushOrgEx
GetCurrentPosition GetCurrentPositionEx
GetTextExtent GetTextExtentPoint
GetTextExtentEx GetTextExtentExPoint
GetViewportExt GetViewportExtEx
GetViewportOrg GetViewportOrgEx
GetWindowExt GetWindowExtEx
GetWindowOrg GetWindowOrgEx
因为已经存在 Windows 3.1 扩展函数 GetTextExtentEx,所以 32 位版的 GetTextExtent 函数添加了 Point 后缀。因此,新函数是 GetTextExtentPoint 和 GetTextExtentExPoint。
与第一组函数一样,每个 Ex(和 Point)版本都添加了一个附加参数:指向 POINT 或 SIZE 结构以接收 x- 和 y- 坐标的指针。由于此结构总是具有适合环境的大小,因此可以通过以下方法编写可移植代码:
声明 POINT 或 SIZE 类型的局部变量,根据适用情况。
将指向此结构的指针作为函数的最后一个参数传递。
调用函数。函数通过用适当的信息填充此结构来响应。
例如,Windows 3.x 版的 GetTextExtent 调用从 DWORD 返回值(存储在临时变量 dwXY 中)中提取 x- 和 y- 坐标:
DWORD dwXY;
dwXY = GetTextExtent( hDC, szLabel1, strlen( szLabel1 ) );
rect.left = 0; rect.bottom = 0;
rect.right = LOWORD(dwXY);
rect.top = HIWORD(dwXY);
InvertRect( hDC, &rect );
可移植版本将指针传递到临时 SIZE 结构,然后从此结构中提取数据:
SIZE sizeRect;
GetTextExtentPoint( hDC, szLabel1, strlen( szLabel1 ), &sizeRect );
rect.left = 0; rect.bottom = 0;
rect.right = sizeRect.cx;
rect.top = sizeRect.cy;
InvertRect( hDC, &rect );
ms-help://MS.MSDNQTR.2003FEB.2052/vccore/html/_core_graphics_functions.htm
大多数必须替换的 Windows 3.x API 函数返回合并的 x- 和 y- 坐标
在 Windows 3.x 中,x- 和 y- 坐标都是 16 位,并且被合并成 32 位 (DWORD) 函数返回值,这是最大的有效大小。在 Win32 中,两个坐标都是 32 位,合计 64 位,因此太大而不能放在单个返回值中。每个 Windows 3.x 函数都被替换为同名的 Win32 函数,但添加了 Ex 后缀。Ex 函数使用附加参数而非返回值传递 x- 和 y- 坐标。Win32 和 Windows 3.x 都支持这些新函数。
有问题的图形函数分为两组。第一组是设置坐标的函数,它们在下表中与 Win32 版本一起列出。
Windows 3.x 函数 函数的可移植版本
MoveTo MoveToEx
OffsetViewportOrg OffsetViewportOrgEx
OffsetWindowOrg OffsetWindowOrgEx
ScaleViewportExt ScaleViewportExtEx
ScaleWindowExt ScaleWindowExtEx
SetBitmapDimension SetBitmapDimensionEx
SetMetaFileBits SetMetaFileBitsEx
SetViewportExt SetViewportExtEx
SetWindowExt SetWindowExtEx
SetWindowOrg SetWindowOrgEx
第一列中的每个函数都返回值,尽管程序代码常常忽略该值。然而,即使不关心返回值,也必须用新的形式替换旧函数调用。Win32 不支持旧函数。
每个 Ex 函数都包含一个指向数据接收位置的附加参数。该函数调用后,此数据提供与相应函数的返回值相同的信息。如果不需要此信息,可将 NULL 传递给该参数。
在 Windows 3.x 下,可以按如下方式编写 MoveTo 函数调用:
MoveTo( hDC, x, y );
在两种 Windows 版本都支持的可移植版本中,MoveTo 调用重新编写如下。注意,MoveToEx 返回的信息被忽略:
MoveToEx( hDC, x, y, NULL );
一般的规则是,将 NULL 作为最后一个参数传递,除非需要使用 Windows 3.x 版返回的 x- 和 y- 坐标。在后一种情况中,使用下面关于 Get 函数的几段中概述的过程。
Windows 3.x 函数 函数的可移植版本
GetAspectRatioFilter GetAspectRatioFilterEx
GetBitmapDimension GetBitmapDimensionEx
GetBrushOrg GetBrushOrgEx
GetCurrentPosition GetCurrentPositionEx
GetTextExtent GetTextExtentPoint
GetTextExtentEx GetTextExtentExPoint
GetViewportExt GetViewportExtEx
GetViewportOrg GetViewportOrgEx
GetWindowExt GetWindowExtEx
GetWindowOrg GetWindowOrgEx
因为已经存在 Windows 3.1 扩展函数 GetTextExtentEx,所以 32 位版的 GetTextExtent 函数添加了 Point 后缀。因此,新函数是 GetTextExtentPoint 和 GetTextExtentExPoint。
与第一组函数一样,每个 Ex(和 Point)版本都添加了一个附加参数:指向 POINT 或 SIZE 结构以接收 x- 和 y- 坐标的指针。由于此结构总是具有适合环境的大小,因此可以通过以下方法编写可移植代码:
声明 POINT 或 SIZE 类型的局部变量,根据适用情况。
将指向此结构的指针作为函数的最后一个参数传递。
调用函数。函数通过用适当的信息填充此结构来响应。
例如,Windows 3.x 版的 GetTextExtent 调用从 DWORD 返回值(存储在临时变量 dwXY 中)中提取 x- 和 y- 坐标:
DWORD dwXY;
dwXY = GetTextExtent( hDC, szLabel1, strlen( szLabel1 ) );
rect.left = 0; rect.bottom = 0;
rect.right = LOWORD(dwXY);
rect.top = HIWORD(dwXY);
InvertRect( hDC, &rect );
可移植版本将指针传递到临时 SIZE 结构,然后从此结构中提取数据:
SIZE sizeRect;
GetTextExtentPoint( hDC, szLabel1, strlen( szLabel1 ), &sizeRect );
rect.left = 0; rect.bottom = 0;
rect.right = sizeRect.cx;
rect.top = sizeRect.cy;
InvertRect( hDC, &rect );
相关文章推荐
- 流的概念(来自MSDN)
- C中一些小概念(摘抄自C陷阱与缺陷)
- Visual C++动态链接库编程之基础概念(转)
- 微软:盗版用户能免费升级Win10 但会有桌面水印提醒
- MFC 扩展库 - CJ60Lib ( 针对Visual C++ 6.0进行的升级 )
- Hi3520d uboot uImage rootfs 移植与升级
- vb升级到vb.net的一些文章(downmoon收集自msdn)
- [摘抄]将品牌机预装的Windows 7家庭版升级Windows 7旗舰版的超级方法
- 如何在 Microsoft Visual C# .NET 中实现 Microsoft Excel 自动化[摘抄MSDN]
- 转载-关于线程安全在msdn中概念
- 免费apk加密服务升级,高强度保护应用源代码避免盗版应用产生
- eMbedded Visual C++ 到 Visual Studio 2005 升级向导
- 基于ARM的嵌入式Linux移植真实体验(1)――基本概念
- uboot移植(一)BootLoader基本概念
- [MSDN转载]Visual Basic 语言概念--阴影操作和重写之间的差异
- [摘抄-数据库-学习中] 服务升级时候所谓的增/减量脚本
- I-O流概念认知升级
- MSDN-SQL小摘抄[积累更新中...]
- 结构(C# ) (摘抄msdn.备忘.)
- U-boot移植(一)--基本概念