chishingchan 发表于 2023-10-14 18:31:03

【已解决】GUI 控件能够创建字带边框的效果吗?

本帖最后由 chishingchan 于 2023-10-14 20:09 编辑

如图:

请教各位,谢谢!

chishingchan 发表于 2023-10-14 19:04:23

本帖最后由 chishingchan 于 2023-10-14 19:05 编辑

搜索论坛,看看帮助,弄了一个四不象!

#include <GDIPlus.au3>
#include <GUIConstantsEx.au3>

Example()

Func Example()
    Local $hGUI, $hGraphic, $hBrush, $hPen, $hPath, $hFamily, $tLayout

    $hGUI = GUICreate("文字带边框", 240, 50)
    GUISetState(@SW_SHOW)

    _GDIPlus_Startup()
    $hGraphic = _GDIPlus_GraphicsCreateFromHWND($hGUI)
    $hBrush = _GDIPlus_BrushCreateSolid(0xFF7F7F00)      ;字体颜色
    $hPen = _GDIPlus_PenCreate(0xFFFFFFFF, 3)      ;边框颜色

    $hPath = _GDIPlus_PathCreate()

    $hFamily = _GDIPlus_FontFamilyCreate("宋体")
    $tLayout = _GDIPlus_RectFCreate()
    _GDIPlus_PathAddString($hPath, "说:我是谁", $tLayout, $hFamily, 0, 48, 0)

    _GDIPlus_GraphicsSetSmoothingMode($hGraphic, $GDIP_SMOOTHINGMODE_HIGHQUALITY)
    _GDIPlus_GraphicsClear($hGraphic, 0xFF30A3FE)      ;背景色
    _GDIPlus_GraphicsFillPath($hGraphic, $hPath, $hBrush)
    _GDIPlus_GraphicsDrawPath($hGraphic, $hPath, $hPen)

    Do
    Until GUIGetMsg() = $GUI_EVENT_CLOSE

    _GDIPlus_FontFamilyDispose($hFamily)
    _GDIPlus_PathDispose($hPath)
    _GDIPlus_PenDispose($hPen)
    _GDIPlus_BrushDispose($hBrush)
    _GDIPlus_GraphicsDispose($hGraphic)
    _GDIPlus_Shutdown()
EndFunc

afan 发表于 2023-10-14 19:21:12

描边效果?
GUICreate('')
GUISetBkColor(0x55ff)
GUISetFont(30, 700)
Local $aPos1[] =
GUICtrlCreateLabel($aPos1, $aPos1 - 1, $aPos1 - 1, $aPos1, $aPos1)
GUICtrlSetColor(-1, 0xffffff)
GUICtrlCreateLabel($aPos1, $aPos1 + 1, $aPos1 + 1, $aPos1, $aPos1)
GUICtrlSetColor(-1, 0xffffff)
GUICtrlSetBkColor(-1, -2)
GUICtrlCreateLabel($aPos1, $aPos1 + 1, $aPos1 - 1, $aPos1, $aPos1)
GUICtrlSetColor(-1, 0xffffff)
GUICtrlSetBkColor(-1, -2)
GUICtrlCreateLabel($aPos1, $aPos1 - 1, $aPos1 + 1, $aPos1, $aPos1)
GUICtrlSetColor(-1, 0xffffff)
GUICtrlSetBkColor(-1, -2)
GUICtrlCreateLabel($aPos1, $aPos1, $aPos1, $aPos1, $aPos1)
GUICtrlSetColor(-1, 0xff2222)
GUICtrlSetBkColor(-1, -2)
GUISetState()
Do
Until GUIGetMsg() = -3

chishingchan 发表于 2023-10-14 19:21:34

不会调整!


chishingchan 发表于 2023-10-14 19:23:27

afan 发表于 2023-10-14 19:21
描边效果?

a 大,边框的大小能调吗?

afan 发表于 2023-10-14 19:40:50

chishingchan 发表于 2023-10-14 19:23
a 大,边框的大小能调吗?

这种方式不宜设置宽边,要宽边需要GDI+使用路径绘制等方式。如果控件需交互,则处理较繁琐。
直接用Label 叠加处理则可以更简单灵活易懂。如有多个控件也可以直接写成函数调用。
GUICreate('')
GUISetBkColor(0x55ff)
GUISetFont(30, 700, 0, '微软雅黑')
Local $aPos1[] =         ;x ;y ;w; h; 边宽; 边色; 字色
GUICtrlCreateLabel($aPos1, $aPos1 - $aPos1, $aPos1 - $aPos1, $aPos1, $aPos1)
GUICtrlSetColor(-1, $aPos1)
GUICtrlCreateLabel($aPos1, $aPos1 + $aPos1, $aPos1 + $aPos1, $aPos1, $aPos1)
GUICtrlSetColor(-1, $aPos1)
GUICtrlSetBkColor(-1, -2)
GUICtrlCreateLabel($aPos1, $aPos1 + $aPos1, $aPos1 - $aPos1, $aPos1, $aPos1)
GUICtrlSetColor(-1, $aPos1)
GUICtrlSetBkColor(-1, -2)
GUICtrlCreateLabel($aPos1, $aPos1 - $aPos1, $aPos1 + $aPos1, $aPos1, $aPos1)
GUICtrlSetColor(-1, $aPos1)
GUICtrlSetBkColor(-1, -2)
GUICtrlCreateLabel($aPos1, $aPos1, $aPos1, $aPos1, $aPos1)
GUICtrlSetColor(-1, $aPos1)
GUICtrlSetBkColor(-1, -2)
GUISetState()
Do
Until GUIGetMsg() = -3

chishingchan 发表于 2023-10-14 19:45:23

afan 发表于 2023-10-14 19:40
这种方式不宜设置宽边,要宽边需要GDI+使用路径绘制等方式。如果控件需交互,则处理较繁琐。
直接用Labe ...

1# 的文字是 加粗宋体,大小36像素,边框是2像素。将微软雅黑改为宋体,惨不忍睹。

afan 发表于 2023-10-14 19:48:03

chishingchan 发表于 2023-10-14 19:45
1# 的文字是 加粗宋体,大小36像素,边框是2像素。将微软雅黑改为宋体,惨不忍睹。

所以我上面说了。

chishingchan 发表于 2023-10-14 20:08:29

afan 发表于 2023-10-14 19:48
所以我上面说了。

放弃了!程序换种方式再写。谢谢!

msold5 发表于 2023-10-16 08:45:00

用html思路会不会容易实现一点?
页: [1]
查看完整版本: 【已解决】GUI 控件能够创建字带边框的效果吗?