Что нового

Элементы GUI Графика в AutoIt

Prog

Продвинутый
Сообщения
537
Репутация
65
Версия AutoIt
3.3.16.0
Версия
1.0
В скрипт потребовалось добавить график и изучая возможности GUICtrlCreateGraphic удивился что не поддерживается такая простая функция как вывод текста. Кроме этого имеются ограничения на порядок рисования графических объектов.
Функция GUICtrlSetGraphic
Из-за конструктивных ограничений первыми нужно создать фигуры RECT (прямоугольник), ELLIPSE (эллипс) и PIE (сегмент). Например, LINE (линия) всегда рисуется поверх RECT (прямоугольника). Если важен порядок отображения фигур, тогда рекомендуется создать несколько элементов graphic, вместо одного элемента содержащего все фигуры.
С GDIPlus.au3 было больше вопросов чем ответов.

Из-за этого стал рассматривать другие варианты и успешным оказался перенос всего что касается графики в dll, которой скрипт предоставляет данные для рисования.
dll писал на PureBasic по нескольким причинам. В нем две графические библиотеки - 2DDrawing (GDI) и VectorDrawing (GDI+). Можно использовать любую или обе сразу.
Вывести картинку в окно позволяет ImageGadget (аналог GUICtrlCreatePic, но в параметре принимает hBITMAP а не путь к файлу ) и CanvasGadget.

В архиве несколько примеров того как в окне скрипта разместить гаждеты из dll.

Если в двух словах, в dll нужно передать дескриптор окна
Код:
$hGUI = GUICreate("", 500, 500, -1, -1, BitOR($WS_MINIMIZEBOX, $WS_MAXIMIZEBOX, $WS_SIZEBOX, $WS_CLIPCHILDREN))
$Gadget1 = DllCall($gui_dll, "HWND", "Canvas", "HWND", $hGUI, "int", 10, "int", 10, "int", 480, "int", 220)
$Gadget1 = $Gadget1[0]

В dll с дескриптором следует вызвать функцию UseGadgetList() чтобы гаждеты размещались в окне скрипта.
Код:
ProcedureDLL Canvas(hWnd, x.l, y.l, w.l, h.l)
  Protected Canvas
 
  UseGadgetList(hWnd) ; Окно в котором необходимо разместить гаджет.
  Canvas = CanvasGadget(#PB_Any, x, y, w, h, #PB_Canvas_Keyboard|#PB_Canvas_DrawFocus)
  BindGadgetEvent(Canvas, @CanvasEvent())
 
  ProcedureReturn Canvas
EndProcedure
Функция BindGadgetEvent() похожа на GUICtrlSetOnEvent() в том плане что позвоялет назначить функцию обработки событий для гаждета.

Canvas.png
Canvas2.png
Gradient.png
Alpha.png
 
Автор
Prog

Вложения

  • Gui_In_Dll.7z
    248.2 КБ · Просмотры: 12
Верх