Last active
January 27, 2018 07:58
-
-
Save maz-1/3b42fb686092a68a01bb107ade3d46b5 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
;https://autohotkey.com/boards/viewtopic.php?t=3144 | |
#NoEnv | |
#SingleInstance, Force | |
SetWinDelay, -1 | |
SetBatchLines, -1 | |
#include <gdip> | |
Global HMain, XMain, YMain, HChild, XChild, YChild | |
Scaling_Ratio:=A_ScreenDPI/96 | |
;Titlebar 28 | |
;Width and Height should be multiples of 4 | |
WinW:=300 | |
WinH:=300 | |
; ---------------------------------------------------------------------------------------------------------------------- | |
; Main GUI | |
Gui, Main: New, +LastFound -Caption -Border +HwndHMain +LabelGui +E0x80000 +AlwaysOnTop | |
FrameShadow(HMain) | |
Gui, Color, 000000 | |
;WinSet, TransColor, 000000 | |
pToken := Gdip_Startup() | |
w:=WinW*Scaling_Ratio | |
h:=WinH*Scaling_Ratio | |
hbm := CreateDIBSection(w,h) | |
hdc := GetDC(HMain) | |
mdc := CreateCompatibleDC(hdc) | |
obm := SelectObject(mdc, hbm) | |
pGraphics := Gdip_GraphicsFromHDC(mdc) | |
;https://msdn.microsoft.com/en-us/library/windows/desktop/ms534173(v=vs.85).aspx | |
Gdip_SetSmoothingMode(pGraphics, 4) | |
;https://msdn.microsoft.com/en-us/library/windows/desktop/ms535810(v=vs.85).aspx | |
Gdip_SetInterpolationMode(pGraphics, 4) | |
;Setformat Integer,H | |
;border & fill color | |
PenWidth:=Scaling_Ratio | |
;FillColor:=0x7f00b7ee | |
;Get color via dwm api | |
VarSetCapacity(vcolor,28) | |
VarSetCapacity(vsubend,16) | |
DllCall("dwmapi\DwmGetColorizationColor", "UInt", &vcolor, "UInt", &vsubend) | |
FillColor:=NumGet(vcolor,0) | |
FillColor:=(FillColor&0x00ffffff)|0x9f000000 | |
VarSetCapacity(vcolor,0) | |
VarSetCapacity(vsubend,0) | |
;Dimmer ∈ [0,2] | |
;Dimmer < 1 : Dimmer | |
;Dimmer > 1 : Brighter | |
Dimmer:=0.9 | |
If (Dimmer < 1 && Dimmer >= 0) | |
{ | |
BorderR:=Round(((FillColor & 0x00ff0000)//0x10000)*Dimmer)*0x10000 | |
BorderG:=Round(((FillColor & 0x0000ff00)//0x100)*Dimmer)*0x100 | |
BorderB:=Round(((FillColor & 0x000000ff))*Dimmer) | |
BorderColor:=0xff000000+BorderR+BorderG+BorderB | |
} | |
Else If (Dimmer > 1 && Dimmer <= 2) | |
{ | |
BorderR:=Round(0xff*(Dimmer-1)+((FillColor & 0x00ff0000)//0x10000)*(2-Dimmer))*0x10000 | |
BorderG:=Round(0xff*(Dimmer-1)+((FillColor & 0x0000ff00)//0x100)*(2-Dimmer))*0x100 | |
BorderB:=Round(0xff*(Dimmer-1)+((FillColor & 0x000000ff))*(2-Dimmer)) | |
BorderColor:=0xff000000+BorderR+BorderG+BorderB | |
} | |
Else | |
BorderColor:=FillColor | 0xff000000 | |
pBrush:=Gdip_BrushCreateSolid(FillColor) | |
pPen:=Gdip_CreatePen(BorderColor, PenWidth) | |
Shift_Factor:=Round(PenWidth/4-Floor(PenWidth/4)) | |
DrawX:=PenWidth/2, DrawY:=PenWidth/2 | |
DrawW:=w-PenWidth-Shift_Factor, DrawH:=h-PenWidth-Shift_Factor, DrawR:=Scaling_Ratio*5 | |
;Rectangle | |
Gdip_FillRectangle(pGraphics, pBrush, DrawX, DrawY, DrawW, DrawH) | |
Gdip_DrawRectangle(pGraphics, pPen, DrawX, DrawY, DrawW, DrawH) | |
;Rounded Rectangle | |
;Gdip_FillRoundedRectangle(pGraphics, pBrush, DrawX, DrawY, DrawW, DrawH, DrawR) | |
;Gdip_DrawRoundedRectangle(pGraphics, pPen, DrawX, DrawY, DrawW, DrawH, DrawR) | |
UpdateLayeredWindow(HMain, mdc, (A_ScreenWidth-w)//2, (A_ScreenHeight-h)//2, w,h) | |
;clean up | |
Gdip_DeletePen(pPen) | |
Gdip_DeleteBrush(pBrush) | |
DeleteObject(hbm) | |
DeleteDC(mdc) | |
ReleaseDC(hdc, HMain) | |
Gdip_DeleteGraphics(pGraphics) | |
Gdip_Shutdown(pToken) | |
; ---------------------------------------------------------------------------------------------------------------------- | |
; Child GUI | |
Gui, Child: New, -Caption +LastFound -Border +HwndHChild +OwnerMain | |
;FrameShadow(HChild) | |
Gui, Margin, 0, 0 | |
Gui, Color, 123456 | |
Gui, Add, ListView, x10 y10 w200 h200, Colum1|Colum2 ; <----- This control can't be seen | |
Loop, 10 | |
LV_Add("", "Col1 " . A_Index, "Col2 " . A_Index) | |
Gui, Add, Edit, x+10 yp w50, Edit | |
Gui, Add, Button, xp y+10 wp gClicked, Button | |
WinSet, TransColor, 123456 | |
; ---------------------------------------------------------------------------------------------------------------------- | |
Gui, Main: Show, w%WinW% h%WinH% | |
EnableBlur(hMain) | |
WinGetPos, XMain, YMain, W, H, ahk_id %HMain% | |
XChild := XMain + PenWidth, YChild := YMain + 28*Scaling_Ratio + PenWidth | |
Gui, Child: Show, x%XChild% y%YChild% | |
;XChild := XMain, YChild := YMain, W_Child := W/Scaling_Ratio, H_Child := H/Scaling_Ratio | |
;Gui, Child: Show, x%XChild% y%YChild% w%W_Child% h%H_Child% | |
OnMessage(0x0201, "WM_LBUTTONDOWN") | |
OnMessage(0x0216, "WM_MOVING") | |
OnMessage(0x0232, "WM_EXITSIZEMOVE") | |
Return | |
Clicked: | |
Gui, +OwnDialogs | |
MsgBox, Bingo! | |
Return | |
GuiEscape: | |
ExitApp | |
WM_LBUTTONDOWN() { | |
If (A_Gui = "Main") | |
PostMessage, 0xA1, 2, 0, , ahk_id %HMain% | |
} | |
WM_EXITSIZEMOVE() { | |
If (A_Gui = "Main") | |
WinActivate, ahk_id %HChild% | |
WinActivate, ahk_id %HMain% | |
} | |
WM_MOVING(W, L) { | |
If (A_Gui = "Main") { | |
DX := NumGet(L + 0, 0, "Int") - XMain, DY := NumGet(L + 0, 4, "Int") - YMain | |
WinMove, ahk_id %HChild%, , % (XChild += DX), % (YChild += DY) | |
XMain += DX, YMain += DY | |
} | |
} | |
EnableBlur(hWnd) | |
{ | |
; WindowCompositionAttribute | |
WCA_ACCENT_POLICY := 19 | |
; AccentState | |
ACCENT_DISABLED := 0, | |
ACCENT_ENABLE_GRADIENT := 1, | |
ACCENT_ENABLE_TRANSPARENTGRADIENT := 2 | |
ACCENT_ENABLE_BLURBEHIND := 3 | |
ACCENT_INVALID_STATE := 4 | |
accentStructSize := VarSetCapacity(AccentPolicy, 4*4, 0) | |
NumPut(ACCENT_ENABLE_BLURBEHIND, AccentPolicy, 0, "UInt") | |
padding := A_PtrSize == 8 ? 4 : 0 | |
VarSetCapacity(WindowCompositionAttributeData, 4 + padding + A_PtrSize + 4 + padding) | |
NumPut(WCA_ACCENT_POLICY, WindowCompositionAttributeData, 0, "UInt") | |
NumPut(&AccentPolicy, WindowCompositionAttributeData, 4 + padding, "Ptr") | |
NumPut(accentStructSize, WindowCompositionAttributeData, 4 + padding + A_PtrSize, "UInt") | |
DllCall("SetWindowCompositionAttribute", "Ptr", hWnd, "Ptr", &WindowCompositionAttributeData) | |
} | |
FrameShadow(HGui) { | |
DllCall("dwmapi\DwmIsCompositionEnabled","IntP",_ISENABLED) ; Get if DWM Manager is Enabled | |
if !_ISENABLED ; if DWM is not enabled, Make Basic Shadow | |
DllCall("SetClassLong","UInt",HGui,"Int",-26,"Int",DllCall("GetClassLong","UInt",HGui,"Int",-26)|0x20000) | |
else { | |
VarSetCapacity(_MARGINS,16) | |
NumPut(1,&_MARGINS,0,"UInt") | |
NumPut(1,&_MARGINS,4,"UInt") | |
NumPut(1,&_MARGINS,8,"UInt") | |
NumPut(1,&_MARGINS,12,"UInt") | |
DllCall("dwmapi\DwmSetWindowAttribute", "Ptr", HGui, "UInt", 2, "Int*", 2, "UInt", 4) | |
DllCall("dwmapi\DwmExtendFrameIntoClientArea", "Ptr", HGui, "Ptr", &_MARGINS) | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment