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 );
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章