简单的文本输出
TextOut(hdc,xStart,yStart,pString,iCount):xStart是第一个字符的水平位置,但这个参数的意义可以用SetTextAlign改变,TA_LEFT为默认方式,TA_RIGHT则xStart是最后一个字符的水平位置,TA_CENTER则xStart是中间字符的水平位置。同样,TA_TOP、TA_BOTTOM和TA_BASELINE表示yStart的意义——字符在垂直方向的位置,TA_TOP为默认。如果用TA_UPDATECP标记,则系统忽略xStart和yStart参数,文本从当前位置输出(MoveToEx或LineTo等函数改变),同时调用完成后,它还把当前位置移动到文本末尾(TA_LEFT)/开始(TA_RIGHT)/不变(TA_CENTER),这个在多次调用TextOut显示一行文本时方便。
TabbedTextOut(hdc,xStart,yStart,pString,iCount,iNumTabs,piTabStops,xTabOrigin):输出带有"/t"的文本。如果iNumTabs和piTabStops都是0,则每隔平均字符宽度8倍输出一个制表符。xTabOrigin是制表计算的起始位置。
ExtTextOut(hdc,xStart,yStart,iOptions,&rect,pString,iCount,pxDistance):iOptions为ETO_CLIPPED则rect为裁剪区,为ETO_OPAQUE则rect与当前背景色相同。pxDistance是相邻字符间的间距,可以伸缩列宽,如果为NULL则为默认。
DrawText(hdc,pString,iCount,&rect,iFormat):把文本显示在rect内,如果pString是'/0'结束,iCount可取-1。iFormat为0(DT_LEFT),文本中遇到回车或换行符(/r或/n)就从rect左边、向下一行继续输出文本。iFormat为DT_RIGHT则靠右侧输出。iFormat为DT_CENTER则在中间输出。如果不想转义回车换行符,则iFormat加上DT_SINGLELINE标记。DT_TOP、DT_BOTTOM和DT_VCENTER可以控制文本的靠上、靠下或靠中间。iFormat还有DT_WORDBREAK、DT_NOCLIP、DT_EXTERNERLLEADING、DT_EXPANDTABS、DT_TABSTOP等选项。
DrawTextEx(hdc,pString,iCount,&rect,iFormat,&drawtextparams):用来解决用DrawText修改文本中制表符的问题。
以上函数输出文本都以hdc当前选择的字体输出。
DC文本属性
SetTextColor(hdc,rgbColor);
SetBkColor(hdc,rgbColor);
SetBkMode(hdc,iMode):iMode为OPAQUE或TRANSPARENT。OPAQUE为默认,输出文本以SetBkColor设置的颜色为背景。TRANSPARENT为透明背景。
GetSysColor(COLOR_WINDOWTEXT):获取系统设置的文本色
GetSysColor(COLOR_WINDOW):获取系统设置的窗口色
SetTextCharacterExtra(hdc,iExtra):设置字符间间距,默认为0。如果iExtra为负,则取它的绝对值。GetTextCharacterExtra可获得当前Extra。
GetTextFace(hdc,sizeof(szFaceName)/sizeof(TCHAR),szFaceName):获得当前DC选择的字体名称
GetTextMetrics(hdc,&textmetric):textmetric是TEXTMETRIC结构体变量,有20个字段。
选择 、创建字体
GetStockObject(iFont):返回字体句柄,iFont可以是SYSTEM_FONT、SYSTEM_FIXED_FONT、OEM_FIXED_FONT、DEFAULT_GUI_FONT
CreateFont:14个参数,一般不用。
CreateFontIndirect(&logfont):logfont是LOGFONT结构体,有14个字段,默认值都为0。flHeight设置字体高度,flWidth设置宽度,对于raster字体无效。lfEscapement设置文本的输出方向(单个字符仍与水平方向平行),以0.1度为单位。lfOrientation改变字符输出方向。lfWeight设置字体粗细,WINGDI.H中定义了一部分值:FW_DONTCARE(0)、FW_THIN(100)……FW_HEAVY(900),一般用0或400用做普通粗细,700用做加粗。lfItalic为非0则使用斜体字,lfUnderline非0则加下划线,lfStrikeout非0则加删除线。lfCharSet设置字符集。lfOutPrecision定义实际字体如何匹配lfHight与lfWeight字段的值,不常用,可以用OUT_TT_ONLY_PRECIS标志确保只使用TrueType字体。lfClipPrecision设置字符部分在剪裁区外如何剪裁,不常用。lfQuality只用reaster字体有效,DRAFT_QUALITY表示把字体拉伸到你想要的大小(lfHeight和lfWidth的值),如果用PROOF_QUALITY标志,则不会拉伸字体,一般用DEFAULT_QUALITY(0)。lfPitchAndFamily,这个字段由两部分组成,低两位设置Pitch,即字符宽度使用固定宽度还是变化的宽度,可取三个值:DEFAULT_PITCH(0)、FIXED_PITCH(1)、VARIABLE_PITCH(2),高四位设置字体家族(font family)。lfFaceName设置选择的字体名,如果用TrueType斜体或粗体,可以设置lfFaceName为基础字体名加Italic等,也可以只设为基础名,在其它字段设置属性。
列举字体
EnumFonts(hdc,szTypeFace,EnumProc,pData)
EnumFontFamilies(hdc,szFaceName,EnumProc,pData)
EnumFontFamiliesEx(hdc,&logfont,EnumProc,pData,dwFlags)
ChooseFont(&choosefont)
文本格式化(Text Formatting)
GetTextExtentPoint32(hdc,pString,iCount,&size):获得当前dc下输出pString的长度和宽度。输出时,对yStart加size.cy就可以在下一行输出。如果要在xLeft和xRight之间输出字符,对于左对齐,xStart取xLeft;对于右对齐,xStart取xRight-size.cx;对于居中,xStart取(xLeft+xRight-size.cx)/2。
SetTextJustification(hdc,iExtra,iCount):设置系统输出一行字符串时在空格处添加的空格数。iExtra为总空格,iCount为一行中的空格数。iExtra取xRight-xLeft-size.cx,TextOut中xStart取xRight,可以在xLeft到xRight之间两端对齐,且多余的空间平均分配在空格处。
路径层
BeginPath(hdc):开始路径在路径,中可以使用各种GDI函数,绘制文本的有TextOut。
EndPath(hdc):结束路径
StrokePath(hdc):绘制路径
FillPath(hdc):填充路径
StrokeAndFillPath(hdc):绘制并填充路径
ExtCreatePen(iStyle,iWidth,&lBrush,0,NULL):创建HPEN,可以设定线条两端和连接处的形状。