User interface 如何将排水沟网覆盖创建为GUI?

User interface 如何将排水沟网覆盖创建为GUI?,user-interface,autoit,sprite-sheet,User Interface,Autoit,Sprite Sheet,我想要一个带有96x96像素排水沟网和一个小排水沟边框(可能是一个像素)的全屏GUI。GUI应该是透明的覆盖层(只显示排水沟网) 为什么??我经常使用精灵表图像(创建、调整大小或重新排列它们)。我没有支持排水沟线作为帮助视图的软件。这将是伟大的,有一个快速准确的调整 我使用全屏GUI作为$WS\u弹出窗口(无边框)窗口。边沟是具有特定背景颜色的标签。我必须手动创建这些,所以我希望您有更好的想法 到目前为止,我的代码是: #include <GuiConstantsEx.au3> #i

我想要一个带有96x96像素排水沟网和一个小排水沟边框(可能是一个像素)的全屏GUI。GUI应该是透明的覆盖层(只显示排水沟网)

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

我使用全屏GUI作为
$WS\u弹出窗口
(无边框)窗口。边沟是具有特定背景颜色的标签。我必须手动创建这些,所以我希望您有更好的想法

到目前为止,我的代码是:

#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
#包括
#包括
$iGuiW=@DesktopWidth
$iGuiH=@DesktopHeight
$iGutterSize=96
$hColor=0x00FF00
$hGui=GUICreate(“,@DesktopWidth,@DesktopHeight,0,0,$WS\u POPUP,$WS\u EX\u TOOLWINDOW+$WS\u EX\u topmest)
; 从左到右。
GUICtrlCreateLabel(“”,0,0,$iGuiW,1)
GUICTRLESTBKCOLOR(-1,$hColor)
GUICtrlCreateLabel(“”,0,$iGutterSize,$iGuiW,1)
GUICTRLESTBKCOLOR(-1,$hColor)
GUICtrlCreateLabel(“”,0,$iGutterSize*2,$iGuiW,1)
GUICTRLESTBKCOLOR(-1,$hColor)
GUICtrlCreateLabel(“”,0,$iGutterSize*3,$iGuiW,1)
GUICTRLESTBKCOLOR(-1,$hColor)
; 自上而下。
GUICtrlCreateLabel(“”,0,0,1,$iGuiH)
GUICTRLESTBKCOLOR(-1,$hColor)
GUICtrlCreateLabel(“,$iGutterSize,0,1,$iGuiH)
GUICTRLESTBKCOLOR(-1,$hColor)
GUICtrlCreateLabel(“,$iGutterSize*2,0,1,$iGuiH)
GUICTRLESTBKCOLOR(-1,$hColor)
GUICtrlCreateLabel(“,$iGutterSize*3,0,1,$iGuiH)
GUICTRLESTBKCOLOR(-1,$hColor)
GUISetState(@SW_SHOW,$hGui)
而1
开关GUIGetMsg()
案例$GUI\u事件\u结束
指南(hGui)
出口
终端开关
温德
  • 如何使GUI除了边线之外是透明的
  • 如果不为每行(行和列)逐个标签手动设置标签,我该如何操作

  • 是的,它类似于网格设计,但只是边界作为线。

    注意:

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

    解决方案在
    \u createGridStructure()
    函数中,该函数使用一些WinAPI函数来提供这样的网格(矩形设计)。我在一个单独的函数中提取了您的
    guidelet($hGui)
    Exit
    。我还提取了一个函数中的GUI创建部分,使其更加灵活

    方法:

    #包含一次
    #包括
    #包括
    #包括
    全局$iGuiWidth=@DesktopWidth
    全局$iGuiHeight=@DesktopHeight
    全球$iGridSize=96;如果需要,请更改大小
    全局$vGridColor=0x00FF00;如果需要,请更改网格线颜色
    全球$hMainGui
    Func_createGui()
    $hMainGui=GUICreate(“”,$iGuiWidth,$iGuiHeight,0,0,$WS_弹出窗口,$WS_EX_工具窗口+$WS_EX_顶部)
    GuisebkColor($vGridColor)
    GUISetState(@SW_SHOW,$hMainGui)
    EndFunc
    Func_createGridStructure()
    本地$iGridLinesX=地板($iguidth/$iGridSize)
    本地$iGridLinesY=地板($iGuiHeight/$iGridSize)
    本地$hMainRegion=\u WinAPI\u CreateRectRgn(0,0,0,0)
    对于$i=0到$iGridLinesX步骤1
    $hRegion=\u WinAPI\u CreateRectRgn($i*$iGridSize,0,($i*$iGridSize)+1,$iguiHight)
    _WinAPI_CombineRgn($hMainRegion,$hRegion,$hMainRegion,2)
    _WinAPI_DeleteObject($hRegion)
    下一个
    对于$i=0到$iGridLinesY步骤1
    $hRegion=\u WinAPI\u CreateRectRgn(0,$i*$iGridSize,$igiWidth,($i*$iGridSize)+1)
    _WinAPI_CombineRgn($hMainRegion,$hRegion,$hMainRegion,2)
    _WinAPI_DeleteObject($hRegion)
    下一个
    _WinAPI_SetWindowRgn($hMainGui,$hMainRegion)
    EndFunc
    Func_disposeAndExit()
    GUIDelete($hMainGui)
    出口
    EndFunc
    _createGui()
    _createGridStructure()
    而1
    开关GUIGetMsg()
    案例$GUI\u事件\u结束
    _disposeAndExit()
    终端开关
    温德
    

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

    注意:

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

    解决方案在
    \u createGridStructure()
    函数中,该函数使用一些WinAPI函数来提供这样的网格(矩形设计)。我在一个单独的函数中提取了您的
    guidelet($hGui)
    Exit
    。我还提取了一个函数中的GUI创建部分,使其更加灵活

    方法:

    #包含一次
    #包括
    #包括
    #包括
    全局$iGuiWidth=@DesktopWidth
    全局$iGuiHeight=@DesktopHeight
    全球$iGridSize=96;如果需要,请更改大小
    全局$vGridColor=0x00FF00;如果需要,请更改网格线颜色
    全球$hMainGui
    Func_createGui()
    $hMainGui=GUICreate(“”,$iGuiWidth,$iGuiHeight,0,0,$WS_弹出窗口,$WS_EX_工具窗口+$WS_EX_顶部)
    GuisebkColor($vGridColor)
    GUISetState(@SW_SHOW,$hMainGui)
    EndFunc
    Func_createGridStructure()
    本地$iGridLinesX=地板($iguidth/$iGridSize)
    本地$iGridLinesY=地板($iGuiHeight/$iGridSize)
    本地$hMainRegion=\u WinAPI\u CreateRectRgn(0,0,0,0)
    对于$i=0到$iGridLinesX步骤1
    $hRegion=\u WinAPI\u CreateRectRgn($i*$iGridSize,0,($i*$iGridSize)+1,$iguiHight)
    _WinAPI_CombineRgn($hMainRegion,$hRegion,$hMainRegion,2)
    _WinAPI_DeleteObject($hRegion)
    下一个
    对于$i=0到$iGridLinesY步骤1
    $hRegion=\u WinAPI\u CreateRectRgn(0,$i*$iGridSize,$igiWidth,($i*$iGridSize)+1)
    _WinAPI_CombineRgn($hMainRegion,$hRegion,$hMainRegion,2)