#include <GUIConstantsEx.au3>
#include <FontConstants.au3>
#include <WinAPI.au3>
Global $iFontSize = 9
Global $iFontWeight = 400
Global $iFontAttribs = 0
Global $sFontName = 'Arial'
$s_Data1 = 'AAAAAA'&@TAB&'AAAAAA'&@TAB&'AAAAAA'&@TAB&'AAAAAA'&@TAB&'AAAAAA'&@TAB&'AAAAAA'&@TAB&'A'
$s_Data2 = 'A'&@TAB&'A'&@TAB&'A'&@TAB&'A'&@TAB&'A'&@TAB&'A'&@TAB&'A'
$GUI = GUICreate('_GUICtrlLabelGetTextWidth Demo', 500, 200)
$Label1 = GUICtrlCreateLabel('', 20, 30)
GUICtrlSetFont(-1, $iFontSize, $iFontWeight, $iFontAttribs, $sFontName)
GUICtrlSetBkColor(-1, 0x00FFFF)
$Label2 = GUICtrlCreateLabel('', 20, 70)
GUICtrlSetFont(-1, $iFontSize, $iFontWeight, $iFontAttribs, $sFontName)
GUICtrlSetBkColor(-1, 0x00FFFF)
_GUICtrlSetDataEx($Label1, $s_Data1, $iFontSize, $iFontWeight, $iFontAttribs, $sFontName)
_GUICtrlSetDataEx($Label2, $s_Data2, $iFontSize, $iFontWeight, $iFontAttribs, $sFontName)
GUISetState(@SW_SHOW, $GUI)
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
EndSwitch
WEnd
Func _GUICtrlSetDataEx($iCtrlID, $sData, $iFontSize = 8.5, $iFontWeight = $FW_NORMAL, $iFontAttribs = 0, $sFontName = 'Arial')
$sData = StringReplace($sData, @TAB, ' ')
Local $aCtrl_Pos = ControlGetPos(GUICtrlGetHandle($iCtrlID), '', '')
Local $aData_Len = _GUICtrlLabelGetTextWidth($sData, $iFontSize, $iFontWeight, $iFontAttribs, $sFontName, 0)
GUICtrlSetPos($iCtrlID, $aCtrl_Pos[0], $aCtrl_Pos[1], $aData_Len[0], $aData_Len[1])
GUICtrlSetData($iCtrlID, $sData)
EndFunc
Func _GUICtrlLabelGetTextWidth($sData, $iFontSize = 8.5, $iFontWeight = $FW_NORMAL, $iFontAttribs = 0, $sFontName = 'Arial', $iFixTabs = 0)
Local $sTabs, $sAdd, $bFItalic, $bFUnderline, $bFStrikeout, $h_GDW_GUI, $hDC, $intDeviceCap, $intFontHeight, $hFont, $tSIZE, $aRet
If $iFixTabs Then
$sData = StringReplace($sData, @TAB, ' ')
If @extended Then
For $i = 1 To @extended + 1
$sTabs &= ' ' & $sAdd
$sAdd &= ' '
Next
EndIf
$sData &= $sTabs
EndIf
$bFItalic = BitAND($iFontAttribs, 2) = 2
$bFUnderline = BitAND($iFontAttribs, 4) = 4
$bFStrikeout = BitAND($iFontAttribs, 8) = 8
$h_GDW_GUI = GUICreate("Get Data Width", 10, 10, -100, -100, 0x80880000, 0x00000080)
$hDC = _WinAPI_GetDC($h_GDW_GUI)
$intDeviceCap = _WinAPI_GetDeviceCaps($hDC, $LOGPIXELSY)
$intFontHeight = _WinAPI_MulDiv($iFontSize, $intDeviceCap, 72)
$hFont = _WinAPI_CreateFont(-$intFontHeight, 0, 0, 0, $iFontWeight, $bFItalic, $bFUnderline, $bFStrikeout, $DEFAULT_CHARSET, $OUT_CHARACTER_PRECIS, $CLIP_DEFAULT_PRECIS, $PROOF_QUALITY, $FIXED_PITCH, $sFontName)
_WinAPI_SelectObject($hDC, $hFont)
$tSIZE = _WinAPI_GetTextExtentPoint32($hDC, $sData)
Dim $aRet[2] = [DllStructGetData($tSIZE, 'X'), DllStructGetData($tSIZE, 'Y')]
GUIDelete($h_GDW_GUI)
Return $aRet
EndFunc