2012年5月11日 星期五

CFont

//建立字型的用法
CreateFont(                  m_font.CreateFont(
  int nHeight, 18,                    //指定想要的高度(邏輯單位)的字體。
  int nWidth, 0,                     //指定平均寬度(邏輯單位)中的字符的字體。
  int nEscapement, 0,                     //指定角度(以0.1度為單位),旋轉刻度向量與x軸的夾角。
  int nOrientation, 0,                     //指定角度(以0.1度為單位)之間的字符基線和X軸。
  int nWeight, FW_REGULAR,            //指定字體的粗細(以像素為單位,每簽訂1000)。
  BYTE bItalic, FALSE,                 //指定字體是否斜體。
  BYTE bUnderline, FALSE,                 //指定字體是否下劃線。
  BYTE cStrikeOut, FALSE,                 //指定字體是否加刪除線。
  BYTE nCharSet, SYMBOL_CHARSET,        //指定字集(符號、西歐、BIG5之類的)
  BYTE nOutPrecision, OUT_DEFAULT_PRECIS,    //指定所需的輸出精度。
  BYTE nClipPrecision, CLIP_DEFAULT_PRECIS,   //指定所需的剪切精度。 剪輯精度定義了如何剪輯字符的剪輯區域以外的部分。
  BYTE nQuality, DEFAULT_QUALITY,       //指定字體的輸出質量,它定義如何精心的GDI必須嘗試匹配邏輯字體屬性的一個實際的物理字體。
  BYTE nPitchAndFamily, FIXED_PITCH,           //指定的字距和群組(Family)的字體。
  LPCTSTR lpszFacename "Webdings");           //一個 CString的 或指針為空結束的字符串,指定字體名稱的字體。



//幫Buttom設定字型
    pBtmOK->SetFont(&m_font);  //╳
    pBtmMax->SetFont(&m_font); //□


在View使用Font要注意的流程

//宣告DC
//宣告字型
    //創建字型
//宣告暫存現有字型指標的記憶體位址
    //設定字型進入DC
    //定義暫存字型指標的記憶體位址
//顯示字
//恢復設定暫存字型進入DC
//清除字型設定

BOOL bFont = FALSE;
CFont aFont;
CFont * p01dFont;
UINT nTxtSz(16);
CSize TextSize(nTxtSz, nTxtSz);

bFont = aFont.CreateFont(TextSize.cx, 0, 0, 0, FW_NORMAL, 0, 0, 0, 0, 0, 0, 0, DEFAULT_PITCH|FF_MODERN, "Verdana");
if(bFont)
{
  p01dFont = pDC->SelectObject(&aFont);  //設定新的時,會把目前的(舊的)給回傳出來
  aFont.DeleteObject();                 //砍掉剛設定的(新的)字型
}
pDC->TextOut(ptO.x + szSpace.cx + cellwidth, ptO.y + szSpace.cy, "10040406-A0C1BB2800004");
if (bFont)
{
  pDC->SelectObject(p01dFont); //設定回原本的(舊的),回傳剛用過的
  bFont = FALSE;
}

LOGFONT
typedef struct tagLOGFONT {
    LONG lfHeight;                    
    LONG lfWidth;
    LONG lfEscapement;
    LONG lfOrientation;
    LONG lfWeight;
    BYTE lfItalic;
    BYTE lfUnderline;
    BYTE lfStrikeOut;
    BYTE lfCharSet;
    BYTE lfOutPrecision;
    BYTE lfClipPrecision;
    BYTE lfQuality;
    BYTE lfPitchAndFamily;
    TCHAR lfFaceName[LF_FACESIZE];
} LOGFONT, *PLOGFONT;

example code:

void CExoView::OnDraw(CDC* pDC)
{
CFont font;
LOGFONT LogFont;


LogFont.lfStrikeOut = 0;
LogFont.lfUnderline = 0;
LogFont.lfHeight = 42;
LogFont.lfEscapement = 0;
LogFont.lfItalic = TRUE;


font.CreateFontIndirect(&LogFont);
CFont *pFont = pDC->SelectObject(&font);
pDC->TextOut(20, 18, "James Kolowski", 14);


pDC->SelectObject(pFont);
font.DeleteObject();
}
參考:http://www.ucancode.net/faq/CreateFont.htm

沒有留言:

張貼留言