1 (изменено: Clannad5, 2021-04-16 17:12:23)

Тема: AHK: Прозрачный GUI с библиотекой GdiP

Данный скрипт демонстрирует GUI окно с прозрачными краями, при помощи обычной Png/Bmp картинки с Альфа-каналом.


; Code from http://www.autohotkey.com/board/topic/80924-make-windows-background-transparent-but-not-its-content/?p=514404
#SingleInstance, Force
#NoEnv
detecthiddenwindows on
SetBatchLines, -1

onexit exit_

#include gdip.ahk    ;download http://www.autohotkey.com/forum/topic32238.html 

If !pToken := Gdip_Startup()
{
   MsgBox, 48, gdiplus error!, Gdiplus failed to start. Please ensure you have gdiplus on your system
   ExitApp
}


Gui, 1:  -Caption +E0x80000 +LastFound +OwnDialogs +Owner +alwaysontop
Gui, 1: Show, NA
gui +lastfound
hwnd := WinExist()


sFile=%a_scriptdir%\BG.bmp

pBitmap:=Gdip_CreateBitmapFromFile(sFile)
Gdip_GetDimensions(pBitmap, w, h)

hbm := CreateDIBSection(w,h)
hdc := CreateCompatibleDC()
obm := SelectObject(hdc, hbm)
pGraphics := Gdip_GraphicsFromHDC(hdc)


Gdip_DrawImage(pGraphics, pBitmap,0,0,w,h)
UpdateLayeredWindow(hwnd, hdc, (A_ScreenWidth-w)//2, (A_ScreenHeight-h)//2, w,h)

OnMessage(0x201, "WM_LBUTTONDOWN")
return



WM_LBUTTONDOWN()
{
	PostMessage, 0xA1, 2
}


esc::
exit_:
SelectObject(hdc, obm)
DeleteObject(hbm)
DeleteDC(hdc)
Gdip_DeleteGraphics(pGraphics)
Gdip_DisposeImage(pBitmap)
Gdip_Shutdown(pToken)
ExitApp

Скриншот с примером:

https://i.imgur.com/JBcmwxe.png

Используется библиотека Gdip: http://www.autohotkey.com/forum/topic32238.html
Код взять отсюда: http://www.autohotkey.com/board/topic/8 … /?p=514404

2

Re: AHK: Прозрачный GUI с библиотекой GdiP

Пример конечно хороший, но на мой взгляд много строк.
Легче использовать вариант по стандарту и без библиотеки: ссылка. У него плюс в том, что можно самому указать цвет прозрачного цвета, минус в том, что только один.

Win10x64, AHK v1.1.37.01 (Unicode 64-bit) | AHK-Wiki | Переменные и выражения | RegEx101

3 (изменено: Clannad5, 2021-04-17 05:23:09)

Re: AHK: Прозрачный GUI с библиотекой GdiP

__Михаил__

Ну если убрать всё лишнее и использовать только сам принцип использования, то код можно уместить и в 15 строчек кода.
Ведь Gdip библиотека, сама по себе, тоже хранит достаточно много строчек кода.

Поэтому не вижу в этом особой проблемы, в угоду хорошего дизайна и больших возможностей, как для того же Радиального меню, когда нужно сделать красивое развёртывание интерфейса.