11月302014
[教程] 第一讲 GDI文字textout
ACN论坛.讲师:seniors 转载请说明此文出处所在:<<简易工作室>>,谢谢!
|
先挖个大坑,不知道能不能继续,也不知道有没有这个能力 一、基本概念 我也不懂,就请度娘说吧 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 |
#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```
扫描二维码,在手机上阅读

