#NoEnv Loop, %A_WinDir%\Web\Wallpaper\*.jpg, 0, 1 { PicFile := A_LoopFileLongPath Break } ; PicFile := A_WinDir . "\Web\Wallpaper\Blaues Fenster.jpg" ; German Win XP ; PicFile := A_WinDir . "\Web\Wallpaper\Landscapes\img7.jpg" ; Win 7 ; PicFile := A_WinDir . "\Web\Wallpaper\theme2\img10.jpg" ; Win 8.1 Content := "One|Two|Three|Four|Five|Six|Seven|Eight|Nine|Ten|Eleven|Twelve|Thirteen|Fourteen|Fifteen|Sixteen" ; ---------------------------------------------------------------------------------------------------------------------- Global hMain Gui, New, hwndhMain Gui, Font, s12 Gui, Add, Picture, x0 y0 w600 h400 hwndhPic, %PicFile% Gui, Add, ListBox, x50 y50 w200 r8 vLB1 gSel1 Choose1, %Content% Gui, Add, ListBox, x+100 yp wp hp hwndhLB vLB Choose1 gSelection -VScroll -E0x0200, %Content% TLB := New TransparentListBox(hLB, hPic, 0xFFFFFF, 0x000000, 0xFFFFFF, 128) Gui, Show, w600 h400, Transparent ListBox Return ; ---------------------------------------------------------------------------------------------------------------------- GuiClose: ExitApp ; ---------------------------------------------------------------------------------------------------------------------- #If WinActive("ahk_id " . hMain) !x:: Random, R, 0, % TLB.ItemCount GuiControl, %hMain%:Choose, LB, %R% Return #If ; ---------------------------------------------------------------------------------------------------------------------- Selection: GuiControlGet, LB ToolTip, Selected: %LB%`nA_GuiEvent: %A_GuiEvent%`nA_EventInfo: %A_EventInfo% SetTimer, KillTT, -750 Return Sel1: GuiControlGet, LB1 ToolTip, Selected: %LB1%`nA_GuiEvent: %A_GuiEvent%`nA_EventInfo: %A_EventInfo% SetTimer, KillTT, -750 Return KillTT: ToolTip Return ; ====================================================================================================================== ; Namespace: TransparentListBox ; Function: Helper object for transparent ListBoxes ; Tested with: AHK 1.1.19.01 (A32/U32/U64) ; Tested on: Win 8.1 (x64) ; Version: 0.1.01.00/2013-10-03/just me - Initial release. ; 0.1.01.00/2015-01-17/just me - Added scrolling by keys without a vertical scroll bar. ; ====================================================================================================================== ; CLASS TransparentListBox ; ; The class provides transparent background for ListBox controls. The whole stuff is done by subclassing the control. ; ; On creation via 'TLB := New TranparentListBox' you have to pass the HWNDs of the ListBox and the underlying control ; or window. Additionally you may pass a text color and a seperate color to draw selected items with. Colors have to ; be passed as RGB integer values. ; ; After you've changed the content or size of the ListBox, or if you want to change the text or selection color, you ; have to call 'TLB.Update()' once, passing the new color values if desired. Thw whole action should be enclosed by ; two calls of 'TLB.SetRedraw(False/True)' to avoid flickering as far as possible. ; ; Due to the complex way ListBoxes do their scrolling not all options of a common ListBox are supported. ; You have to keep in mind the following restrictions: ; - The new object instance has to be created before the Gui is shown. ; - The ListBox must not have a horizontal scroll bar (because I haven't a clue how to do the scrolling). ; - The Multi(select) option is not supported as yet (but it may be feasible). ; - Scrolling is not 'smooth'. ; ====================================================================================================================== Class TransparentListBox { ; ------------------------------------------------------------------------------------------------------------------- ; Constructor ; ------------------------------------------------------------------------------------------------------------------- __New(HLB, HBG, TxtColor := "", SelColor := "", SelBkGnd := "", SelBkTrans := 255) { ; ---------------------------------------------------------------------------------------------------------------- ; HLB : HWND of the ListBox. ; HBG : HWND of the control or Gui containing the background. ; TxtColor : Optional - Text color (RGB integer value, e.g. 0xRRGGBB). ; SelColor : Optional - Selected text color (RGB integer value, e.g. 0xRRGGBB). ; SelBkGnd : Optional - Color of the selection rectangel (RGB integer value, e.g. 0xRRGGBB). ; SelBkTrans : Optional - Transparency of the selection rectangle (0 - 255). ; ---------------------------------------------------------------------------------------------------------------- Static LB_GETCOUNT := 0x018B, LB_GETITEMRECT := 0x0198, WM_GETFONT := 0x0031 This.HLB := HLB This.HBG := HBG This.Parent := DllCall("User32.dll\GetParent", "Ptr", HLB, "UPtr") This.CtrlID := DllCall("User32.dll\GetDlgCtrlID", "Ptr", HLB, "UPtr") HDC := DllCall("User32.dll\GetDC", "Ptr", HLB, "UPtr") If (TxtColor <> "") This.TxtColor := ((TxtColor >> 16) & 0xFF) | (TxtColor & 0x00FF00) | ((TxtColor & 0xFF) << 16) Else This.TxtColor := DllCall("Gdi32.dll\GetTextColor", "Ptr", HDC, "UInt") If (SelColor <> "") This.SelColor := ((SelColor >> 16) & 0xFF) | (SelColor & 0x00FF00) | ((SelColor & 0xFF) << 16) If (SelBkGnd <> "") { This.SelBkGnd := ((SelBkGnd >> 16) & 0xFF) | (SelBkGnd & 0x00FF00) | ((SelBkGnd & 0xFF) << 16) This.SelBkTrans := (SelBkTrans & 0xFF) } DllCall("User32.dll\ReleaseDC", "Ptr", HLB, "Ptr", HDC) VarSetCapacity(RECT, 16, 0) SendMessage, %LB_GETITEMRECT%, 0, % &RECT, , ahk_id %HLB% This.ItemWidth := NumGet(RECT, 8, "Int") - NumGet(RECT, 0, "Int") This.ItemHeight := NumGet(RECT, 12, "Int") - NumGet(RECT, 4, "Int") SendMessage, %LB_GETCOUNT%, 0, 0, , ahk_id %HLB% This.ItemCount := ErrorLevel SendMessage, %WM_GETFONT%, 0, 0, , ahk_id %HLB% This.Font := ErrorLevel ControlGet, Content, List, , , ahk_id %HLB% This.Items := StrSplit(Content, "`n") This.HasBackground := False This.TopIndex := This.CurSel := -1 This.Drawing := True ControlGet, Styles, Style, , , ahk_id %HLB% If (Styles & 0x00200000) { ; WS_VSCROLL -> the lisbox has a vertical scroll bar VarSetCapacity(SI, 28, 0) ; SCROLLINFO NumPut(28, SI, 0, "UInt") ; cbSize NumPut(3, SI, 4, "UInt") ; fMask = SIF_RANGE | SIF_PAGE DllCall("User32.dll\GetScrollInfo", "Ptr", HLB, "Int", 1, "Ptr", &SI) This.SIMin := NumGet(SI, 8, "Int") ; nMin This.SIMax := NumGet(SI, 12, "Int") ; nMax This.SIPage := NumGet(SI, 16, "UInt") ; nPage } Else { DllCall("User32.dll\GetClientRect", "Ptr", HLB, "Ptr", &RECT) This.SIMin := 0 This.SIPage := NumGet(RECT, 12, "Int") // This.ItemHeight This.SIMax := This.ItemCount - 1 } SCCB := RegisterCallback("TransparentListBox.SubClassCallback") DllCall("Comctl32.dll\SetWindowSubclass", "Ptr", HLB, "Ptr", SCCB, "Ptr", HLB, "Ptr", &This) This.SCCB := SCCB } ; ------------------------------------------------------------------------------------------------------------------- ; Destructor ; ------------------------------------------------------------------------------------------------------------------- __Delete() { Static SRCCOPY := 0x00CC0020 If (This.BMPDC) { BGDC := DllCall("User32.dll\GetDC", "Ptr", This.HBG, "UPtr") DllCall("Gdi32.dll\BitBlt", "Ptr", BGDC, "Int", This.Left, "Int", This.Top, "Int", This.Width , "Int", This.Height, "Ptr", This.BMPDC, "Int", 0, "Int", 0, "UInt", SRCCOPY) DllCall("User32.dll\ReleaseDC", "Ptr", This.HBG, "Ptr", BGDC) DllCall("Gdi32.dll\DeleteDC", "Ptr", This.BMPDC) DllCall("Gdi32.dll\DeleteObject", "Ptr", This.HBMP) This.BMPDC := This.HBMP := 0 } If (This.SELDC) { DllCall("Gdi32.dll\DeleteDC", "Ptr", This.SELDC) DllCall("Gdi32.dll\DeleteObject", "Ptr", This.HSEL) } If (This.HLB) { DllCall("Comctl32.dll\RemoveWindowSubclass", "Ptr", This.HLB, "Ptr", This.SCCB, "Ptr", This.HLB) } } ; ------------------------------------------------------------------------------------------------------------------- ; Subclass callback function - for internal use only ; ------------------------------------------------------------------------------------------------------------------- SubClassCallback(uMsg, wParam, lParam, IdSubclass, RefData) { Critical 100 hWnd := This ; first parameter 'hWnd' is passed as 'This' Return Object(RefData).SubClassProc(hWnd, uMsg, wParam, lParam) } ; ------------------------------------------------------------------------------------------------------------------- ; Subclassproc - for internal use only ; ------------------------------------------------------------------------------------------------------------------- SubClassProc(hWnd, uMsg, wParam, lParam) { Static LB := {GETCOUNT: 0x018B, GETCURSEL: 0x0188, GETITEMRECT: 0x0198, GETTEXT: 0x0189,GETTEXTLEN: 0x018A , GETTOPINDEX: 0x018E, ITEMFROMPOINT: 0x01A9, SETCURSEL: 0x0186} Static LBN := {SELCHANGE: 1, DBLCLK: 2} Static WM := {DESTROY: 0x0002, DRAWITEM: 0x002B, LBUTTONDBLCLK: 0x0203, ERASEBKGND: 0x0014, HSCROLL: 0x0114 , KEYDOWN: 0x0100, KILLFOCUS: 0x0008, LBUTTONDOWN: 0x0201, LBUTTONUP: 0x0202, MOUSEWHEEL: 0x020A , PAINT: 0x000F, SETFOCUS: 0x0007, SETREDRAW: 0x000B, VSCROLL: 0x0115} Static VK := {DOWN: 0x28, END: 0x23, HOME: 0x24, NEXT: 0x22, PRIOR: 0x21, UP: 0x26 , 0x21: 1, 0x22: 1, 0x23: 1, 0x24: 1, 0x26: 1, 0x28: 1} Static SRCCOPY := 0x00CC0020 Static DrawingMsg := "" ; ---------------------------------------------------------------------------------------------------------------- ; Painting ; ---------------------------------------------------------------------------------------------------------------- ; WM_PAINT message If (uMsg = WM.PAINT) { VarSetCapacity(PAINTSTRUCT, A_PtrSize + (4 * 7) + 32 + (A_PtrSize - 4), 0) LBDC := DllCall("USer32.dll\BeginPaint", "Ptr", This.HLB, "Ptr", &PAINTSTRUCT, "UPtr") SendMessage, % LB.GETCURSEL, 0, 0, , ahk_id %hWnd% CurSel := ErrorLevel SendMessage, % LB.GETTOPINDEX, 0, 0, , ahk_id %hWnd% TopIndex := ErrorLevel This.TopIndex := TopIndex This.CurSel := CurSel DllCall("Gdi32.dll\BitBlt", "Ptr", LBDC, "Int", 0, "Int", 0, "Int", This.Width, "Int", This.Height , "Ptr", This.BMPDC, "Int", 0, "Int", 0, "UInt", SRCCOPY) HFONT := DllCall("Gdi32.dll\SelectObject", "Ptr", LBDC, "Ptr", This.Font, "UPtr") DllCall("Gdi32.dll\SetBkMode", "Ptr", LBDC, "Int", 1) ; TRANSPARENT VarSetCapacity(RECT, 16, 0) SendMessage, % LB.GETITEMRECT, %TopIndex%, &RECT, , ahk_id %hWnd% While (TopIndex < This.ItemCount) && (NumGet(RECT, 12, "Int") <= This.Height) { If (This.SELDC) && (TopIndex = CurSel) { L := NumGet(RECT, 0, "Int"), T := NumGet(RECT, 4, "Int") W := NumGet(RECT, 8, "Int") - L, H := NumGet(RECT, 12, "Int") - T If (This.SelBkTrans = 255) DllCall("Gdi32.dll\BitBlt", "Ptr", LBDC, "Int", L, "Int", T, "Int", W, "Int", H , "Ptr", This.SELDC, "Int", 0, "Int", 0, "UInt", SRCCOPY) Else DllCall("Gdi32.dll\GdiAlphaBlend", "Ptr", LBDC, "Int", L, "Int", T, "Int", W, "Int", H , "Ptr", This.SELDC, "Int", 0, "Int", 0, "Int", W, "Int", H , "UInt", (This.SelBkTrans << 16)) } Txt := This.Items[TopIndex + 1], Len := StrLen(Txt) TextColor := (TopIndex = CurSel ? This.SelColor : This.TxtColor) DllCall("Gdi32.dll\SetTextColor", "Ptr", LBDC, "UInt", TextColor) NumPut(NumGet(RECT, 0, "Int") + 3, RECT, 0, "Int") DllCall("User32.dll\DrawText", "Ptr", LBDC, "Ptr", &Txt, "Int", Len, "Ptr", &RECT, "UInt", 0x0840) NumPut(NumGet(RECT, 0, "Int") - 3, RECT, 0, "Int") DllCall("User32.dll\OffsetRect", "Ptr", &RECT, "Int", 0, "Int", This.ItemHeight) TopIndex++ } DllCall("Gdi32.dll\SelectObject", "Ptr", LBDC, "Ptr", HFONT, "UPtr") DllCall("User32.dll\EndPaint", "Ptr", &PAINTSTRUCT) Return 0 } ; WM_ERASEBKGND message If (uMsg = WM.ERASEBKGND) { If (!This.HasBackground) { ; processed once after creation/update VarSetCapacity(RECT, 16, 0) DllCall("User32.dll\GetClientRect", "Ptr", This.HLB, "Ptr", &RECT) This.Width := W := NumGet(RECT, 8, "Int") This.Height := H := NumGet(RECT, 12, "Int") DllCall("User32.dll\ClientToScreen", "Ptr", This.HLB, "Ptr", &RECT) DllCall("User32.dll\ScreenToClient", "Ptr", This.HBG, "Ptr", &RECT) This.Left := L := NumGet(RECT, 0, "Int") This.Top := T := NumGet(RECT, 4, "Int") BGDC := DllCall("User32.dll\GetDC", "Ptr", This.HBG, "UPtr") BMPDC := DllCall("Gdi32.dll\CreateCompatibleDC", "Ptr", BGDC, "UPtr") HBMP := DllCall("Gdi32.dll\CreateCompatibleBitmap", "Ptr", BGDC, "Int", W, "Int", H, "UPtr") DllCall("Gdi32.dll\SelectObject", "Ptr", BMPDC, "Ptr", HBMP) DllCall("Gdi32.dll\BitBlt", "Ptr", BMPDC, "Int", 0, "Int", 0, "Int", W, "Int", H , "Ptr", BGDC, "Int", L, "Int", T, "UInt", SRCCOPY) If (This.SelBkGnd <> "") { SELDC := DllCall("Gdi32.dll\CreateCompatibleDC", "Ptr", BGDC, "UPtr") HSEL := DllCall("Gdi32.dll\CreateCompatibleBitmap", "Ptr", BGDC, "Int", This.ItemWidth , "Int", This.ItemHeight, "UPtr") DllCall("Gdi32.dll\SelectObject", "Ptr", SELDC, "Ptr", HSEL) Brush := DllCall("Gdi32.dll\CreateSolidBrush", "UInt", This.SelBkGnd, "UPtr") VarSetCapacity(RECT, 16, 0) NumPut(This.ItemWidth, RECT, 8, "Int") NumPut(This.ItemHeight, RECT, 12, "Int") DllCall("User32.dll\FillRect", "Ptr", SELDC, "Ptr", &RECT, "Ptr", Brush) DllCall("Gdi32.dll\DeleteObject", "Ptr", Brush) This.SELDC := SELDC This.HSEL := HSEL } DllCall("User32.dll\ReleaseDC", "Ptr", This.HBG, "Ptr", BGDC) This.BMPDC := BMPDC This.HBMP := HBMP LBDC := DllCall("User32.dll\GetDC", "Ptr", hWnd, "UPtr") DllCall("Gdi32.dll\BitBlt", "Ptr", LBDC, "Int", 0, "Int", 0, "Int", W, "Int", H , "Ptr", This.BMPDC, "Int", 0, "Int", 0, "UInt", SRCCOPY) DllCall("User32.dll\ReleaseDC", "Ptr", hWnd, "Ptr", LBDC) This.HasBackground := True } Return True } ; ---------------------------------------------------------------------------------------------------------------- ; Selection & Focus ; ---------------------------------------------------------------------------------------------------------------- ; WM_KILLFOCUS and WM_SETFOCUS messages If (uMsg = WM.KILLFOCUS) Or (uMsg = WM.SETFOCUS) { ; not processed Return 0 } ; LB_SETCURSEL message If (uMsg = LB.SETCURSEL) { If (This.Drawing) { DrawingMsg := uMsg This.SetRedraw(False) } DllCall("Comctl32.dll\DefSubclassProc", "Ptr", hWnd, "UInt", uMsg, "Ptr", wParam, "Ptr", lParam) If (DrawingMsg = LB.SETCURSEL) { This.SetRedraw(True) DrawingMsg := "" } SendMessage, % LB.GETTOPINDEX, 0, 0, , ahk_id %hWnd% TopIndex := ErrorLevel DllCall("User32.dll\SetScrollPos", "Ptr", hWnd, "Int", 1, "Int", TopIndex, "UInt", True) Return 0 } ; ---------------------------------------------------------------------------------------------------------------- ; Keyboard ; ---------------------------------------------------------------------------------------------------------------- ; WM_KEYDOWN message If (uMsg = WM.KEYDOWN) { If VK.HasKey(wParam) { CurSel := This.CurSel CurSel := (wParam = VK.DOWN) ? (CurSel + 1) : (wParam = VK.UP) ? (CurSel - 1) : (wParam = VK.Next) ? (CurSel + This.SIPage - 1) : (wParam = VK.PRIOR) ? (CurSel - This.SIPage + 1) : (wParam = VK.HOME) ? This.SIMin : (wParam = VK.END) ? This.SIMax : CurSel CurSel := (CurSel < This.SIMin) ? This.SIMin : (CurSel > This.SIMax) ? This.SIMax : CurSel If (Cursel <> This.Cursel) { If (This.Drawing) { DrawingMsg := uMsg This.SetRedraw(False) } SendMessage, % LB.SETCURSEL, %CurSel%, 0, , ahk_id %hWnd% If (DrawingMsg = WM.KEYDOWN) { This.SetRedraw(True) DrawingMsg := "" } PostMessage, 0x0111, % (This.CtrlID | (LBN.SELCHANGE << 16)), %hWnd%, , % "ahk_id " . This.Parent This.Cursel := CurSel } } Return 0 } ; ---------------------------------------------------------------------------------------------------------------- ; Mouse ; ---------------------------------------------------------------------------------------------------------------- ; WM_LBUTTONDOWN message If (uMsg = WM.LBUTTONDOWN) { ControlFocus, , ahk_id %hWnd% Return 0 } ; WM_LBUTTONUP message If (uMsg = WM.LBUTTONUP) { SendMessage, % LB.ITEMFROMPOINT, 0, %lParam%, , ahk_id %hWnd% Item := ErrorLevel If !(Item & 0xFFFF0000) && (Item <> This.CurSel) { If (This.Drawing) { DrawingMsg := uMsg This.SetRedraw(False) } SendMessage, % LB.SETCURSEL, %Item%, 0, , ahk_id %hWnd% If (DrawingMsg = WM.LBUTTONUP) { This.SetRedraw(True) DrawingMsg := "" } This.Cursel := Item PostMessage, 0x0111, % (This.CtrlID | (LBN.SELCHANGE << 16)), %hWnd%, , % "ahk_id " . This.Parent } Return 0 } ; WM_LBUTTONDBLCLK message If (uMsg = WM.LBUTTONDBLCLK) { PostMessage, 0x0111, % (This.CtrlID | (LBN.DBLCLK << 16)), %hWnd%, , % "ahk_id " . This.Parent Return 0 } ; WM_MOUSEWHEEL message If (uMsg = WM.MOUSEWHEEL) { Delta := (wParam >> 16) & 0xFFFF If ((Delta <= 0x7FFF) && (This.TopIndex > This.SIMin)) Or ((Delta > 0x7FFF) && ((This.TopIndex + This.SIPage) <= This.SIMax)) PostMessage, % WM.VSCROLL, % (Delta > 0x7FFF ? 1 : 0), 0, , ahk_id %hWnd% Return 0 } ; ---------------------------------------------------------------------------------------------------------------- ; Scrolling ; ---------------------------------------------------------------------------------------------------------------- ; WM_HCROLL message If (uMsg = WM.HSCROLL) { Return 0 } ; WM_VSCROLL message If (uMsg = WM.VSCROLL) { If (((wParam = 1) || (wParam = 3) || (wParam = 7)) && ((This.TopIndex + This.SIPage) > This.SIMax)) Or (((wParam = 0) || (wParam = 2) || (wParam = 6)) && (This.TopIndex <= This.SIMin)) Or (wParam = 8) || (wParam = 4) Return 0 If (This.Drawing) { DrawingMsg := uMsg This.SetRedraw(False) } DllCall("Comctl32.dll\DefSubclassProc", "Ptr", hWnd, "UInt", uMsg, "Ptr", wParam, "Ptr", lParam) If (DrawingMsg = WM.VSCROLL) { This.SetRedraw(True) DrawingMsg := "" } SendMessage, % LB.GETTOPINDEX, 0, 0, , ahk_id %hWnd% This.TopIndex := ErrorLevel ; Seems that you must not return here, because DefSubClassProc apparently updates the scroll bar ; position on the second call!!! ; Seems the above isn't true. ScrollPos := DllCall("User32.dll\GetScrollPos", "Ptr", hWnd, "Int", 1, "Int") ; SB_VERT = 1 DllCall("User32.dll\SetScrollPos", "Ptr", hWnd, "Int", 1, "Int", ScrollPos, "UInt", True) Return 0 } ; ---------------------------------------------------------------------------------------------------------------- ; Destroy ; ---------------------------------------------------------------------------------------------------------------- ; WM_DESTROY message If (uMsg = WM.DESTROY) { This.__Delete() } Return DllCall("Comctl32.dll\DefSubclassProc", "Ptr", hWnd, "UInt", uMsg, "Ptr", wParam, "Ptr", lParam) } ; ------------------------------------------------------------------------------------------------------------------- ; Update the instance variables ; ------------------------------------------------------------------------------------------------------------------- UpDate(TxtColor := "", SelColor := "", SelBkGnd := "", SelBkTrans := "") { ; ---------------------------------------------------------------------------------------------------------------- ; Optional TxtColor : New text color (RGB integer value, e.g. 0xRRGGBB). ; Optional SelColor : New selected text color (RGB integer value, e.g. 0xRRGGBB). ; Changes of the content or the size of the ListBox will be processed automatically. ; ---------------------------------------------------------------------------------------------------------------- Drawing := This.Drawing If (Drawing) This.SetRedraw(False) This.__Delete() If (TxtColor = "") If (This.TxtColor) TxtColor := ((This.TxtColor >> 16) & 0xFF) | (This.TxtColor & 0x00FF00) | ((This.TxtColor & 0xFF) << 16) If (SelColor = "") If (This.SelColor) SelColor := ((This.SelColor >> 16) & 0xFF) | (This.SelColor & 0x00FF00) | ((This.SelColor & 0xFF) << 16) If (SelBkGnd = "") If (This.SelBkGnd) SelBkGnd := ((This.SelBkGnd >> 16) & 0xFF) | (This.SelBkGnd & 0x00FF00) | ((This.SelBkGnd & 0xFF) << 16) If (SelBkTrans = "") If (This.SelBkTrans) SelBkTrans := This.SelBkTrans This.__New(This.HLB, This.HBG, TxtColor, SelColor, SelBkGnd, SelBkTrans) If (Drawing) This.SetRedraw(True) Return True } ; ------------------------------------------------------------------------------------------------------------------- ; Set Redrawing True/False ; ------------------------------------------------------------------------------------------------------------------- SetRedraw(Mode) { ; It's highly recommended to call this function instead of using GuiControl, -/+Redraw, ; because the drawing state will be stored internally for use by other methods. Static WM_SETREDRAW := 0x000B Mode := !!Mode This.Drawing := Mode SendMessage, %WM_SETREDRAW%, %Mode%, 0, , % "ahk_id " . This.HLB If (Mode) WinSet, Redraw, , % "ahk_id " . This.HLB Return True } }
声明:站内资源为整理优化好的代码上传分享与学习研究,如果是开源代码基本都会标明出处,方便大家扩展学习路径。请不要恶意搬运,破坏站长辛苦整理维护的劳动成果。本站为爱好者分享站点,所有内容不作为商业行为。如若本站上传内容侵犯了原著者的合法权益,请联系我们进行删除下架。
评论(0)