找回密码
 加入
搜索
查看: 33213|回复: 39

[交流] 第一讲 GDI文字textout

[复制链接]
发表于 2013-5-12 14:24:45 | 显示全部楼层 |阅读模式
本帖最后由 seniors 于 2013-6-16 08:01 编辑

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

一、基本概念
我也不懂,就请度娘说吧
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

有问题请留言
GDI、GDI+相关知识点二DrawText

#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

本帖子中包含更多资源

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

×

评分

参与人数 8威望 +5 金钱 +287 贡献 +40 收起 理由
xiehuahere + 20 好久不来,差点错过好戏!感谢分享~
haijie1223 + 30 + 5 终于开课了~
user3000 + 11 +++ 无私的人
sanmoking + 22
benkel + 10 小菜菜来学习原理了!

查看全部评分

发表于 2013-5-12 14:41:57 | 显示全部楼层
大师终于开讲了~ 必须支持~
发表于 2013-5-12 16:31:44 | 显示全部楼层
了解一下,谢谢分享。
发表于 2013-5-12 17:02:45 | 显示全部楼层
记得孙鑫老师windows程序设计第一课就有讲TextOut和GetDC
发表于 2013-5-12 17:32:02 | 显示全部楼层
回复 1# seniors
正在消化中...
期待下一讲!
 楼主| 发表于 2013-5-12 19:51:47 | 显示全部楼层
回复 4# nmgwddj
正是巧了,我学习这个是看的帮助文件,结合自己需要,有时网上搜索
GetDC是必须第一个讲的,没有DC你没法操作,
我本来想先讲画线的,感觉画线里面的细节比较多,就放后面一点

回复 5# 楼上风云
下一讲,我想讲DrawText,把写字的放在一起先讲吧。
发表于 2013-5-12 20:42:12 | 显示全部楼层
回复 3# lpxx

继续尾随L老师,学习牛XX技术!
对GDI+比较感兴趣,一般用GDI+,但是原理什么的一点不懂
发表于 2013-5-13 00:36:02 | 显示全部楼层
回复 1# seniors

首页支持前辈  坐等第二课

视频看多了  更喜欢这样的讲解方式  哈哈
发表于 2013-5-13 08:54:37 | 显示全部楼层
GDI+结图象的操作都想看看,刚刚好啊
发表于 2013-5-13 13:59:29 | 显示全部楼层
gdiplusex的示例里不都有了吗,还有math里的绘图
 楼主| 发表于 2013-5-13 18:41:18 | 显示全部楼层
回复 11# netegg
可能看帮助好像没有交流,这里可以交流意见,心情会不同。
发表于 2013-5-13 20:16:11 | 显示全部楼层
终于开课了,报名了~
发表于 2013-5-13 20:43:35 | 显示全部楼层
好贴,占位学习。。。。。。
发表于 2013-5-13 22:55:24 | 显示全部楼层
開課了 我都不懂~~趕快來佔個位置學習.....
发表于 2013-5-14 01:38:26 | 显示全部楼层
回复 12# seniors

个人认为gdi部分的操作可能更多的是灵感,笑谈下
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-3-29 06:18 , Processed in 0.086331 second(s), 24 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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