Тема: AHK: GDI+ нарисовать прозрачный элемент поверх другого
Вопрос к знатокам графики.
Следующий код заполняет окно серым цветом и рисует два прямоугольника.
Как нарисовать второй прямоугольник прозрачным относительно первого прямоугольника?
Чтобы, по итогу, получилось так.
#include Gdip.ahk
if(!Gdip_Startup())
msgbox % "Can't start GDI+"
Gui, -Caption +hwndhwnd +E0x80000 ; WS_EX_LAYERED
Gui, Show, W1 H1 Hide
w:=100,h:=100
x:=(A_ScreenWidth-w)//2
y:=(A_ScreenHeight-h)//2
hdc:=CreateCompatibleDC()
hbm:=CreateDIBSection(w, h)
obm:=SelectObject(hdc, hbm)
;Background
;=======================================
bkg_hdc1:=DrawNewPoly(w,h,0xFFeeeeee)
BitBlt(hdc, 0,0, w, h, bkg_hdc1, 0,0,0)
;=======================================
;Green
;=======================================
figure_hdc1:=DrawNewPoly(w,30,0xFFbbeeaa)
BitBlt(hdc, 0,0, w, 30, figure_hdc1, 0,0,0)
;=======================================
;Black
;=======================================
figure_hdc2:=DrawNewPoly(50,30,0x20000000)
BitBlt(hdc, 40,0, 50, 30, figure_hdc2, 0,0,0)
;=======================================
UpdateLayeredWindow(hwnd, hdc, x, y, w, h)
Gui, Show
return
DrawNewPoly(w,h,argb) {
hbm:=CreateDIBSection(w, h)
hdc:=CreateCompatibleDC()
obm:=SelectObject(hdc, hbm)
g:=Gdip_GraphicsFromHDC(hdc)
brush:=Gdip_BrushCreateSolid(argb)
res:=Gdip_FillRectangle(g,brush,0,0,w,h)
Gdip_DeleteBrush(brush)
return hdc
}
f1::reload