Что нового

Получить дескриптор GUI

musicstashall

Знающий
Сообщения
322
Репутация
7
Выполняю рисование в GUI. Прежде чем создать графический объект, необходимо получить дескриптор текущего GUI окна, в котором применяется функция с набором графических элементов. Не нахожу ничего подобного в справке.

Код:
Graphic()

Func Graphic()
    ; Здесь необходимо получить хендл окна и записать его в $hWnd
    _GDIPlus_Startup()
    $hGraphics = _GDIPlus_GraphicsCreateFromHWND($hWnd)
    $hBrush1 = _GDIPlus_BrushCreateSolid(0xFFE5F3FF)
    $hBrush2 = _GDIPlus_BrushCreateSolid(0xFF879289)
    $hBrush3 = _GDIPlus_BrushCreateSolid(0xFFFFFFFF)
EndFunc
 

Prog

Продвинутый
Сообщения
537
Репутация
65
musicstashall сказал(а):
Прежде чем создать графический объект, необходимо получить дескриптор текущего GUI окна
http://autoit-script.ru/autoit3_docs/functions/GUICreate.htm
Возвращаемое значение
Успех: Возвращает дескриптор окна.
Ошибка: Возвращает 0, если окно не может быть создано, и устанавливает @error равным 1.
 

pvnn

Осваивающий
Сообщения
305
Репутация
32
musicstashall, создайте GUI - это и будет дескриптор окна
Код:
Local $hGUI = GUICreate("GDI+ example", 100, 200)

$hGUI - дескриптор окна
Ниже, пример для наглядности

Код:
#include <GDIPlus.au3>
#include <GUIConstantsEx.au3>

Example()

Func Example()
    _GDIPlus_Startup() ;initialize GDI+
    Local Const $iWidth = 600, $iHeight = 600, $iBgColor = 0x303030 ;$iBGColor format RRGGBB

    Local $hGUI = GUICreate("GDI+ example", $iWidth, $iHeight) ;create a test GUI
    GUISetBkColor($iBgColor, $hGUI) ;set GUI background color
    GUISetState(@SW_SHOW)

    Local $hGraphics = _GDIPlus_GraphicsCreateFromHWND($hGUI) ;create a graphics object from a window handle
    _GDIPlus_GraphicsSetSmoothingMode($hGraphics, $GDIP_SMOOTHINGMODE_HIGHQUALITY) ;sets the graphics object rendering quality (antialiasing)
    Local $hBrush1 = _GDIPlus_BrushCreateSolid(0xFF8080A0) ;color format AARRGGBB (hex)
    Local $hBrush2 = _GDIPlus_BrushCreateSolid(0xFFDD8800) ;color format AARRGGBB (hex)
    Local $hBrush3 = _GDIPlus_BrushCreateSolid(0xFFDD0088) ;color format AARRGGBB (hex)
    _GDIPlus_GraphicsFillPie($hGraphics, 115, 105, 400.75, 400.125, 45, 360, $hBrush1)
    _GDIPlus_GraphicsFillPie($hGraphics, 115, 105, 400.75, 400.125, 45, 200, $hBrush2)
    _GDIPlus_GraphicsFillPie($hGraphics, 115, 105, 400.75, 400.125, 45, 90, $hBrush3)

    Do
    Until GUIGetMsg() = $GUI_EVENT_CLOSE

    ;cleanup GDI+ resources
    _GDIPlus_PenDispose($hBrush3)
    _GDIPlus_PenDispose($hBrush2)
    _GDIPlus_PenDispose($hBrush1)
    _GDIPlus_GraphicsDispose($hGraphics)
    _GDIPlus_Shutdown()
    GUIDelete($hGUI)
EndFunc   ;==>Example
 
Автор
M

musicstashall

Знающий
Сообщения
322
Репутация
7
Это понятно, что при создании GUI я имею его дескриптор. А теперь представьте, у вас десять окон, из них есть и дочерние, на некоторых я создаю графические элементы из созданного мной же шаблона. Всё дело в шаблоне. Вот в этот шаблон и нужно передать дескриптор окна.
 

inververs

AutoIT Гуру
Сообщения
2,135
Репутация
465
Может вам нужен
Код:
WinGetHandle('[ACTIVE]')



Добавлено:
Сообщение автоматически объединено:

Или вот, список со всеми окнами:
Код:
#include <array.au3>
Opt('WinSearchChildren', 1)
$a = WinList ()
_ArrayDisplay($a)



Добавлено:
Сообщение автоматически объединено:

Вот еще функция для перечисления всех дочерних окон родителя:
Код:
_WinAPI_EnumChildWindows
 
Верх