BOOL EnumEnhMetaFile( HDC hDC, HENHMETAFILE hEmf, ENHMFENUMPROC pEnumFunc, LPVOID pData, CONST RECT *r);
Declare Function EnumEnhMetaFile Lib "gdi32" ( _ ByVal hDC As Long, _ ByVal hEmf As Long, _ ByVal pEnumFunc As Long, _ ByVal pData As Long, _ ByRef r As RECT) As Long
引数の意味は以下の通り。
| hDC | 列挙用コールバック関数がPlayEnhMetaFileRecordを呼び出す場合に使用される、拡張メタファイルの描画先のデバイスを識別するデバイスコンテキストのハンドル。NULLを指定可能。 |
| hEmf | 列挙を行なう拡張メタファイルのハンドル。 |
| pEnumFunc | 列挙用コールバック関数のアドレス。 |
| pData | コールバック関数に渡すアプリケーション固有のデータ。 |
| r | 列挙用コールバック関数においてPlayEnhMetaFileRecordレコードを描画する際に使用される、拡張メタファイルの描画領域。論理単位で指定する。 |
戻り値は、関数の実行結果に成功したか否かを表す真偽値である。
-------------------------------- Form1.frm --------------------------------
' EnumEnhMetaFileの例
Private Sub Command1_Click()
Dim hEmf As Long '拡張メタファイルのハンドル
Dim r As RECT '描画する領域
'拡張メタファイルのオープン
hEmf = GetEnhMetaFile("c:\pic\test.emf")
'描画領域の設定
r.Left = 0
r.Top = 0
r.Right = 100
r.Bottom = 100
'レコードの列挙
EnumEnhMetaFile Picture1.hDC, hEmf, AddressOf EnumFunc, 0, r
'拡張メタファイルのクローズ
DeleteEnhMetaFile hEmf
End Sub
-------------------------------- Module1.base --------------------------------
Declare Function PlayEnhMetaFileRecord Lib "gdi32" ( _
ByVal hDC As Long, _
ByVal pHandles As Long, _
ByVal pRecord As Long, _
ByVal HandleNum As Long) As Long
Declare Function RtlMoveMemory Lib "kernel32" ( _
ByVal pDest As Long, _
ByVal pSrc As Long, ByVal l As Long) As Long
' メタファイルレコード列挙コールバック
Public Function EnumFunc( _
ByVal hDC As Long, _
ByVal pHandles As Long, _
ByVal pRecord As Long, _
ByVal HandleNum As Long, _
ByVal pData As Long) As Long
Dim eh As EMR 'レコードのヘッダ
'レコードのヘッダをehに格納
RtlMoveMemory VarPtr(eh), pRecord, Len(eh)
'レコードの種類が円を描画するためのものであれば、そのレコードを再生
Select Case eh.iType
Case _
EMR_ELLIPSE, _
EMR_HEADER, _
EMR_SCALEVIEWPORTEXTEX, _
EMR_SCALEWINDOWEXTEX, _
EMR_SETMAPMODE, _
EMR_SETMAPPERFLAGS
PlayEnhMetaFileRecord(hDC, pHandles, pRecord, HandleNum)
End Select
EnumFunc = 1
End Function