Функция GUICtrlCreatePic

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


GUICtrlCreatePic

Создаёт рисунок в GUI.

GUICtrlCreatePic ( filename, left, top [, width [, height [, style = -1 [, exStyle = -1 ]]]] )

Параметры

filename Путь к рисунку : поддерживаются форматы BMP, JPG, GIF(без анимации).
left Координата левого края. Если -1 - тогда координата в соответствии с GUICoordMode.
top Координата верхнего края. Если -1 - тогда координата в соответствии с GUICoordMode.
width [необязательный] Ширина элемента (по умолчанию предыдущее значение).
height [необязательный] Высота элемента (по умолчанию предыдущее значение).
style [необязательный] Стиль элемента. Смотрите Стили элементов GUI в приложении.

-1 - по умолчанию : $SS_NOTIFY
принудительный стиль : $SS_BITMAP
exStyle [необязательный] Расширенный стиль элемента. Смотрите таблицу расширенных стилей.

Возвращаемое значение

Успех:Возвращает идентификатор (controlID) нового элемента.
Ошибка:Возвращает 0, если рисунок не может быть создан.

Примечания

Чтобы установить или изменить параметры элемента смотрите GUICtrlUpdate....

Для обновления иконки после отображения диалогового окна, используйте GUICtrlSetImage
Если вы хотите, чтобы рисунок был того же размера, что и в файле, то просто используйте ширина = высота = 0.

Чтобы иметь прозрачность в рисунке, нужно создать GUI-окно с расширенным стилем $WS_EX_LAYERED. Левый верхний пиксель будет использоваться как прозрачный цвет. Если созданы различные рисунки, последний рисунок является определяющим для прозрачности цвета. Смотрите пример 2.

Чтобы объединить стили со стилем по умолчанию используйте BitOR($GUI_SS_DEFAULT_PIC, новый стиль,...).

Чтобы использовать параметры, указанные выше, вы должны включить в ваш скрипт #include <StaticConstants.au3>.

По умолчанию стиль изменения размеров $GUI_DOCKSIZE (не изменяется размер).

Если рисунок установлен как фон, а другие элементы будут перекрываться, важно назначить disable элементу (controlID) рисунка: GUICtrlSetState(-1, $GUI_DISABLE).

Расширенный стиль $GUI_WS_EX_PARENTDRAG может использоваться для перетаскивания окна, которое не имеет заголовка (без стиля $WS_CAPTION в GUICreate).

Фон всегда устанавливается прозрачным. GUICtrlSetBkColor() не взаимодействует с элементом (controlID) рисунка.

PNG может использоваться с GDI+. Смотрите пример 3.

См. также

GUICoordMode (Опция), GUICtrlSetImage, GUICtrlUpdate..., GUIGetMsg

Пример

#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>

Global $gui, $guiPos, $pic, $picPos

Example1()
Example2()

;----- Пример 1 ----
Func Example1()
    Local $n, $msg

    GUICreate("GUI с рисунком", 350, 300, -1, -1, $WS_SIZEBOX + $WS_SYSMENU) ; Создаёт окно в центре экрана

    GUISetBkColor(0xE0FFFF)
    $n = GUICtrlCreatePic(@ScriptDir & "\..\GUI\mslogo.jpg", 50, 50, 200, 50)

    GUISetState()

    ; Запускается цикл опроса GUI до тех пор пока окно не будет закрыто
    While 1
        $msg = GUIGetMsg()

        If $msg = $GUI_EVENT_CLOSE Then ExitLoop
    WEnd

    ; Изменяет размер элемента
    $n = GUICtrlSetPos($n, 50, 50, 200, 100)
    ; Запускается цикл опроса GUI до тех пор пока окно не будет закрыто
    While 1
        $msg = GUIGetMsg()

        If $msg = $GUI_EVENT_CLOSE Then ExitLoop
    WEnd

    GUIDelete()
EndFunc

;----- Пример 2
Func Example2()
    Local $msg

    $gui = GUICreate("Прозрачный", 200, 100)
    $pic = GUICreate("", 68, 71, 10, 20, $WS_POPUP, BitOR($WS_EX_LAYERED, $WS_EX_MDICHILD), $gui)
    GUICtrlCreatePic(@ScriptDir & "\..\GUI\merlin.gif", 0, 0, 0, 0)

    GUISetState(@SW_SHOW, $pic)
    GUISetState(@SW_SHOW, $gui)

    HotKeySet("{ESC}", "Main")
    HotKeySet("{Left}", "Left")
    HotKeySet("{Right}", "Right")
    HotKeySet("{Down}", "Down")
    HotKeySet("{Up}", "Up")
    $picPos = WinGetPos($pic)
    $guiPos = WinGetPos($gui)

    Do
        $msg = GUIGetMsg()
    Until $msg = $GUI_EVENT_CLOSE

    HotKeySet("{ESC}")
    HotKeySet("{Left}")
    HotKeySet("{Right}")
    HotKeySet("{Down}")
    HotKeySet("{Up}")
EndFunc

Func Main()
    $guiPos = WinGetPos($gui)
    WinMove($gui, "", $guiPos[0] + 10, $guiPos[1] + 10)
EndFunc

Func Left()
    $picPos = WinGetPos($pic)
    WinMove($pic, "", $picPos[0] - 10, $picPos[1])
EndFunc

Func Right()
    $picPos = WinGetPos($pic)
    WinMove($pic, "", $picPos[0] + 10, $picPos[1])
EndFunc

Func Down()
    $picPos = WinGetPos($pic)
    WinMove($pic, "", $picPos[0], $picPos[1] + 10)
EndFunc

Func Up()
    $picPos = WinGetPos($pic)
    WinMove($pic, "", $picPos[0], $picPos[1] - 10)
EndFunc

;----- Пример 3, PNG, работа цикла от Zedna
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <GDIPlus.au3>
#include <WinAPI.au3>

Global $hGUI, $hImage, $hGraphic, $hImage1

; Создаёт GUI
$hGUI = GUICreate("PNG", 250, 250)

; Загружает рисунок PNG
_GDIPlus_Startup()
$hImage = _GDIPlus_ImageLoadFromFile(@ScriptDir & "\..\GUI\Torus.png")
$hGraphic = _GDIPlus_GraphicsCreateFromHWND($hGUI)

GUIRegisterMsg($WM_PAINT, "MY_WM_PAINT")
GUISetState()

; Цикл ожидающий выхода
Do
Until GUIGetMsg() = $GUI_EVENT_CLOSE

; Очищает от ресурсов
_GDIPlus_GraphicsDispose($hGraphic)
_GDIPlus_ImageDispose($hImage)
_GDIPlus_Shutdown()

; Рисует рисунок PNG
Func MY_WM_PAINT($hWnd, $msg, $wParam, $lParam)
    #forceref $hWnd, $Msg, $wParam, $lParam
    _WinAPI_RedrawWindow($hGUI, 0, 0, $RDW_UPDATENOW)
    _GDIPlus_GraphicsDrawImage($hGraphic, $hImage, 0, 0)
    _WinAPI_RedrawWindow($hGUI, 0, 0, $RDW_VALIDATE)
    Return $GUI_RUNDEFMSG
EndFunc