找回密码
 加入
搜索
查看: 10605|回复: 15

[GUI管理] 能否使Label转90度显示?即Label竖着显示

 火.. [复制链接]
发表于 2013-8-23 00:09:59 | 显示全部楼层 |阅读模式
能否使Label转90度显示?即Label竖着显示

如附图那样

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?加入

×
发表于 2013-8-23 16:42:18 | 显示全部楼层
简单的方法就是label换行
设置他的宽度只有一个汉字,高度就设置多一点,用换行符
 楼主| 发表于 2013-8-23 22:34:02 | 显示全部楼层
回复 2# 绿色风


这个不行呀

用的是英文,并且每个字母也要转90度的, 如图
发表于 2013-8-24 09:20:34 | 显示全部楼层
回复 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[0] To 1 Step -1
                $tempText&=$text[$i]&@CRLF
        Next
        GUICtrlSetData($hwnd,$tempText)
EndFunc

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?加入

×
 楼主| 发表于 2013-8-24 22:39:24 | 显示全部楼层
回复 4# lanfengc


感谢,不过我需要的是英文字体。  @宋体不能达到每个字母都转90度的效果

其他有英文字体可以是单词的每个字母都转90度的吗?
发表于 2013-8-25 13:32:29 | 显示全部楼层
应该用GDI可以 把文字作为图片输出 然后再旋转个270度 看了seniors老师的示例 有输出文字的示例 另外有GDI旋转图片的示例 但是看了半天  不知道如何联系起来
发表于 2013-8-26 05:39:25 | 显示全部楼层
[au3]#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
[/au3]
不过没想明白为什么方向是错的
发表于 2013-8-26 05:46:30 | 显示全部楼层
唉,晕了,你带着按钮一起转呗,何必只转字
发表于 2013-8-26 08:55:59 | 显示全部楼层
不懂,纯属帮顶
发表于 2013-8-26 09:55:09 | 显示全部楼层

#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

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?加入

×

评分

参与人数 1金钱 +35 贡献 +5 收起 理由
netegg + 35 + 5 这么写应该更对些

查看全部评分

发表于 2013-8-26 15:54:30 | 显示全部楼层
seniors,给你出道难题吧,竖排标签页,就算是两个吧,就像现在这个形式,主要是标签页标题
发表于 2013-8-26 19:48:18 | 显示全部楼层
回复 11# netegg
指tab标签?
 楼主| 发表于 2013-8-26 23:50:08 | 显示全部楼层
回复 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
 楼主| 发表于 2013-8-26 23:53:47 | 显示全部楼层
回复 7# netegg

感谢,不过方向不太对..
发表于 2013-8-27 06:18:29 | 显示全部楼层
回复 13# mbdnmt

哪句错,哪句注释,因为重复申明了,注释gdiplusex.au3里的
    ,
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-5-4 00:15 , Processed in 0.076799 second(s), 21 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表