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

[教程] 第一讲 GDI文字textout

作者:绿色风   发布:2014-11-30 8:13 Sunday   分类:   阅读:6903次   评论:0条  

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

 


先挖个大坑,不知道能不能继续,也不知道有没有这个能力

一、基本概念
我也不懂,就请度娘说吧
GDI 概念
GDI是Graphics Device Interface的缩写,含义是图形设备接口,它的主要任务是负责系统与绘图程序之间的信息交换,处理所有Windows程序的图形输出。
在Windows操作系统下,绝大多数具备图形界面的应用程序都离不开GDI,我们利用GDI所提供的众多函数就可以方便的在屏幕、打印机及其它输出设备上输出图形,文本等操作。GDI的出现使程序员无需要关心硬件设备及设备驱动,就可以将应用程序的输出转化为硬件设备上的输出,实现了程序开发者与硬件设备的隔离,大大方便了开发工作。
GDI+
GDI+是Windows XP中的一个子系统,它主要负责在显示屏幕和打印设备输出有关信息,它是一组通过C++类实现的应用程序编程接口。顾名思义,GDI+是以前版本GDI的继承者,出于兼容性考虑,Windows XP仍然支持以前版本的GDI,但是在开发新应用程序的时候,开发人员为了满足图形输出需要应该使用GDI+,因为GDI+对以前的Windows版本中GDI进行了优化,并添加了许多新的功能。
作为图形设备接口的GDI+使得应用程序开发人员在输出屏幕和打印机信息的时候无需考虑具体显示设备的细节,他们只需调用GDI+库输出的类的一些方法即可完成图形操作,真正的绘图工作由这些方法交给特定的设备驱动程序来完成,GDI+使得图形硬件和应用程序相互隔离.从而使开发人员编写设备无关的应用程序变得非常容易。

二、GDI
先讲GDI因为相应简单点,但不一定是比GDI+操作方便
GDI的操作多是相对于设备环境(device context)的,设备环境简称DC,所以我们的操作多是针对DC来的。所以例子中第一个操作就是
“$hDC = _WinAPI_GetDC($hWnd)”
使用完DC要归还(释放)
最后一句就是释放DC的操作_WinAPI_ReleaseDC($hWnd, $hDC)
在这两句中间就是针对DC的操作
这一讲先讲字符串输出的一种方式_WinAPI_TextOut
看图和源程序应该能懂了,不细说了

GUISetState()
gditest()
上面这两句顺序不能颠倒,颠倒了就看不到输出的文字了,为什么?
因为我们这个是直接在DC里输出,如果gditest()放在前面,那当GUI显示时,会调用WM_PAINT绘制,而我们没有改动WM_PAINT,所以不能显示出来
而且本例子最小化后再恢复也不能显示出字符串,要达到最小化后再恢复能显示留到后面再讲。先看懂_WinAPI_TextOut

未命名.JPG

 

#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()
        $hDC = _WinAPI_GetDC($hWnd)

        _WinAPI_TextOut($hDC, 10, 10, '默认方式的字符串')

        _WinAPI_SetBkMode($hDC, $TRANSPARENT);背景透明,即不使用背景颜色;返回值为原来的背景混合模式,即$OPAQUE
        _WinAPI_TextOut($hDC, 10, 30, '背景透明的字符串')

        _WinAPI_SetBkMode($hDC, $OPAQUE);背景填充模式

        $oldTextColor = _WinAPI_SetTextColor($hDC, 0xFF0000);设置文字颜色,颜色模式为BBGGRR,返回值为原来的颜色
        ConsoleWrite(Hex($oldTextColor, 6)&@CR);输出看一下一般默认是黑色0x000000
        _WinAPI_TextOut($hDC, 10, 50, '修改字符颜色的字符串')
        _WinAPI_SetTextColor($hDC, $oldTextColor);改回原来默认文字颜色

        $oldBkColor = _WinAPI_SetBkColor($hDC, 0xFF0000);设置背景颜色,颜色模式为BBGGRR,返回值为原来的颜色
        ConsoleWrite(Hex($oldBkColor, 6)&@CR);输出看一下一般默认是白色0xFFFFFF
        _WinAPI_TextOut($hDC, 10, 70, '修改字符背景颜色的字符串')
        _WinAPI_SetBkColor($hDC, $oldBkColor);改回原来默认背景颜色

        $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);选择新建立的字体,返回值为原来默认字体
        _WinAPI_TextOut($hDC, 10, 90, '字号为38的黑体字符串')
        _WinAPI_SelectObject($hDC, $oldFontObj);改回原来默认字体
        _WinAPI_DeleteObject($hFont);释放字体对象

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

 

 





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

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

扫描二维码,在手机上阅读
上一篇::[教程]第二讲 GDI文字DrawText
下一篇:GUI按键控件图标+文字

热门文章

相关文章

  • [教程]第十八讲 GDI+窗口自绘无控件
  • [教程]第十五讲GDI+图像之颜色矩阵
  • [教程] 第十一讲 GDI+画笔及线型
  • [教程] 第六讲 GDI设置图像到控件
  • [教程] 第十一讲 GDI+画笔之补充 画笔的缩放和旋转
取消回复

发表评论

亲,头像对么?

87 + 30 =

提交中,请稍候……


木有头像就木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