# gdi 库模块帮助文档

## gdi 成员列表 <a id="gdi" href="#gdi">&#x23;</a>

### gdi.ARGB <a id="gdi.ARGB" href="#gdi.ARGB">&#x23;</a>
合并 ARGB 分量并返回 ARGB 颜色数值（32 位无符号整数）

### gdi.ARGB(红,绿,蓝,透明度) <a id="gdi.ARGB" href="#gdi.ARGB">&#x23;</a>
合并 ARGB 分量并返回 ARGB 颜色数值  
表示 Alpha 值的 A 分量范围为 0~0xFF，0 为完全透明。  

ARGB 颜色值一般用于 GDI+,plus 控件等  
ARGB 值内存格式用字符串表示就是 '\xBB\xGG\xRR\xAA'。  
用结构体表示就是 { BYTE b;BYTE g;BYTE r;BYTE a; }  
数值的书写顺序是反过来的，所以写为 0xAARRGGBB 。  

那么为什么叫 ARGB 颜色值，而不是 BGRA 颜色值呢？  
一定要找个理由就是念着顺口，GDI+ 头文件就是这样命名，约定俗成就是规则。  
纠结这个正反顺序，就好比纠结『东西』为什么不叫『西东』一样毫无意义

### gdi.BITMAP() <a id="gdi.BITMAP" href="#gdi.BITMAP">&#x23;</a>
位图信息  
!gdi_bitmap.bmType = 类型

### gdi.RGB <a id="gdi.RGB" href="#gdi.RGB">&#x23;</a>
合并 RGB 分量并返回 RGB 颜色数值

### gdi.RGB(红,绿,蓝) <a id="gdi.RGB" href="#gdi.RGB">&#x23;</a>
合并 RGB 分量并返回 RGB 颜色数值，  
可选用参数 @4 指定 A 分量返回 RGBA 颜色数值。  

RGB 颜色值一般用于GDI，传统控件。  
RGB 颜色值存储格式用字符串表示为 '\xRR\xGG\xBB'，  
用结构体表示  { BYTE r;BYTE g;BYTE b; }   
数值虽然也是低位存储在前（小端字节序），但书写数值时是高位在前，  
所以RGB 颜色数值写为 0xBBGGRR，这不叫『写反了』。  
纠结这个正反顺序，就好比纠结『东西』为什么不叫『西东』一样毫无意义

### gdi.RGBQUAD(红,绿,蓝) <a id="gdi.RGBQUAD" href="#gdi.RGBQUAD">&#x23;</a>
创建 RGBQUAD 结构体

### gdi.argbReverse(颜色数值) <a id="gdi.argbReverse" href="#gdi.argbReverse">&#x23;</a>
RGB 颜色数值转 ARGB 颜色数值（0xAARRGGBB 格式，32 位无符号整数）。  
RGB 分量中 R、B 的位置互换,并修改高位透明分量为 0xFF

### gdi.blendFunction() <a id="gdi.blendFunction" href="#gdi.blendFunction">&#x23;</a>
[返回对象:blendFunctionObject](#blendFunctionObject)

### gdi.blendFunction(透明度,透明选项) <a id="gdi.blendFunction" href="#gdi.blendFunction">&#x23;</a>
创建透明混合参数,  
透明度为1到255,默认为255  
透明选项默认为1

### gdi.clientBuffer <a id="gdi.clientBuffer" href="#gdi.clientBuffer">&#x23;</a>

```aardio
gdi.clientBuffer( hwnd,  
    function( hdc,hMemDc,hMemBitmap,width,height ){  
        /*窗口客户区双缓冲绘图,此函数不可返回任何值*/  
        ::BitBlt(hdc, 0, 0, width, height, hMemDc, 0, 0, 0xCC0020/*_SRCCOPY*/);  
    }  
)
```

### gdi.colorParse("#FFFFFF") <a id="gdi.colorParse" href="#gdi.colorParse">&#x23;</a>
解析网页兼容的颜色代码  
支持 #RGB,#RRGGBB,#RRGGBBAA 三种格式,#号可省略,  
#RGB,#RRGGBB 返回 GDI 兼容的RGB值  
#RRGGBBAA 返回 GDI+ 兼容的 ARGB 格式颜色值  
失败返回null

### gdi.colorStringify(颜色数值,是否ARGB格式) <a id="gdi.colorStringify" href="#gdi.colorStringify">&#x23;</a>
生成网页兼容的文本  
如果是 ARGB 数值，返回 #RRGGBBAA 格式字符串。

### gdi.doubleBuffer <a id="gdi.doubleBuffer" href="#gdi.doubleBuffer">&#x23;</a>

```aardio
gdi.doubleBuffer( hdc,width,height,  
    function( hdc,hMemDc,hMemBitmap ){  
        /*双缓冲绘图,此函数不可返回任何值*/  
        ::BitBlt(hdc, 0, 0, width, height, hMemDc, 0, 0, 0xCC0020/*_SRCCOPY*/);  
    }  
)
```

### gdi.drawBitmap <a id="gdi.drawBitmap" href="#gdi.drawBitmap">&#x23;</a>
九宫格贴图

### gdi.drawBitmap(hdc,位图句柄,rect,t,r,b,l) <a id="gdi.drawBitmap" href="#gdi.drawBitmap">&#x23;</a>
在目标DC上绘图  
t,r,b,l依次为上、右、下、左九宫格切图,  
如果不指定r,t,b,l则显示原图不拉伸  
r,t,b,l都为0则直接拉伸全图

### gdi.drawLine(hdc,x1,y1,x2,y2,...) <a id="gdi.drawLine" href="#gdi.drawLine">&#x23;</a>
在hdc指定句柄的绘图设备上移动到x1,y1坐标,  
开始画线到x2,y2指定的坐标点,  
可选添加任意个坐标点参数继续向后画线

### gdi.drawText(hdc,font,s,rect,format) <a id="gdi.drawText" href="#gdi.drawText">&#x23;</a>
输出文本  
hdc参数指定绘图设备句柄,font参数指定LOGFONT字体对象,  
rect应使用::RECT结构体指定输出区块,  
format为可选参数使用_DT_前缀常量指定输出选项

### gdi.drawTextCenter(hdc,font,s,rect,format) <a id="gdi.drawTextCenter" href="#gdi.drawTextCenter">&#x23;</a>
居中对齐输出文本,  
hdc参数指定绘图设备句柄,font参数指定LOGFONT字体对象,  
rect应使用::RECT结构体指定输出区块,  
format为可选参数使用_DT_前缀常量指定输出选项

### gdi.fillGradient(hdc,rect,clr,clr2,mode) <a id="gdi.fillGradient" href="#gdi.fillGradient">&#x23;</a>
使用clr,clr2指定的渐变颜色填充矩形  
hdc参数指定绘图设备句柄  
rect应使用::RECT结构体指定输出区块  
mode为可选参数,默认为水平渐变,指定为1则为垂直方向渐变

### gdi.fillRect(hdc,color,rect) <a id="gdi.fillRect" href="#gdi.fillRect">&#x23;</a>
使用color指定的颜色填充矩形  
hdc参数指定绘图设备句柄  
rect应使用::RECT结构体指定输出区块  

如果不需要指定新的颜色,可改为调用::PatBlt即可  
如果需要指定笔刷,调用::FillRect即可

### gdi.getBitmapBits <a id="gdi.getBitmapBits" href="#gdi.getBitmapBits">&#x23;</a>
获取位图数据  
返回值为cdata指针,以及数据读取长度  
无数据返回空值

### gdi.getBitmapBits(位图句柄,长度) <a id="gdi.getBitmapBits" href="#gdi.getBitmapBits">&#x23;</a>
成功返回读取内存,以及读取长度

### gdi.getBitmapInfo() <a id="gdi.getBitmapInfo" href="#gdi.getBitmapInfo">&#x23;</a>
[返回对象:gdiBitmapObject](#gdiBitmapObject)

### gdi.getBitmapInfo(位图句柄) <a id="gdi.getBitmapInfo" href="#gdi.getBitmapInfo">&#x23;</a>
返回BITMAT结构体

### gdi.getBitmapObject(hdc) <a id="gdi.getBitmapObject" href="#gdi.getBitmapObject">&#x23;</a>
返回当前设备位图对象

### gdi.getDpi(hdc,hwnd) <a id="gdi.getDpi" href="#gdi.getDpi">&#x23;</a>
获取屏幕DPI,即每英寸像素点数,  
参数可选

### gdi.getDpiScale(hdc,hwnd) <a id="gdi.getDpiScale" href="#gdi.getDpiScale">&#x23;</a>
获取屏幕DPI缩放系数,  
参数可选,  
返回2个表示百分比的小数值,1表示100%,  
第一个返回值为 x 轴缩放,第二个返回值为 y 轴缩放,  
2个返回值通常都是一样的

### gdi.getFont() <a id="gdi.getFont" href="#gdi.getFont">&#x23;</a>
[返回对象:logfontObject](#logfontObject)

### gdi.getFont(窗口句柄) <a id="gdi.getFont" href="#gdi.getFont">&#x23;</a>
返回窗口字体,LOGFONT对象  
如果窗口仍然是使用系统字体,返回空值  
不应使用此函数获取系统字体

### gdi.getIconInfo <a id="gdi.getIconInfo" href="#gdi.getIconInfo">&#x23;</a>
获取图标信息

### gdi.getIconInfo() <a id="gdi.getIconInfo" href="#gdi.getIconInfo">&#x23;</a>
[返回对象:gdicoinfoObject](#gdicoinfoObject)

### gdi.getIconInfo(句柄) <a id="gdi.getIconInfo" href="#gdi.getIconInfo">&#x23;</a>
参数不可为空

### gdi.getPixel <a id="gdi.getPixel" href="#gdi.getPixel">&#x23;</a>
抓像素颜色

### gdi.getPixel(x,y,hwnd) <a id="gdi.getPixel" href="#gdi.getPixel">&#x23;</a>
句柄为可选参数

### gdi.getRgb(RGB颜色数值) <a id="gdi.getRgb" href="#gdi.getRgb">&#x23;</a>
此函数返回R(红),G（绿）,B（蓝）三个分量。  
函数名由 "get R,G,B " 组合而成，表示三个返回值的顺序。  

参数 @1 指定 RGB 颜色数值。  
RGB 颜色值一般用于GDI，传统控件。  
RGB 颜色值存储格式用字符串表示为 '\xRR\xGG\xBB'，  
用结构体表示  { BYTE r;BYTE g;BYTE b; }   
数值虽然也是低位存储在前（小端字节序），但书写数值时是高位在前，  
所以RGB 颜色数值写为 0xBBGGRR，这不叫『写反了』。  
纠结这个正反顺序，就好比纠结『东西』为什么不叫『西东』一样毫无意义

### gdi.getRgba(ARGB颜色数值) <a id="gdi.getRgba" href="#gdi.getRgba">&#x23;</a>
返回R(红),G（绿）,B（蓝),A（透明度) 4个分量  
函数名由 "get R,G,B,A " 组合而成，表示四个返回值的顺序  
表示 Alpha 值的 A 分量范围为 0~0xFF，0 为完全透明。  

ARGB 颜色值一般用于 GDI+,plus 控件等  
ARGB 值内存格式用字符串表示就是 '\xBB\xGG\xRR\xAA'。  
用结构体表示就是 { BYTE b;BYTE g;BYTE r;BYTE a; }  
数值的书写顺序是反过来的，所以写为 0xAARRGGBB 。  

那么为什么叫 ARGB 颜色值，而不是 BGRA 颜色值呢？  
一定要找个理由就是念着顺口，GDI+ 头文件就是这样命名，约定俗成就是规则。  
纠结这个正反顺序，就好比纠结『东西』为什么不叫『西东』一样毫无意义

### gdi.getSystemFont( _DEFAULT_GUI_FONT ) <a id="gdi.getSystemFont" href="#gdi.getSystemFont">&#x23;</a>
获取界面缺省字体并转换为LOGFONT

### gdi.getSystemFont( _SYSTEM_FONT ) <a id="gdi.getSystemFont" href="#gdi.getSystemFont">&#x23;</a>
获取系统字体并转换为LOGFONT

### gdi.getTextExtent(hdc,str) <a id="gdi.getTextExtent" href="#gdi.getTextExtent">&#x23;</a>
获取字符串输出后的宽度,高度,返回2个值  
参数@1为目标DC，参数@2指定字符串

### gdi.layeredBuffer <a id="gdi.layeredBuffer" href="#gdi.layeredBuffer">&#x23;</a>

```aardio
gdi.layeredBuffer( winform.hwnd,    
	function( hdc,hMemDc,hMemBitmap,width,height,left,top,hwnd,blendFunction ){  

    	/*在hMemDc上绘图即可*/  

		..gdi.updateLayeredWindow( hwnd,hMemDc,::SIZE(width,height) ,blendFunction  );    
	}  
)
```

### gdi.lineTo(hdc,x1,y1,...) <a id="gdi.lineTo" href="#gdi.lineTo">&#x23;</a>
开始画线到x1,y1指定的坐标点,  
可选添加任意个坐标点参数继续向后画线

### gdi.loadCursor(id) <a id="gdi.loadCursor" href="#gdi.loadCursor">&#x23;</a>
加载系统预定义光标（鼠标指针）。  
如果参数 @1 传入值为 null 或光标句柄（指针类型）则直接返回。  
参数 @1 可用数值（例如 `32649/*_IDC_HAND*/`）或以下字符串值指定指定 ID:  
`arrow,ibeam,wait,cross,upArrow,  
sizeNWSE,sizeNESW,sizeWE,sizeNS,sizeAll,  
no,hand,appstarting,help,pin,person`

### gdi.rgbReverse(颜色数值) <a id="gdi.rgbReverse" href="#gdi.rgbReverse">&#x23;</a>
ARGB 颜色数值转 RGB 颜色数值。  
RGB 分量中 R、B 的位置互换，移除透明分量

### gdi.roundRect(hdc,rect,cx,cy) <a id="gdi.roundRect" href="#gdi.roundRect">&#x23;</a>
输出圆角矩形  
hdc参数指定绘图设备句柄  
rect应使用::RECT结构体指定输出区块,cx,cy指定圆角大小

### gdi.selectBrush(callback,hdc,bgcolor,color,width,style) <a id="gdi.selectBrush" href="#gdi.selectBrush">&#x23;</a>

```aardio
gdi.selectBrush(  
	function(hdc,pen,brush){  

		::FillRect(hdc,::RECT(0,0,100,100),brush);  

		var font = ::LOGFONT(weight=800;color=0x000000);  
		gdi.textOut(hdc,font,"TEST",0,0);  

		/*在指定绘图设备hdc选择新的笔刷和画笔  
参数 bgcolor 指定笔刷颜色,参数color指定画笔颜色,如果不指定color则不创建画笔,  
注意GDI使用RGB格式的颜色值,用16进制数值可写为0xBBGGRR格式,  
width为可选参数用于指定画笔宽度,style为可选参数用于指定画笔样式  
回调参数中brush为新的笔刷,如果指定了color参数则回调参数pen为新的画笔  
此函数在回调函数执行完以后负责销毁笔刷、画笔并复原绘图设备*/  
	},hdc,0xFFFFFF,0x000000)
```

### gdi.selectPen(callback,hdc,color,width,style) <a id="gdi.selectPen" href="#gdi.selectPen">&#x23;</a>

```aardio
gdi.selectPen(  
	function(hdc,pen){  

		gdi.drawLine(hdc,0,0,100,100)/*在指定绘图设备hdc选择新的画笔,参数color指定画笔颜色,  
注意GDI使用RGB格式的颜色值,用16进制数值可写为0xBBGGRR格式,  
width为可选参数用于指定画笔宽度,style为可选参数用于指定画笔样式  
回调参数中pen为新的画笔  
此函数在回调函数执行完以后负责销毁画笔并复原绘图设备*/  
	},hdc,0xFFFFFF,0x000000)
```

### gdi.setFont <a id="gdi.setFont" href="#gdi.setFont">&#x23;</a>
设置窗口字体,返回字体句柄  
直接调用此函数必须自行管理字体生命周期

### gdi.setFont(窗口句柄,LOGFONT对象,窗口DPI缩放比例) <a id="gdi.setFont" href="#gdi.setFont">&#x23;</a>
第二个参数是字体句柄、或 LOGFONT 结构体,  
使用 LOGFONT 对象作为参数将创建新的逻辑字体句柄，函数将返回该句柄。  
参数 @3 仅在使用 point 单位时用于修正窗体口与系统 DPI 不一致的问题。

### gdi.setPixel <a id="gdi.setPixel" href="#gdi.setPixel">&#x23;</a>
修改像素颜色

### gdi.setPixel(x,y,color,hwnd) <a id="gdi.setPixel" href="#gdi.setPixel">&#x23;</a>
句柄为可选参数

### gdi.textOut(hdc,font,str,x,y) <a id="gdi.textOut" href="#gdi.textOut">&#x23;</a>
输出文本  
hdc参数指定绘图设备句柄,font参数指定LOGFONT字体对象,  
可选参数x,y指定输出坐标

### gdi.updateLayeredWindow <a id="gdi.updateLayeredWindow" href="#gdi.updateLayeredWindow">&#x23;</a>
更新分层窗口。  
创建分层窗口以后，无论窗口是否显示都应当立即更新。  
否则后续可能因为调用失败（错误 87）导致窗口绘图残缺不刷新。

### gdi.updateLayeredWindow(hwnd,hdcSrc,size,blend,ptDst,ptSrc,hdcDst,crKey,flags) <a id="gdi.updateLayeredWindow" href="#gdi.updateLayeredWindow">&#x23;</a>
除参数 1 以外,所有参数可选  
参数用法与同名API相同,请参考微软文档  
注意参数顺序与API不同,请参考该函数源码

### gdi.windowBuffer <a id="gdi.windowBuffer" href="#gdi.windowBuffer">&#x23;</a>

```aardio
gdi.windowBuffer( hwnd,  
    function( hdc,hMemDc,hMemBitmap,width,height ){  
        /*窗口双缓冲绘图,此函数不可返回任何值*/  
        ::BitBlt(hdc, 0, 0, width, height, hMemDc, 0, 0, 0xCC0020/*_SRCCOPY*/);  
    }  
)
```

## ::LOGFONT 成员列表 <a id="::LOGFONT" href="#::LOGFONT">&#x23;</a>

### ::LOGFONT.is() <a id="::LOGFONT.is" href="#::LOGFONT.is">&#x23;</a>
检查参数@1是否 ::LOGFONT 结构体，返回布尔值

## blendFunctionObject 成员列表 <a id="blendFunctionObject" href="#blendFunctionObject">&#x23;</a>

### blendFunctionObject.alphaFormat <a id="blendFunctionObject.alphaFormat" href="#blendFunctionObject.alphaFormat">&#x23;</a>
默认为1,  
即AC_SRC_ALPHA:使用图像自带透明通道

### blendFunctionObject.blendFlags <a id="blendFunctionObject.blendFlags" href="#blendFunctionObject.blendFlags">&#x23;</a>
必须是0

### blendFunctionObject.blendOp <a id="blendFunctionObject.blendOp" href="#blendFunctionObject.blendOp">&#x23;</a>
必须是0

### blendFunctionObject.sourceConstantAlpha <a id="blendFunctionObject.sourceConstantAlpha" href="#blendFunctionObject.sourceConstantAlpha">&#x23;</a>
透明度值 1~255  
如果要使用图像本身的透明值,设为255  
默认值为255

## gdi.		this 成员列表 <a id="gdi.		this" href="#gdi.		this">&#x23;</a>

### gdi.		this.rgbRed <a id="gdi.		this.rgbRed" href="#gdi.		this.rgbRed">&#x23;</a>
`r;`

## gdi.? 成员列表 <a id="gdi.any" href="#gdi.any">&#x23;</a>

### gdi.*.getFont <a id="gdi.any.getFont" href="#gdi.any.getFont">&#x23;</a>
[返回对象:logfontObject](#logfontObject)

## gdi.this 成员列表 <a id="gdi.this" href="#gdi.this">&#x23;</a>

### gdi.this.rgbBlue <a id="gdi.this.rgbBlue" href="#gdi.this.rgbBlue">&#x23;</a>
`b;`

### gdi.this.rgbGreen <a id="gdi.this.rgbGreen" href="#gdi.this.rgbGreen">&#x23;</a>
`g;`

### gdi.this.rgbReserved <a id="gdi.this.rgbReserved" href="#gdi.this.rgbReserved">&#x23;</a>
`q;`

## gdiBitmapObject 成员列表 <a id="gdiBitmapObject" href="#gdiBitmapObject">&#x23;</a>

### gdiBitmapObject.bmBits <a id="gdiBitmapObject.bmBits" href="#gdiBitmapObject.bmBits">&#x23;</a>
指向存储像素阵列的数组

### gdiBitmapObject.bmBitsPixel <a id="gdiBitmapObject.bmBitsPixel" href="#gdiBitmapObject.bmBitsPixel">&#x23;</a>
调色板颜色位数

### gdiBitmapObject.bmHeight <a id="gdiBitmapObject.bmHeight" href="#gdiBitmapObject.bmHeight">&#x23;</a>
高度

### gdiBitmapObject.bmPlanes <a id="gdiBitmapObject.bmPlanes" href="#gdiBitmapObject.bmPlanes">&#x23;</a>
调色板颜色数

### gdiBitmapObject.bmType <a id="gdiBitmapObject.bmType" href="#gdiBitmapObject.bmType">&#x23;</a>
类型

### gdiBitmapObject.bmWidth <a id="gdiBitmapObject.bmWidth" href="#gdiBitmapObject.bmWidth">&#x23;</a>
宽度

### gdiBitmapObject.bmWidthBytes <a id="gdiBitmapObject.bmWidthBytes" href="#gdiBitmapObject.bmWidthBytes">&#x23;</a>
每行光栅所占字节数,必须为偶数

## gdicoinfoObject 成员列表 <a id="gdicoinfoObject" href="#gdicoinfoObject">&#x23;</a>

### gdicoinfoObject.fIcon <a id="gdicoinfoObject.fIcon" href="#gdicoinfoObject.fIcon">&#x23;</a>
是否图标

### gdicoinfoObject.hbmColor <a id="gdicoinfoObject.hbmColor" href="#gdicoinfoObject.hbmColor">&#x23;</a>
位图句柄

### gdicoinfoObject.hbmMask <a id="gdicoinfoObject.hbmMask" href="#gdicoinfoObject.hbmMask">&#x23;</a>
掩码位图句柄

### gdicoinfoObject.xHotspot <a id="gdicoinfoObject.xHotspot" href="#gdicoinfoObject.xHotspot">&#x23;</a>
热点坐标 x

### gdicoinfoObject.yHotspot <a id="gdicoinfoObject.yHotspot" href="#gdicoinfoObject.yHotspot">&#x23;</a>
热点坐标 y

## logfontObject 成员列表 <a id="logfontObject" href="#logfontObject">&#x23;</a>

### logfontObject.bold <a id="logfontObject.bold" href="#logfontObject.bold">&#x23;</a>
是否为粗体

### logfontObject.charset <a id="logfontObject.charset" href="#logfontObject.charset">&#x23;</a>
字符集代码,请参考标准库 gdi 中 _CHARSET 后缀常量

### logfontObject.clip <a id="logfontObject.clip" href="#logfontObject.clip">&#x23;</a>
剪辑精度

### logfontObject.color <a id="logfontObject.color" href="#logfontObject.color">&#x23;</a>
字体颜色

### logfontObject.createIndirect <a id="logfontObject.createIndirect" href="#logfontObject.createIndirect">&#x23;</a>
创建可用于GDI设备的逻辑字体  
并返回字体句柄

### logfontObject.createIndirect(hdc,hwnd,own) <a id="logfontObject.createIndirect" href="#logfontObject.createIndirect">&#x23;</a>
创建可用于绘图设备的逻辑字体,并返回对象句柄  
hdc,hwnd为可选参数用于转换point单位,默认为屏幕dc  
参数@3指定是否由当前对象是否持有该字体句柄

### logfontObject.deleteIndirect() <a id="logfontObject.deleteIndirect" href="#logfontObject.deleteIndirect">&#x23;</a>
删除createIndirect函数创建并管理生存期的字体  
必须确认该字体确实不再被使用

### logfontObject.detach() <a id="logfontObject.detach" href="#logfontObject.detach">&#x23;</a>
分离并返回字体句柄  
并将对象的字体句柄置为空,  
已分离的句柄必须自行管理生存期并负责释放

### logfontObject.esc <a id="logfontObject.esc" href="#logfontObject.esc">&#x23;</a>
字符串相对页面底端角度

### logfontObject.family <a id="logfontObject.family" href="#logfontObject.family">&#x23;</a>
字符间距和族

### logfontObject.getPointSize(hdc,hwnd) <a id="logfontObject.getPointSize" href="#logfontObject.getPointSize">&#x23;</a>
返回点数大小  
可选使用参数hdc指定绘图设备句柄,或使用hwnd指定获取hdc的窗口

### logfontObject.h <a id="logfontObject.h" href="#logfontObject.h">&#x23;</a>
指定字符的高度，逻辑单位，  
字体映射器会将此值转换为设备单位，  
默认的 MM_TEXT 映射模式下，这个值也就是像素值  

即使用此属性指定字体大小，  
aardio 创建的窗口仍然可以默认支持自动DPI缩放

### logfontObject.handle <a id="logfontObject.handle" href="#logfontObject.handle">&#x23;</a>
createIndirect 函数创建并管理生存期的字体句柄  
不应直接读写此句柄

### logfontObject.italic <a id="logfontObject.italic" href="#logfontObject.italic">&#x23;</a>
斜体

### logfontObject.name <a id="logfontObject.name" href="#logfontObject.name">&#x23;</a>
字体名称

### logfontObject.ori <a id="logfontObject.ori" href="#logfontObject.ori">&#x23;</a>
单个字符相对页面底端角度

### logfontObject.out <a id="logfontObject.out" href="#logfontObject.out">&#x23;</a>
输出精度

### logfontObject.point <a id="logfontObject.point" href="#logfontObject.point">&#x23;</a>
字体点数,  
此为内部只写属性,  
不应当使用直接此属性读写字体点数,  
请改用 getPointSize, setPointSize 函数

### logfontObject.quality <a id="logfontObject.quality" href="#logfontObject.quality">&#x23;</a>
输出质量

### logfontObject.setPointSize(pt,hdc,hwnd) <a id="logfontObject.setPointSize" href="#logfontObject.setPointSize">&#x23;</a>

```aardio
pt 参数指定字体点数,  
1点等于 1/72 英寸  
在不同DPI设置的显示器上,每英寸对应的点数与像素不相同,  
使用点数单位可在不同DPI设置的显示器上得到相同大小的字体,  
如果指定了@hdc 或 @hwnd 参数，则自动调用 stripPoint 函数并更新 h 属性指定的逻辑单位
```

### logfontObject.strike <a id="logfontObject.strike" href="#logfontObject.strike">&#x23;</a>
添加删除线

### logfontObject.stripPoint(hdc,hwnd) <a id="logfontObject.stripPoint" href="#logfontObject.stripPoint">&#x23;</a>
如果指定了字体点数,转换并更新 h 属性的逻辑单位,  
可选使用参数 @hdc 指定绘图设备句柄,或使用 @hwnd 指定获取 @hdc 的窗口

### logfontObject.underline <a id="logfontObject.underline" href="#logfontObject.underline">&#x23;</a>
添加下划线

### logfontObject.w <a id="logfontObject.w" href="#logfontObject.w">&#x23;</a>
指定字符的宽度，逻辑单位，  
一般不建议指定此参数

### logfontObject.weight <a id="logfontObject.weight" href="#logfontObject.weight">&#x23;</a>
重量,0到1000  
0为默认值,标准字体为400  
粗体为700

### 全局常量

### ::AbortPath <a id="::AbortPath" href="#::AbortPath">&#x23;</a>
`g.api("AbortPath","int(ptr hdc)");`

### ::AngleArc <a id="::AngleArc" href="#::AngleArc">&#x23;</a>
`g.api("AngleArc","int(ptr hdc,int x,int y,int dwRadius,float eStartAngle,float eSweepAngle)");`

### ::Arc <a id="::Arc" href="#::Arc">&#x23;</a>
`g.api("Arc","int(ptr hdc,int X1,int Y1,int X2,int Y2,int X3,int Y3,int X4,int Y4)");`

### ::ArcTo <a id="::ArcTo" href="#::ArcTo">&#x23;</a>
`g.api("ArcTo","int(ptr hdc,int X1,int Y1,int X2,int Y2,int X3,int Y3,int X4,int Y4)");`

### ::BeginPaint <a id="::BeginPaint" href="#::BeginPaint">&#x23;</a>
`u.api("BeginPaint","ptr(addr hwnd,struct &lpPaint)");`

### ::BeginPath <a id="::BeginPath" href="#::BeginPath">&#x23;</a>
`g.api("BeginPath","int(ptr hdc)");`

### ::BitBlt <a id="::BitBlt" href="#::BitBlt">&#x23;</a>
`g.api("BitBlt","int(ptr hDestDC,int x,int y,int cx,int cy,pointer hSrcDC,int xSrc,int ySrc,int dwRop)");`

### ::CancelDC <a id="::CancelDC" href="#::CancelDC">&#x23;</a>
`g.api("CancelDC","int(ptr hdc)");`

### ::CreateBitmap <a id="::CreateBitmap" href="#::CreateBitmap">&#x23;</a>
`g.api("CreateBitmap","ptr(int nWidth,int nHeight,INT nPlanes,INT nBitCount,pointer lpBits)");`

### ::CreateCompatibleBitmap <a id="::CreateCompatibleBitmap" href="#::CreateCompatibleBitmap">&#x23;</a>
`g.api("CreateCompatibleBitmap","ptr(ptr hdc,int nWidth,int nHeight)");`

### ::CreateCompatibleDC <a id="::CreateCompatibleDC" href="#::CreateCompatibleDC">&#x23;</a>
`g.api("CreateCompatibleDC","ptr(ptr hdc)");`

### ::CreateDC <a id="::CreateDC" href="#::CreateDC">&#x23;</a>
`g.api("CreateDC","ptr(str drive,str device,str output,struct initData)")`

### ::CreateFont <a id="::CreateFont" href="#::CreateFont">&#x23;</a>
`g.api("CreateFont","ptr(int H,int W,int E,int O,int W,bool I,bool u,int S,int C,int OP,int CP,int Q,int PAF,ustring F)");`

### ::CreateFontIndirect <a id="::CreateFontIndirect" href="#::CreateFontIndirect">&#x23;</a>
`g.api("CreateFontIndirect","ptr(struct lplf)" )`

### ::CreateHatchBrush <a id="::CreateHatchBrush" href="#::CreateHatchBrush">&#x23;</a>
`g.api("CreateHatchBrush","ptr(int nIndex,int color)");`

### ::CreatePatternBrush <a id="::CreatePatternBrush" href="#::CreatePatternBrush">&#x23;</a>
`g.api("CreatePatternBrush","ptr(ptr hbm)" )`

### ::CreatePen <a id="::CreatePen" href="#::CreatePen">&#x23;</a>
`g.api("CreatePen","ptr(int style,int width,int color)");`

### ::CreateSolidBrush <a id="::CreateSolidBrush" href="#::CreateSolidBrush">&#x23;</a>
`g.api("CreateSolidBrush","ptr(int crColor)");`

### ::DRAWITEMSTRUCT <a id="::DRAWITEMSTRUCT" href="#::DRAWITEMSTRUCT">&#x23;</a>
```aardio
class {
	INT CtlType;
	INT CtlID;
	INT itemID;
	INT itemAction;
	INT itemState;
	addr hwndItem;
	pointer hDC;
	struct rcItem = ::RECT();
	ptr itemData;
}
```

### ::DeleteDC <a id="::DeleteDC" href="#::DeleteDC">&#x23;</a>
`g.api("DeleteDC","bool(PTR hdc)");`

### ::DeleteObject <a id="::DeleteObject" href="#::DeleteObject">&#x23;</a>
`g.api("DeleteObject","bool(PTR hObj)");`

### ::DrawEdge <a id="::DrawEdge" href="#::DrawEdge">&#x23;</a>
`u.api("DrawEdge","int(ptr hdc,struct qrc,int edge,int grfFlags)");`

### ::DrawFocusRect <a id="::DrawFocusRect" href="#::DrawFocusRect">&#x23;</a>
`u.api("DrawFocusRect","int(ptr hdc,struct lpRect)");`

### ::DrawFrameControl <a id="::DrawFrameControl" href="#::DrawFrameControl">&#x23;</a>
`u.api("DrawFrameControl","int(ptr hdc,struct rc,int un1,int un2)");`

### ::DrawIconEx <a id="::DrawIconEx" href="#::DrawIconEx">&#x23;</a>
`u.api("DrawIconEx","int(PTR hdc,int x,int y,pointer hIcon,int cx,int cy,int stepIfAni,pointer hbrFlickerFreeDraw,int flags )" );`

### ::DrawText <a id="::DrawText" href="#::DrawText">&#x23;</a>
`u.api("DrawText","int(ptr hdc,ustring lpStr,int nCount,struct& lpRect,int wFormat)");`

### ::Ellipse <a id="::Ellipse" href="#::Ellipse">&#x23;</a>
`g.api("Ellipse","int(ptr hdc,int X1,int Y1,int X2,int Y2)");`

### ::EndPaint <a id="::EndPaint" href="#::EndPaint">&#x23;</a>
`u.api("EndPaint","int(addr hwnd,struct lpPaint)");`

### ::EndPath <a id="::EndPath" href="#::EndPath">&#x23;</a>
`g.api("EndPath","int(ptr hdc)");`

### ::FillPath <a id="::FillPath" href="#::FillPath">&#x23;</a>
`g.api("FillPath","int(ptr hdc)");`

### ::FillRect <a id="::FillRect" href="#::FillRect">&#x23;</a>
`u.api("FillRect","int(ptr hdc,struct& lpRect,pointer hBrush)");`

### ::FrameRect <a id="::FrameRect" href="#::FrameRect">&#x23;</a>
`u.api("FrameRect","int(ptr hdc,struct& lpRect,pointer hBrush)");`

### ::GRADIENT_RECT <a id="::GRADIENT_RECT" href="#::GRADIENT_RECT">&#x23;</a>
```aardio
class {
	int UpperLeft;
	int LowerRight;
}
```

### ::GdiGradientFill <a id="::GdiGradientFill" href="#::GdiGradientFill">&#x23;</a>
`g.api("GdiGradientFill","int(ptr hdc,struct pVertex,int nVertex,struct mesh,int count,int mode)");`

### ::GetBitmapBits <a id="::GetBitmapBits" href="#::GetBitmapBits">&#x23;</a>
`g.api("GetBitmapBits","int(ptr hbmp,int len,ptr bits)")`

### ::GetBkColor <a id="::GetBkColor" href="#::GetBkColor">&#x23;</a>
`g.api("GetBkColor","int(ptr hdc)");`

### ::GetBkMode <a id="::GetBkMode" href="#::GetBkMode">&#x23;</a>
`g.api("GetBkMode","int(ptr hdc)");`

### ::GetCurrentObject <a id="::GetCurrentObject" href="#::GetCurrentObject">&#x23;</a>
`g.api("GetCurrentObject","ptr(ptr hdc,int type)");`

### ::GetDC <a id="::GetDC" href="#::GetDC">&#x23;</a>
`u.api("GetDC","ptr(addr hwnd)");`

### ::GetDCEx <a id="::GetDCEx" href="#::GetDCEx">&#x23;</a>
`u.api("GetDCEx","ptr(addr hwnd,int hrgnClip,int flags)");`

### ::GetDeviceCaps <a id="::GetDeviceCaps" href="#::GetDeviceCaps">&#x23;</a>
`g.api("GetDeviceCaps","int(ptr hdc,int nIndex)");`

### ::GetObject <a id="::GetObject" href="#::GetObject">&#x23;</a>
`g.api("GetObject","int(ptr hObj,int nCount,struct& lpObject)");`

### ::GetPixel <a id="::GetPixel" href="#::GetPixel">&#x23;</a>
`g.api("GetPixel","int(ptr hdc,int x,int y)");`

### ::GetStockObject <a id="::GetStockObject" href="#::GetStockObject">&#x23;</a>
`g.api("GetStockObject","ptr(int i)" )`

### ::GetStretchBltMode <a id="::GetStretchBltMode" href="#::GetStretchBltMode">&#x23;</a>
`g.api("GetStretchBltMode","int(ptr hdc)");`

### ::GetSysColor <a id="::GetSysColor" href="#::GetSysColor">&#x23;</a>
`u.api("GetSysColor","int(int nIndex)");`

### ::GetTextAlign <a id="::GetTextAlign" href="#::GetTextAlign">&#x23;</a>
`g.api("GetTextAlign","int(PTR hdc)")`

### ::GetTextColor <a id="::GetTextColor" href="#::GetTextColor">&#x23;</a>
`g.api("GetTextColor","int(ptr hdc)");`

### ::GetWindowDC <a id="::GetWindowDC" href="#::GetWindowDC">&#x23;</a>
`u.api("GetWindowDC","ptr(addr hwnd)" )`

### ::LOGFONT() <a id="::LOGFONT()" href="#::LOGFONT()">&#x23;</a>
创建字体[LOGFONT结构体]  
可调用createIndirect生成字体句柄  
gdi.textOut,gdi.drawText 等函数可以直接使用此对象作为参数  
所有窗口及控件的setFont函数可使用此对象作为参数  

[返回对象:logfontObject](#logfontObject)

### ::LOGFONT(name="Tahoma";point=12 ) <a id="::LOGFONT(name="Tahoma";point=12 )" href="#::LOGFONT(name="Tahoma";point=12 )">&#x23;</a>
创建字体对象  
参数表可以使用键值对指定LOGFONT结构体中的字段值,  
参数也可以是另一个LOGFONT结构体,此时复制并创建新的结构体  
point指定字体大小,以点数为单位

### ::LineTo <a id="::LineTo" href="#::LineTo">&#x23;</a>
`g.api("LineTo","bool(ptr hdc,int x,int y)");`

### ::MEASUREITEMSTRUCT <a id="::MEASUREITEMSTRUCT" href="#::MEASUREITEMSTRUCT">&#x23;</a>
```aardio
class {
	INT CtlType;
	INT CtlID;
	INT itemID;
	INT itemWidth;
	INT itemHeight;
	ptr itemData;
}
```

### ::MoveToEx <a id="::MoveToEx" href="#::MoveToEx">&#x23;</a>
`g.api("MoveToEx","bool(ptr hdc,int x,int y,struct& lpPoint)");`

### ::PAINTSTRUCT <a id="::PAINTSTRUCT" href="#::PAINTSTRUCT">&#x23;</a>
```aardio
class {
	pointer hdc;
	int fErase;
	struct rcPaint = ::RECT();
	int fRestore;
	int fIncUpdate;
	BYTE rgbReserved[32];
}
```

### ::PatBlt <a id="::PatBlt" href="#::PatBlt">&#x23;</a>
`g.api("PatBlt","int(PTR hDc,int x,int y,int cx,int cy,INT rop)" )`

### ::PrintWindow <a id="::PrintWindow" href="#::PrintWindow">&#x23;</a>
`u.api("PrintWindow","int(addr hwnd,pointer hdcBlt,int nFlags)");`

### ::ReleaseDC <a id="::ReleaseDC" href="#::ReleaseDC">&#x23;</a>
`u.api("ReleaseDC","bool(addr hwnd,PTR hdc)");`

### ::RoundRect <a id="::RoundRect" href="#::RoundRect">&#x23;</a>
`g.api("RoundRect","int(ptr hdc,int l,int t,int r,int b,int cx,int cy)");`

### ::SelectClipPath <a id="::SelectClipPath" href="#::SelectClipPath">&#x23;</a>
`g.api("SelectClipPath","int(ptr hdc,int iMode)");`

### ::SelectObject <a id="::SelectObject" href="#::SelectObject">&#x23;</a>
`g.api("SelectObject","ptr(PTR hdc,ptr hObj)");`

### ::SetBkColor <a id="::SetBkColor" href="#::SetBkColor">&#x23;</a>
`g.api("SetBkColor","int(ptr hdc,int color)");`

### ::SetBkMode <a id="::SetBkMode" href="#::SetBkMode">&#x23;</a>
`g.api("SetBkMode","int(ptr hdc,int mode)");`

### ::SetBrushOrgEx <a id="::SetBrushOrgEx" href="#::SetBrushOrgEx">&#x23;</a>
`g.api("SetBrushOrgEx","int(ptr hdc,int xOrg,int yOrg,struct &pt)");`

### ::SetPixel <a id="::SetPixel" href="#::SetPixel">&#x23;</a>
`g.api("SetPixel","int(ptr hdc,int x,int y,int crColor)");`

### ::SetStretchBltMode <a id="::SetStretchBltMode" href="#::SetStretchBltMode">&#x23;</a>
`g.api("SetStretchBltMode","int(ptr hdc,int nStretchMode)");`

### ::SetTextAlign <a id="::SetTextAlign" href="#::SetTextAlign">&#x23;</a>
`g.api("SetTextAlign","int(PTR hdc,INT align)")`

### ::SetTextColor <a id="::SetTextColor" href="#::SetTextColor">&#x23;</a>
`g.api("SetTextColor","int(ptr hdc,int crColor)");`

### ::StretchBlt <a id="::StretchBlt" href="#::StretchBlt">&#x23;</a>
`g.api("StretchBlt","int(ptr hdc,int x,int y,int nWidth,int nHeight,pointer hSrcDC,int xSrc,int ySrc,int nSrcWidth,int nSrcHeight,int dwRop)");`

### ::TRIVERTEX <a id="::TRIVERTEX" href="#::TRIVERTEX">&#x23;</a>
```aardio
class {
	int x;
	int y;
	WORD Red;
	WORD Green;
	WORD Blue;
	WORD Alpha;
}
```

### ::TextOut <a id="::TextOut" href="#::TextOut">&#x23;</a>
`g.api("TextOut","int(ptr hdc,int x,int y,ustring lpString,int nCount)");`

### ::TransparentBlt <a id="::TransparentBlt" href="#::TransparentBlt">&#x23;</a>
`g.api("GdiTransparentBlt","int(ptr hdcDest,int xoriginDest,int yoriginDest,int wDest,int hDest,pointer hdcSrc,int xoriginSrc,int yoriginSrc,int wSrc,int hSrc,INT crTransparent)");`

### 自动完成常量
_ANSI_CHARSET=0  
_ARABIC_CHARSET=0xB2  
_BALTIC_CHARSET=0xBA  
_BLACKNESS=0x42  
_CHINESEBIG5_CHARSET=0x88  
_CLR_DEFAULT=0xFF000000  
_CLR_NONE=-1  
_DEFAULT_CHARSET=1  
_DSTINVERT=0x550009  
_EASTEUROPE_CHARSET=0xEE  
_GB2312_CHARSET=0x86  
_GREEK_CHARSET=0xA1  
_HANGEUL_CHARSET=0x81  
_HANGUL_CHARSET=0x81  
_HEBREW_CHARSET=0xB1  
_JOHAB_CHARSET=0x82  
_MAC_CHARSET=0x4D  
_MERGECOPY=0xC000CA  
_MERGEPAINT=0xBB0226  
_NOTSRCCOPY=0x330008  
_NOTSRCERASE=0x1100A6  
_OEM_CHARSET=0xFF  
_PATCOPY=0xF00021  
_PATINVERT=0x5A0049  
_PATPAINT=0xFB0A09  
_RUSSIAN_CHARSET=0xCC  
_SHIFTJIS_CHARSET=0x80  
_SRCAND=0x8800C6  
_SRCCOPY=0xCC0020  
_SRCERASE=0x440328  
_SRCINVERT=0x660046  
_SRCPAINT=0xEE0086  
_STRETCH_ANDSCANS=0x1  
_STRETCH_DELETESCANS=0x3  
_STRETCH_HALFTONE=0x4  
_STRETCH_ORSCANS=0x2  
_SYMBOL_CHARSET=2  
_THAI_CHARSET=0xDE  
_TURKISH_CHARSET=0xA2  
_ULW_ALPHA=0x2  
_ULW_COLORKEY=0x1  
_ULW_OPAQUE=0x4  
_VIETNAMESE_CHARSET=0xA3  
_WHITENESS=0xFF0062  
