与字体相关的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
posted @ 2012-08-05 16:23  iSmilent  阅读(556)  评论(0编辑  收藏  举报