94 lines
2.6 KiB
AutoHotkey
94 lines
2.6 KiB
AutoHotkey
#SingleInstance, Force
|
|
#NoEnv
|
|
SetBatchLines, -1
|
|
|
|
; Uncomment if Gdip.ahk is not in your standard library
|
|
;#Include, Gdip.ahk
|
|
|
|
; Start gdi+
|
|
If !pToken := Gdip_Startup()
|
|
{
|
|
message =
|
|
( LTrim
|
|
gdiplus error!, Gdiplus failed to start.
|
|
Please ensure you have gdiplus on your system.
|
|
)
|
|
MsgBox, 48, %message%
|
|
ExitApp
|
|
}
|
|
OnExit, Exit
|
|
|
|
; Set the width and height we want as our drawing area, to draw everything in.
|
|
; This will be the dimensions of our bitmap
|
|
Width := A_ScreenWidth, Height := A_ScreenHeight
|
|
|
|
; Create a layered window
|
|
; (+E0x80000 : must be used for UpdateLayeredWindow to work!)
|
|
; that is always on top (+AlwaysOnTop), has no taskbar entry or caption
|
|
Gui, 1: -Caption +E0x80000 +LastFound +OwnDialogs +Owner +AlwaysOnTop
|
|
|
|
; Show the window
|
|
Gui, 1: Show, NA
|
|
|
|
; Get a handle to this window we have created in order to update it later
|
|
hwnd1 := WinExist()
|
|
|
|
; Create a gdi bitmap with width and height of what we are going to
|
|
; draw into it. This is the entire drawing area for everything
|
|
hbm := CreateDIBSection(Width, Height)
|
|
|
|
; Get a device context compatible with the screen
|
|
hdc := CreateCompatibleDC()
|
|
|
|
; Select the bitmap into the device context
|
|
obm := SelectObject(hdc, hbm)
|
|
|
|
; Get a pointer to the graphics of the bitmap, for use with drawing functions
|
|
G := Gdip_GraphicsFromHDC(hdc)
|
|
|
|
; ARGB = Transparency, Red, Green, Blue
|
|
Colors := "0xFF000000,0xFFFF0000,0xFF00FF00,0xFF0000FF"
|
|
Colors .= ",0xFFFF00FF,0xFF00FFFF,0xFFFFFF00,0xFFFFFFFF"
|
|
; This list ^ is Black, Red, Green, Blue, Magenta, Cyan, Yellow, White
|
|
StringSplit Colors, Colors, `,
|
|
w := Width // Colors0
|
|
Loop % Colors0
|
|
{
|
|
; Create a brush to draw a rectangle
|
|
pBrush := Gdip_BrushCreateSolid(Colors%A_Index%)
|
|
|
|
; Fill the graphics of the bitmap with a rectangle using the brush created
|
|
Gdip_FillRectangle(G, pBrush, w*(A_Index-1), 0, w, height)
|
|
|
|
; Delete the brush as it is no longer needed and wastes memory
|
|
Gdip_DeleteBrush(pBrush)
|
|
}
|
|
; Update the specified window we have created (hwnd1) with a handle to our
|
|
; bitmap (hdc), specifying the x,y,w,h we want it positioned on our screen
|
|
; So this will position our gui at (0,0) with the Width and
|
|
; Height specified earlier
|
|
UpdateLayeredWindow(hwnd1, hdc, 0, 0, Width, Height)
|
|
|
|
|
|
; Select the object back into the hdc
|
|
SelectObject(hdc, obm)
|
|
|
|
; Now the bitmap may be deleted
|
|
DeleteObject(hbm)
|
|
|
|
; Also the device context related to the bitmap may be deleted
|
|
DeleteDC(hdc)
|
|
|
|
; The graphics may now be deleted
|
|
Gdip_DeleteGraphics(G)
|
|
Return
|
|
|
|
;#######################################################################
|
|
|
|
GuiEscape:
|
|
Exit:
|
|
; gdi+ may now be shutdown on exiting the program
|
|
Gdip_Shutdown(pToken)
|
|
ExitApp
|
|
Return
|