与字体相关的win API函数,以及结构
最近正在学习Windows API编程,所以对字体以及字体颜色方面的API函数以及结构体做一些总结,
菜鸟作品。。。by Lee.Ye
BOOL GetTextMetrics ( HDC hdc, LPTEXTMETRIC lptm);
;该函数把程序当前的字体信息,存放到TEXTMETRIC
typedef struct tag TEXTMETRIC{ LONG tmHeight;//高度 LONG tmAveCharWidth;//宽度 BYTE tmPitchAndFamily;//其他结构栏位 } TEXTMETRIC, * PTEXTMETRIC;//用于存储装置字体结构信息
对于固定宽度字体,每个字体的宽度是tmAveCharWidth,
对于固定宽度字体,tmPitchAndFamily栏位的低位元为0,
字体:
HGDIOBJ SelectObject ( HDC hdc, HGDIOBJ hgdiobj);
//将相应的对象加入到HDC
HGDIOBJ GetStockObject ( int fnObj);//获取字体
SelectObject ( hdc, GetStockObject(ANSI_FIXD_FONT));获取ANSI_FIXD_FONT字体并生效
代码:
TEXTMETRIC tm;
HDC hdc;
hdc = GetDC(hwnd);//获取该窗口句柄对应的dc
GetTextMetrics (hdc,&tm);
SelectObject ( hdc, GetStockObject(ANSI_FIXD_FONT));获取ANSI_FIXD_FONT字体
TextOut(.....................);
ReleaseDC(hwnd,hdc);
创建字体:
HFONT CreateFont( int nHeight, //字体高度 int nWidth, // 字体宽度 int nEscapement, // 字体显示的角度 int nOrientation, // 字体的角度 int fnWeight, // 字体的磅数 DWORD fdwItalic, // 斜体 DWORD fdwUnderline, // 下划线 DWORD fdwStrikeOut, // 删除线 DWORD fdwCharSet, // 所需的字符集 DWORD fdwOutputPrecision, // 输出的精度 DWORD fdwClipPrecision, // 裁剪的精度 DWORD fdwQuality, // 逻辑字体与输出设备的字体之间的精度 DWORD fdwPitchAndFamily, // 字体间距和字体集 LPCTSTR lpszFace // t字体名称 );(用于创建字体的结构体)HFONT CreateFontIndirect (CONST LOGFONT * lplf);(与LOGFONT配合使用的函数)
代码:
TEXTMETRIC tm;
LOGFONT lf;
HDC hdc;
hdc = GetDC (hwnd);
lf....................;
GetTextMetrics(hdc,&tm);
SelectObject(hdc,CreateFontIndirect(&lf));
TextOut(hdc,0,0,TEXT("这是自定义的字体"),strlen(TEXT("这是自定义的字体")));
ReleaseDC(hwnd,hdc);
字体选择框:
BOOL ChooseFont(LPCHOOSEFONT lpcf);
typedef struct{ DWORD lStructSize;//结构体大小 LPLOGFONT lpLpgFont;//字体信息 DWORD Flags; //CF_SCREENFONTS在屏幕上显示,CF_EFFECT显示下划线字体颜色,删除线功能,CF_INITTOLOGFONTSTRUCT用lpLogFont初始化选择框。 }CHOOSEFONT, *LPCHOOSEFONT;
代码:
CHOOSEFONT cf = {0};//创建字体选择框并赋上初值
LOGFONT lf;//用于被指向的字体信息
cf.lStructSize = sizeof(CHOOSEFONT);
cf.lpLogFont = &lf;
cf.Flags = CF_SCREENFONTS | CF_EFFECTS;
ChooseFont(&cf);
hdc = GetDC(hwnd);
SelectObject(hdc,CreateFontIndirect(&cf.lpLogFont));//
TextOut(..............................);
ReleaseDC(...........);
字体颜色:
设置字体前景色:
COLORDEF SetTextColor(HDC hdc,COLORDEF crColor);//RGB(x,x,x)设置颜色
设置背景色:
SetBkColor(HDC hdc,COLORDEF crColor);
SetBkMode(hdc,OPAQUE);//设置背景模式,OPAQUE不透明,TRANSPARENT透明
typedef struct { DWORD lStructSize; HWND hwndOwner; HWND hInstance; COLORREF rgbResult; COLORREF *lpCustColors; DWORD Flags; LPARAM lCustData; LPCCHOOKPROC lpfnHook; LPCTSTR lpTemplateName; } CHOOSECOLOR, *LPCHOOSECOLOR;//颜色选择框结构体
自定义颜色:
CHOOSECOLOR cc = {0};//初始化为默认值
COLORREF cd[16];//存放16中自定义颜色
cc.lStructSize = sizeof(CHOOSECOLOR);
cc.lpCustColors = crf;//
cc.Flags = CC_FULLOPEN ;//设置颜色的标志
hdc = GetDC(hwnd);
ChooseColor(&cc);//创建一个能使用户从中选择颜色的通用颜色对话框
SetTextColor(hdc,cc.rgbResult);//选择颜色的结果放在rgbResult中。
以上总结来自Lee.Ye