_GDIPlus_GraphicsComment
Добавляет текстовый комментарий в существующий метафайл
#Include <GDIP.au3>
_GDIPlus_GraphicsComment($hGraphics, $pData, $iData)
Параметры
$hGraphics | Указатель на объект Graphics |
$pData |
Указатель на буфер, содержащий комментарий |
$iData | Количество байт, на который указывает $pData |
Возвращаемое значение
Успех: | Возвращает True |
Ошибка: | Возвращает False, либо: |
Если ошибка DllCall(), устанавливает @error и @extended возвращённые вызовом DllCall() | |
$GDIP_STATUS содержит не нулевое значение кода ошибки. |
См. также
Пример
#include <GDIP.au3>
#include <GUIConstantsEx.au3>
Global $sText
_Example()
Func _Example()
Local $hGUI, $hGraphics, $hDC, $hBrush, $hImageGraphics, $hMetafile, $pData, $tData, $iData, $sFileName, $hCallback, $pCallback
; Инициализирует библиотеку GDI+
_GDIPlus_Startup()
$sFileName = @MyDocumentsDir & "\SampleMeta.emf"
$hGUI = GUICreate("Создаёт комментарий", 400, 350)
GUISetState()
; Создаёт графический объект из дескриптора окна
$hGraphics = _GDIPlus_GraphicsCreateFromHWND($hGUI)
; Получает контекст устройства графического объекта, который будет связан с метафайлом
$hDC = _GDIPlus_GraphicsGetDC($hGraphics)
; Создаёт объект Metafile для записи
$hMetafile = _GDIPlus_MetafileRecordFileName($sFileName, $hDC)
; Получает графический контекст изображения, любой рисунок сохраняется в метафайл
$hImageGraphics = _GDIPlus_ImageGetGraphicsContext($hMetafile)
; Записывает полупрозрачный зеленый заполненный прямоугольник
$hBrush = _GDIPlus_BrushCreateSolid(0x8000FF00) ; Полупрозрачный зеленый
_GDIPlus_GraphicsFillRect($hImageGraphics, 0, 0, 200, 200, $hBrush)
; Создаёт комментарий
$tData = DllStructCreate("char[9]")
$pData = DllStructGetPtr($tData)
$iData = 9
DllStructSetData($tData, 1, "AutoIt v3")
; Добавляет комментарий в метафайл
_GDIPlus_GraphicsComment($hImageGraphics, $pData, $iData)
; Записывает другое действие, заполнение эллипса и добавление дополнительных комментариев
_GDIPlus_BrushSetFillColor($hBrush, 0x80FF00FF)
_GDIPlus_GraphicsFillEllipse($hImageGraphics, 200, 0, 150, 200, $hBrush)
; Изменяет комментарий в структуре
DllStructSetData($tData, 1, "Commented")
_GDIPlus_GraphicsComment($hImageGraphics, $pData, $iData)
; Освобождает контекст устройства
_GDIPlus_GraphicsReleaseDC($hGraphics, $hDC)
; Теперь сохраняет метафайл
_GDIPlus_GraphicsDispose($hImageGraphics) ; Изображение сохраняется и особая блокировка разблокирована
_GDIPlus_ImageDispose($hMetafile)
; Регистрирует функцию обратного вызова - перечисление, вызываемую для каждой записи в метафайл
$hCallback = DllCallbackRegister("_MetafileEnum", "int", "int;uint;uint;ptr;ptr")
$pCallback = DllCallbackGetPtr($hCallback)
; Создаёт объект Metafile из образца файла метафайла и начинает воспроизведение записей
$hMetafile = _GDIPlus_MetafileCreateFromFile($sFileName)
; Начинает перечисление записей метафайла
_GDIPlus_MetafileEnumerateDestPoint($hGraphics, $hMetafile, 0, 0, $pCallback, $hMetafile)
; Рисует комментарии
_GDIPlus_GraphicsDrawString($hGraphics, $sText, 20, 20)
Do
Until GUIGetMsg() = $GUI_EVENT_CLOSE
; Освобождает ресурсы
DllCallbackFree($pCallback)
_GDIPlus_ImageDispose($hMetafile)
_GDIPlus_BrushDispose($hBrush)
_GDIPlus_GraphicsDispose($hGraphics)
; Закрывает библиотеку GDI+
_GDIPlus_Shutdown()
EndFunc
; $iRecordType - One of the predefined record type (ellipse, rectangle, comment, etc..)
; $iFlags - Set of flags that specify attributes of the record
; $iDataSize - Number of bytes in the record data
; $pRecordData - Pointer to a buffer that contains the record data
; $pUserData - The user defined data previously passed to the one of the Metafile enumeration functions
; Return False to abort the enumeration, True to proceed.
Func _MetafileEnum($iRecordType, $iFlags, $iDataSize, $pRecordData, $pUserData)
Local $tText
; Play only the ellipse and the comments
Switch $iRecordType
; Filled ellipse
Case $GDIP_EMFPLUSRECORDTYPEFILLELLIPSE
_GDIPlus_MetafilePlayRecord($pUserData, $iRecordType, $iFlags, $iDataSize, $pRecordData)
Case $GDIP_EMFPLUSRECORDTYPECOMMENT
$tText = DllStructCreate("char[" & $iDataSize & "]", $pRecordData)
$sText &= DllStructGetData($tText, 1) & @CRLF
EndSwitch
; Continue to enumerate
Return True
EndFunc