Gdip美观编辑框演示效果图

 

来源:https://www.autohotkey.com/boards/viewtopic.php?p=288802

 

打包下载地址:

 

代码片段:

; https://www.autohotkey.com/boards/viewtopic.php?p=288802
#SingleInstance force
#Include <Gdip_All>
SetBatchLines -1
UseGDIP() ; by just me - https://www.autohotkey.com/boards/viewtopic.php?t=8050

OnMessage(0x133, "WM_CTLCOLOREDIT")
OnMessage(0x138, "WM_CTLCOLORSTATIC")
OnMessage(0x111, "WM_COMMAND")

EditStyles := "+Multi -E0x200 -0x200000 -Wrap -WantReturn"
; +Multi    EM_SETMARGIN only works for multi-line edit control
; -E0x200   Remove edit control's border
; -0x200000 Remove scrollbar

Gui, +HWNDhGUI +LastFound
Gui, Margin, 60, 30
Gui, Color, 0x1B435D
Gui, Font, s12 c0x9EBACA, Microsoft YaHei UI
Gui, Add, Text, xm, Username
Gui, Add, Edit, %EditStyles% xm y+10 hwndhEdit1 h35 w300 v内容1
Gui, Add, Text, xm, Password
Gui, Add, Edit, %EditStyles% xm y+10 hwndhEdit2 h35 w300 Password v内容2
Gui, Add, Text, xm, Comment
Gui, Add, Edit, xm y+10 hwndhEdit3 h100 w300 +Multi -E0x200 -0x200000 -Wrap +ReadOnly, ReadOnly

PostMessage, 0xCC, Asc("*"), 0,, ahk_id %hEdit2%

; Create brushes
SizeArray := [3, 3, 3, 3]
ImageObj := { "normal"  : "image\edit-normal.png"
            , "focus"   : "image\edit-focus.png"
            , "disabled": "image\edit-disabled.png" }

global g_brush := {}
g_brush[hEdit1] := CreateBrushes(hEdit1, SizeArray, ImageObj, 0xFF1B435D)
g_brush[hEdit2] := g_brush[hEdit1] ; Edit2 has the same size as Edit1
g_brush[hEdit3] := CreateBrushes(hEdit3, SizeArray, ImageObj, 0xFF1B435D)

; EM_SETMARGIN
EditSetMargin(hEdit1, 7, 7, 7, 7)
EditSetMargin(hEdit2, 7, 7, 7, 7)
EditSetMargin(hEdit3, 7, 7, 7, 7)

Gui, Show,, Scale9 Example 2
WinSet, Redraw
Return

F1::
Gui Submit, NoHide
MsgBox %  内容1 """" 内容2
Return

GuiClose:
ExitApp

WM_COMMAND(wParam, lParam) {
  static EN_SETFOCUS := 0x0100, EN_KILLFOCUS := 0x0200, EN_CHANGE := 0x0300
  nCode := wParam >> 16
  If (nCode = EN_KILLFOCUS || nCode = EN_CHANGE)
    DllCall("InvalidateRect", "ptr", lParam, "ptr", 0, "int", 1)
}

WM_CTLCOLOREDIT(wParam, lParam) {
  Critical

  Status := (lParam = DllCall("GetFocus", "ptr")) ? "focus" : "normal"

  DllCall("SetBkMode", "ptr", wParam, "uint", 1)
  DllCall("SetTextColor", "ptr", wParam, "uint", 0xffffff)
  Return g_brush[lParam][Status]
}

WM_CTLCOLORSTATIC(wParam, lParam) {
  Critical

  WinGetClass, Class, ahk_id %lParam%

  If (Class = "Edit")
  {
    DllCall("SetTextColor", "ptr", wParam, "uint", 0x7F7056)
    DllCall("SetBkMode", "ptr", wParam, "int", 1)
    ; Return g_brush[lParam]["disabled"]
    Return g_brush[lParam]["normal"] ; edit-normal.png looks better
  }
}

CreateBrushes(hEdit, SizeArray, ImageObj, BkColor := 0xFFFFFFFF) {
  WinGetPos,,, CtrlW, CtrlH, ahk_id %hEdit%

  oBrush := {}
  For Status, ImageFile in ImageObj
  {
    hBitmap := Scale9_FileToHBitmap(ImageFile, CtrlW, CtrlH, SizeArray, BkColor)
    oBrush[status] := DllCall("CreatePatternBrush", "ptr", hBitmap, "ptr")
    DllCall("DeleteObject", "ptr", hBitmap)
  }
  Return oBrush
}

EditSetMargin(hEdit, mLeft:=0, mTop:=0, mRight:=0, mBottom:=0) {
  VarSetCapacity(RECT, 16, 0 )

  ; SendMessage, 0xB2,, &RECT,, ahk_id %hEdit% ; EM_GETMARGIN
  DllCall("GetClientRect", "ptr", hEdit, "ptr", &RECT)
  right  := NumGet(RECT, 8, "Int")
  ; bottom := NumGet(RECT, 12, "Int")

  static dpi := A_ScreenDPI / 96
  NumPut(0     + Ceil(mLeft*dpi) , RECT, 0, "Int")
  NumPut(0     + Ceil(mTop*dpi)  , RECT, 4, "Int")
  NumPut(right - Ceil(mRight*dpi), RECT, 8, "Int")
  ; NumPut(bottom - mBottom, RECT, 12, "Int")
  SendMessage, 0xB3, 0x0, &RECT,, ahk_id %hEdit% ; EM_SETMARGIN
}

 

声明:站内资源为整理优化好的代码上传分享与学习研究,如果是开源代码基本都会标明出处,方便大家扩展学习路径。请不要恶意搬运,破坏站长辛苦整理维护的劳动成果。本站为爱好者分享站点,所有内容不作为商业行为。如若本站上传内容侵犯了原著者的合法权益,请联系我们进行删除下架。