如何创建一个gutter net overlay作为GUI?

问题描述 投票:1回答:1

我想要一个全屏幕GUI,其沟槽网络为96x96像素和一个小的沟槽边界(可能是一个像素)。 GUI应该是透明的覆盖图(只应显示阴沟网)。

为什么?我经常使用精灵表图像(创建,调整大小或重新排列它们)。我没有支持天沟线的软件作为帮助视图。有一个快速准确的调整是很好的。

我使用全屏GUI作为$WS_POPUP(无边框)窗口。排水沟是具有特定背景颜色的标签。我必须手动创建这些,所以我希望你有一个更好的主意。

我的代码到目前为止:

#include <GuiConstantsEx.au3>
#include <WindowsConstants.au3>

$iGuiW = @DesktopWidth
$iGuiH = @DesktopHeight
$iGuiGutterSize = 96
$hColor = 0x00FF00

$hGui = GUICreate("", @DesktopWidth, @DesktopHeight, 0, 0, $WS_POPUP, $WS_EX_TOOLWINDOW + $WS_EX_TOPMOST)
; From left to right.
GUICtrlCreateLabel("", 0, 0, $iGuiW, 1)
GUICtrlSetBkColor(-1, $hColor)

GUICtrlCreateLabel("", 0, $iGuiGutterSize, $iGuiW, 1)
GUICtrlSetBkColor(-1, $hColor)

GUICtrlCreateLabel("", 0, $iGuiGutterSize * 2, $iGuiW, 1)
GUICtrlSetBkColor(-1, $hColor)

GUICtrlCreateLabel("", 0, $iGuiGutterSize * 3, $iGuiW, 1)
GUICtrlSetBkColor(-1, $hColor)

; From top to bottom.
GUICtrlCreateLabel("", 0, 0, 1, $iGuiH)
GUICtrlSetBkColor(-1, $hColor)

GUICtrlCreateLabel("", $iGuiGutterSize, 0, 1, $iGuiH)
GUICtrlSetBkColor(-1, $hColor)

GUICtrlCreateLabel("", $iGuiGutterSize * 2, 0, 1, $iGuiH)
GUICtrlSetBkColor(-1, $hColor)

GUICtrlCreateLabel("", $iGuiGutterSize * 3, 0, 1, $iGuiH)
GUICtrlSetBkColor(-1, $hColor)

GUISetState( @SW_SHOW, $hGui )

While 1
    Switch GUIGetMsg()
        Case $GUI_EVENT_CLOSE
            GUIDelete($hGui)
            Exit
    EndSwitch
WEnd
  1. 除了阴沟线之外,如何使GUI透明?
  2. 如果不为每行(行和列)手动设置标签标签,我该怎么办?

是的,它就像一个网格设计,但只是边界作为线条。

user-interface autoit sprite-sheet
1个回答
0
投票

注意:

有点不清楚我的建议符合你的想象,但我想你的意思是网格设计。正如您所提到的,GUI就像一个叠加层(透明),只有网格线是可见的。

解决方案是在_createGridStructure()函数中,它使用一些WinAPI函数来提供这样的网格(矩形设计)。我在一个分离函数GUIDelete($hGui)中提取了你的Exit_disposeAndExit()。我还在一个函数中提取了GUI创建部分,使其更加灵活。

做法:

#include-once
#include <GuiConstantsEx.au3>
#include <WinAPI.au3>
#include <WindowsConstants.au3>

Global $iGuiWidth   = @DesktopWidth
Global $iGuiHeight  = @DesktopHeight
Global $iGridSize   = 96       ; change the size if you want
Global $vGridColor  = 0x00FF00 ; change the grid line color if you want
Global $hMainGui

Func _createGui()
    $hMainGui = GUICreate( '', $iGuiWidth, $iGuiHeight, 0, 0, $WS_POPUP, $WS_EX_TOOLWINDOW + $WS_EX_TOPMOST )
    GUISetBkColor( $vGridColor )
    GUISetState( @SW_SHOW, $hMainGui )
EndFunc

Func _createGridStructure()
    Local $iGridLinesX = Floor( $iGuiWidth / $iGridSize )
    Local $iGridLinesY = Floor( $iGuiHeight / $iGridSize )
    Local $hMainRegion = _WinAPI_CreateRectRgn( 0, 0, 0, 0 )

    For $i = 0 To $iGridLinesX Step 1
        $hRegion = _WinAPI_CreateRectRgn( $i * $iGridSize, 0, ( $i * $iGridSize ) + 1, $iGuiHeight )
        _WinAPI_CombineRgn( $hMainRegion, $hRegion, $hMainRegion, 2 )
        _WinAPI_DeleteObject( $hRegion )
    Next

    For $i = 0 To $iGridLinesY Step 1
        $hRegion = _WinAPI_CreateRectRgn( 0, $i * $iGridSize, $iGuiWidth, ( $i * $iGridSize ) + 1 )
        _WinAPI_CombineRgn( $hMainRegion, $hRegion, $hMainRegion, 2 )
        _WinAPI_DeleteObject( $hRegion )
    Next

    _WinAPI_SetWindowRgn( $hMainGui, $hMainRegion )
EndFunc

Func _disposeAndExit()
    GUIDelete( $hMainGui )
    Exit
EndFunc

_createGui()
_createGridStructure()

While 1
    Switch GUIGetMsg()
        Case $GUI_EVENT_CLOSE
            _disposeAndExit()
    EndSwitch
WEnd

现在,如果切换显示器分辨率,则无需手动调整网格线。

© www.soinside.com 2019 - 2024. All rights reserved.