绿色风's Blog
专注AutoIT(Au3)
  • 首页
  • 流●年
  • 笔●记
    • 学习随记
    • 源码示例
  • 脚●本
    • UDF(收集)
    • 工作室UDF
    • 工具●教程
    • 教程之GDI
  • 作●品
  • 下●载
  • 情怀ExcelTip
12月12014

[教程]第二讲 GDI文字DrawText

作者:绿色风   发布:2014-12-1 6:38 Monday   分类:   阅读:6416次   评论:0条  

 

ACN论坛.讲师:seniors   转载请说明此文出处所在:<<简易工作室>>,谢谢!

未命名.JPG

 

这一讲,主要是说_WinAPI_DrawText($hDC, $sText, ByRef $tRect, $iFlags)
他比textout的功能要强一些,可以设置显示的范围$tRect,以及显示的方式$iFlags;
$tRECT:可以用_WinAPI_CreateRect来生成,例子中已经有说明
$iFlags:显示方式有很多,例子说介绍了左对齐、水平居中、区域不够显示时有省略号,更多请看F1帮助

由于有时不知道这个字符串要多少大小的矩形,所以介绍了一个测量函数
_WinAPI_GetTextExtentPoint32($hDC, $sText)

上一讲,讲到设置字体函数_WinAPI_CreateFont,在这一讲中,再介绍一个可以设置字体的函数
_WinAPI_GetStockObject($iObject)
这个函数不仅能得到字体,还能得到画笔、画刷等句柄。
在DC中如果不设置字体,就是用的_WinAPI_GetStockObject($DEVICE_DEFAULT_FONT)

布置作业:
1.输出一个红字,背景透明,靠右对齐的字符串;
2.一个黄字,背景红色,垂直居中的字符串;
3.输出一个有阴影的字符串
阴影字想法

比如先写一个灰色的字,再在偏一点的位置写红色的字
这里可以用_WinAPI_OffsetRect($tRECT, -2, -2),让那个矩形范围向左移2,向上移2

更简单点,在API中本来就有一个写阴影字的函数叫做 _WinAPI_DrawShadowText
大家加油啊,主动看帮助啊!因为我不可能讲到所有函数的。


本讲源码。

#include <APIConstants.au3>
#include <WinAPIEx.au3>

GUICreate("第二讲", 300, 200)
$ctrlId = GUICtrlCreatePic("",0 ,0 ,300,200)
$hWnd = GUICtrlGetHandle($ctrlId)
GUISetState()
gditest()

While 1
        $Msg = GUIGetMsg()
        Switch $Msg
                Case -3
                        ExitLoop
        EndSwitch
WEnd
GUIDelete()
Exit

Func gditest()
        Local $sText = '这是我输出的字符串'
        $hDC = _WinAPI_GetDC($hWnd)

        $hFont = _WinAPI_GetStockObject($DEFAULT_GUI_FONT);获取预定义默认界面字体,DC中不设置字体的话默认的是$DEVICE_DEFAULT_FONT默认设备字体
        _WinAPI_SelectObject($hDC, $hFont)
        ;居中输出
        $tRECT = _WinAPI_CreateRect(10, 10, 100, 30);文字区域左上XY坐标,右下XY坐标,本例就是长宽为90*20
        _WinAPI_SetBkMode($hDC, $OPAQUE);设置文字背景不透明
        _WinAPI_SetBkColor($hDC, 0x0000FF);背景颜色为红色
        _WinAPI_DrawText($hDC, $sText, $tRECT, $DT_CENTER);居中输出
        ;左对齐输出
        $tRECT = _WinAPI_CreateRect(10, 40, 100, 60);文字区域左上XY坐标,右下XY坐标,本例就是长宽为90*20
        _WinAPI_SetBkMode($hDC, $OPAQUE);设置文字背景不透明
        _WinAPI_SetBkColor($hDC, 0x00FF00);背景颜色为绿色
        _WinAPI_DrawText($hDC, $sText, $tRECT, $DT_LEFT);左对齐输出

        ;左对齐输出不哆输出省略号
        $tRECT = _WinAPI_CreateRect(10, 70, 100, 90);文字区域左上XY坐标,右下XY坐标,本例就是长宽为90*20
        _WinAPI_SetBkMode($hDC, $OPAQUE);设置文字背景不透明
        _WinAPI_SetBkColor($hDC, 0x00FF00);背景颜色为绿色
        _WinAPI_DrawText($hDC, $sText, $tRECT, $DT_WORD_ELLIPSIS);如果不哆输出省略号

        ;计算字符串长度和高度
        $tsize = _WinAPI_GetTextExtentPoint32($hDC, $sText);计算字符串所需长度
        $Width = DllStructGetData($tsize, "X")
        $Height = DllStructGetData($tsize, "Y")
        $tRECT = _WinAPI_CreateRect(10, 100, 10 + $Width, 100 + $Height)
        _WinAPI_SetBkMode($hDC, $OPAQUE);设置文字背景不透明
        _WinAPI_SetBkColor($hDC, 0x00FFFF);背景颜色为黄色
        _WinAPI_DrawText($hDC, $sText, $tRECT, $DT_LEFT);左对齐输出

        $hFont = _WinAPI_CreateFont(38, 0, 0, 0, $FW_NORMAL, 0, 0, 0, $DEFAULT_CHARSET, $OUT_DEFAULT_PRECIS, $CLIP_DEFAULT_PRECIS, $ANTIALIASED_QUALITY, $DEFAULT_PITCH, '黑体')
        $oldFontObj = _WinAPI_SelectObject($hDC, $hFont);选择新建立的字体,返回值为原来默认字体
        $tsize = _WinAPI_GetTextExtentPoint32($hDC, $sText);计算字符串所需长度
        $Width = DllStructGetData($tsize, "X")
        $Height = DllStructGetData($tsize, "Y")
        $tRECT = _WinAPI_CreateRect(10, 130, 10 + $Width, 130 + $Height)
        _WinAPI_SetBkMode($hDC, $OPAQUE);设置文字背景不透明
        _WinAPI_SetBkColor($hDC, 0xFFFFFF);背景颜色为白色
        _WinAPI_DrawText($hDC, $sText, $tRECT, $DT_LEFT);左对齐输出
        _WinAPI_SelectObject($hDC, $oldFontObj);改回原来默认字体
        _WinAPI_DeleteObject($hFont);释放字体对象

        _WinAPI_ReleaseDC($hWnd, $hDC)
EndFunc```

 





本文固定链接: http://www.jianyiit.com/post-36.html

blogger
该日志由 绿色风 于2014-12-1 6:38 Monday发表在 分类下。
版权所有:《绿色风's Blog》 → 《[教程]第二讲 GDI文字DrawText》;
除特别标注,本博客很多文章均为原创. 互联分享,尊重版权,转载请以链接形式标明本文地址;
本文标签:

扫描二维码,在手机上阅读
上一篇::2015春运火车票购票攻略
下一篇:[教程] 第一讲 GDI文字textout

热门文章

相关文章

  • [教程]第十五讲GDI+图像之颜色矩阵
  • [教程]第七讲 GDI自绘一个控件
  • [教程] 第五讲 GDI路径和选区
  • [教程]第十二讲 GDI+路径
  • [教程] 第十九讲 GDI+窗口自绘带控件
取消回复

发表评论

亲,头像对么?

95 + 57 =

提交中,请稍候……


木有头像就木JJ啦!还木有头像吗?点这里申请属于你的个性Gravatar头像吧!


    站点统计
    • 运行时间: 20254 天
    • 日志总数: 365 篇
    • 评论数量: 7238 条
    • 微语数量: 6 条
    • 附件总量: 388 件
  • 逝出的青春

  • 打赏"绿色风"



      扫码关注本站公众号 可搜本站内容

  • Autoit V3 脚本交流群

      常驻群1:905774875
      常驻群2:40672266


  • 链接

    • AU3中文论坛
    • Excel资料库
    • 完美者博客
    • 顺网小哥'S Blog
    • 猛牛哥的博客
    • 网吧系统下载
  • 分类

    • 流●年(66)
    • 笔●记(0)
    • 脚●本(0)
    • 作品(21)
    • 学习随记(51)
    • 源码示例(68)
    • UDF(收集)(26)
    • 工作室UDF(30)
    • 工具●教程(62)
    • 教程之GDI(24)
Copyright © 2013 绿色风's Blog. Powered by emlog. Theme by 射雕天龙. 鄂ICP备2021011689号-1 鄂公网安备42102302000078号 sitemap