Visual C++ 概念:移植和升级 (MSDN 摘抄的,就一盗版)

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 );
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值