Функция _GDIPlus_GraphicsComment

         Описание функции


_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