Что нового

Закруглённый треугольник у GUI

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
Нужно сделать закруглённый треугольник (не знаю как правильно называется сия фигура) для GUI, вот так примерно:


Пока только получилось просто треугольник:

Код:
#Include <GUIConstantsEx.au3>
#Include <WindowsConstants.au3>
#Include <WinAPIGdi.au3>

$hForm = GUICreate('MyGUI', 200, 200, -1, -1, $WS_POPUP, BitOR($WS_EX_DLGMODALFRAME, $WS_EX_CLIENTEDGE))
_GUISetTriangle($hForm)
GUISetState()

Do
Until GUIGetMsg() = $GUI_EVENT_CLOSE

Func _GUISetTriangle($hWnd)
	Local $aPos = WinGetPos($hWnd)
	Local $aPoint[][2] = [[0, 0], [0, 0], [0, 0], [$aPos[2], $aPos[3]], [0, $aPos[2]]]
	Local $hRgn = _WinAPI_CreatePolygonRgn($aPoint)
	_WinAPI_SetWindowRgn($hWnd, $hRgn)
EndFunc
 

InnI

AutoIT Гуру
Сообщения
4,912
Репутация
1,429
CreatoR [?]
закруглённый треугольник
Сектор эллипса/окружности?
Код:
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <GDIPlus.au3>

$hForm = GUICreate('MyGUI', 200, 200, -1, -1, $WS_POPUP, BitOR($WS_EX_DLGMODALFRAME, $WS_EX_CLIENTEDGE))
_GUISetPie($hForm)
GUISetState()

Do
Until GUIGetMsg() = $GUI_EVENT_CLOSE

Func _GUISetPie($hWnd)
  _GDIPlus_Startup()
  Local $aPos = WinGetPos($hWnd)
  Local $hPath = _GDIPlus_PathCreate()
  _GDIPlus_PathAddPie($hPath, -$aPos[2], 0, $aPos[2] * 2, $aPos[3] * 2, 0, -90)
  Local $hRegion = _GDIPlus_RegionCreateFromPath($hPath)
  Local $hRgn = _GDIPlus_RegionGetHRgn($hRegion, 0)
  _WinAPI_SetWindowRgn($hWnd, $hRgn)
  _GDIPlus_RegionDispose($hRegion)
  _GDIPlus_PathDispose($hPath)
  _GDIPlus_Shutdown()
EndFunc
 
Автор
CreatoR

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
InnI
Спасибо!
А можно ещё изгиб добавить, как на картинке?
Что то не могу понять как играться со значениями...

Ещё было бы круто если можно нарисовать рамку у закругления как у не обрезанных краёв.
 

InnI

AutoIT Гуру
Сообщения
4,912
Репутация
1,429
CreatoR [?]
Замените сектор на безье с двумя линиями
Код:
...
;~   _GDIPlus_PathAddPie($hPath, -$aPos[2], 0, $aPos[2] * 2, $aPos[3] * 2, 0, -90)
  _GDIPlus_PathAddBezier($hPath, 0, 0, 170, 50, 170, 50, $aPos[2], $aPos[3])
  _GDIPlus_PathAddLine($hPath, $aPos[2], $aPos[3], 0, $aPos[3])
  _GDIPlus_PathAddLine($hPath, 0, $aPos[3], 0, 0)
...
 
Сообщения
142
Репутация
-3
OffTopic:
Может речь о треугольнике с закруглёнными углами? А-ля деревяшка, которой шары в бильярде выставляют. Если так, то стоит переименовать. И, возможно, расширить тему до "закруглённые углы у фигур"
 
Автор
CreatoR

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
InnI
Супер, благодарю.
 
Верх