能否使Label转90度显示?即Label竖着显示
能否使Label转90度显示?即Label竖着显示如附图那样
简单的方法就是label换行
设置他的宽度只有一个汉字,高度就设置多一点,用换行符 回复 2# 绿色风
这个不行呀
用的是英文,并且每个字母也要转90度的, 如图 回复 3# mbdnmt
设置下字体。
$Form1 = GUICreate("Form1", 100, 100, 192, 124)
$Label1 = GUICtrlCreateLabel("", 10, 10, 64, 90)
GUISetState(@SW_SHOW)
SetText($Label1,"中国人民")
While GUIGetMsg()<>-3
Sleep(1)
WEnd
Func SetText($hwnd=0,$text="")
If $hwnd=0 Or $text="" Then Return SetError(1)
GUICtrlSetFont($hwnd, 11, 400, 0, "@宋体")
Local $tempText=""
$text=StringSplit($text,"")
For $i=$text To 1 Step -1
$tempText&=$text[$i]&@CRLF
Next
GUICtrlSetData($hwnd,$tempText)
EndFunc
回复 4# lanfengc
感谢,不过我需要的是英文字体。@宋体不能达到每个字母都转90度的效果
其他有英文字体可以是单词的每个字母都转90度的吗? 应该用GDI可以 把文字作为图片输出 然后再旋转个270度 看了seniors老师的示例 有输出文字的示例 另外有GDI旋转图片的示例 但是看了半天不知道如何联系起来 #include <GDIPlusEx.au3>
#include <GuiConstantsEx.au3>
Opt('MustDeclareVars', 1)
_Main()
Func _Main()
Local $hGUI, $hWnd, $hGraphic, $hBrush, $hFormat, $hFamily, $hFont, $tLayout,$str
; 创建界面
$hGUI = GUICreate("GDI+", 400, 300)
$hWnd = WinGetHandle("GDI+")
GUISetState()
; 绘制字符串
_GDIPlus_Startup()
$hGraphic = _GDIPlus_GraphicsCreateFromHWND($hWnd)
$hBrush = _GDIPlus_BrushCreateSolid(0x80000008)
$hFormat = _GDIPlus_StringFormatCreate()
$hFamily = _GDIPlus_FontFamilyCreate('Arial')
$hFont = _GDIPlus_FontCreate($hFamily, 12, 2)
$str='hello'
_GDIPlus_StringFormatSetFlags($hFormat,7)
; For $i = 6 To 1
; $string =StringLeft($str, $i)
$tLayout = _GDIPlus_RectFCreate(60, 60, 100, 60)
_GDIPlus_GraphicsDrawStringEx($hGraphic, $str, $hFont, $tLayout, $hFormat, $hBrush)
; Next
; 循环至用户退出
Do
Until GUIGetMsg() = $GUI_EVENT_CLOSE
; 清除资源
_GDIPlus_FontDispose($hFont)
_GDIPlus_FontFamilyDispose($hFamily)
_GDIPlus_StringFormatDispose($hFormat)
_GDIPlus_BrushDispose($hBrush)
_GDIPlus_GraphicsDispose($hGraphic)
_GDIPlus_Shutdown()
EndFunc ;==>_Main
不过没想明白为什么方向是错的 唉,晕了,你带着按钮一起转呗,何必只转字 不懂,纯属帮顶
#include <APIConstants.au3>
#include <WinAPIEx.au3>
#include <WinAPIEx.au3>
#include <GDIPlus.au3>
#include <GDIPlusEx.au3>
;注册回调函数
Global $hCallback = DllCallbackRegister("YourFunc", "int", "hWnd;uint;wparam;lparam");函数名,返回值,参数
Global $ptrCallback = DllCallbackGetPtr($hCallback)
GUICreate("侧写lable", 300, 200)
Global $nlableId = GUICtrlCreateLabel("中文和ENGLISH", 10, 10, 20,130)
Global $hlableWnd = GUICtrlGetHandle($nlableId)
;设置lable控件的处理函数,也就是所谓的控件子类化
Global $hOldProc = _WinAPI_SetWindowLong($hlableWnd, $GWL_WNDPROC, $ptrCallback)
GUISetState()
While 1
$Msg = GUIGetMsg()
Switch $Msg
Case -3
ExitLoop
Case $nlableId
ShellExecute("www.autoitx.com")
EndSwitch
WEnd
GUIDelete()
Exit
Func YourFunc($hWnd, $iMsg, $wParam, $lParam)
Switch $iMsg
Case $WM_PAINT
Local $tPAINTSTRUCT;接收_WinAPI_BeginPaint返回的$tagPAINTSTRUCT结构,这结构内部参数我还不清晰
;获取控件DC并消除WM_PAINT消息,这函数一定要用_WinAPI_EndPaint($hWnd, $tPAINTSTRUCT)解除
Local $hDC = _WinAPI_BeginPaint($hWnd, $tPAINTSTRUCT)
;获取控件长高
Local $HWND_CX = _WinAPI_GetWindowWidth($hWnd)
Local $HWND_CY = _WinAPI_GetWindowHeight($hWnd)
Local $sText = _WinAPI_GetWindowText($hWnd);获取窗口标题,就是lable上的文字
;开始GDI+
_GDIPlus_Startup()
;获取画布,这是从DC获取,还可以用_GDIPlus_GraphicsCreateFromHWND($hWnd)从控件句柄获取,使用完成要释放画布_GDIPlus_GraphicsDispose($hGraphics)
$hGraphics = _GDIPlus_GraphicsCreateFromHDC($hDC)
;根据画布创建位图对象,我们等会的画图均是针对位图来操作的,也就是没有直接画在画布上,就是所谓的双缓冲画图
$hBitmap = _GDIPlus_BitmapCreateFromGraphics($HWND_CX, $HWND_CY, $hGraphics)
;获取位图对象的画布,图就画在位图的画布上
$hBackbuffer = _GDIPlus_ImageGetGraphicsContext($hBitmap)
;~ _GDIPlus_GraphicsClear($hBackbuffer, 0xFFFFFFFF);这句可以看lable的大小
_GDIPlus_GraphicsSetSmoothingMode($hBackbuffer, 2);平滑模式,2为8*8抗距齿
;字顶朝左的写法
_GDIPlus_GraphicsTranslateTransform($hBackbuffer, 0, $HWND_CY);画布下移$HWND_CY控件高度,也就是画布的原点到了控件左下角
_GDIPlus_GraphicsRotateTransform($hBackbuffer, -90);画布旋转-90度,即逆时针绕原点转动90度
;下面是;字顶朝右的写法
;~ _GDIPlus_GraphicsTranslateTransform($hBackbuffer, $HWND_CX, 0);画布下移$HWND_CY控件高度,也就是画布的原点到了控件左下角
;~ _GDIPlus_GraphicsRotateTransform($hBackbuffer, 90);画布旋转-90度,即逆时针绕原点转动90度
_GDIPlus_GraphicsDrawString($hBackbuffer, $sText, 0, 0, "Arial", 10);我感觉中文9好看,英文10好看
;画在位图画布上的图形,在$hBitap上,把$hBitmap画入DC的画布,也就在DC上显示了,双缓冲画图时间再长,画入DC画布就一次操作,图形不会闪烁
_GDIPlus_GraphicsDrawImageRect($hGraphics, $hBitmap, 0, 0, $HWND_CX, $HWND_CY)
_GDIPlus_BitmapDispose($hBitmap)
_GDIPlus_GraphicsDispose($hBackbuffer)
_GDIPlus_GraphicsDispose($hGraphics)
_GDIPlus_Shutdown()
Return _WinAPI_EndPaint($hWnd, $tPAINTSTRUCT);返回,一定要用_WinAPI_EndPaint($hWnd, $tPAINTSTRUCT) 结束WM_PAINT
EndSwitch
Return _WinAPI_CallWindowProc($hOldProc, $hWnd, $iMsg, $wParam, $lParam);没有处理的消息让原先的处理程序处理
EndFunc ;==>YourFunc seniors,给你出道难题吧,竖排标签页,就算是两个吧,就像现在这个形式,主要是标签页标题 回复 11# netegg
指tab标签? 回复 10# seniors
我这里运行不了... 报错
>"D:\Tools\AutoIt3\SciTE\..\autoit3.exe" /ErrorStdOut "D:\prj\Au3\test\Label.au3"
D:\Tools\AutoIt3\Include\WinAPIEx.au3 (314) : ==> Can not redeclare a constant.:
Global Const $AW_SLIDE = 0x00040000
Global Const ^ ERROR
>Exit code: 1 Time: 1.207 回复 7# netegg
感谢,不过方向不太对.. 回复 13# mbdnmt
哪句错,哪句注释,因为重复申明了,注释gdiplusex.au3里的
,
页:
[1]
2