www.gusucode.com > 一个VC++ GUI测试程序-源码程序 > 一个VC++ GUI测试程序-源码程序/code/AutoFont.cpp
//CAutoFont class implementation #include "stdafx.h" #include "AutoFont.h" // Download by http://www.NewXing.com CAutoFont::CAutoFont() { lf.lfHeight=16; lf.lfWidth=0; lf.lfEscapement=0; lf.lfOrientation=0; lf.lfWeight=FW_NORMAL; lf.lfItalic=0; lf.lfUnderline=0; lf.lfStrikeOut=0; lf.lfCharSet=ANSI_CHARSET; lf.lfOutPrecision=OUT_DEFAULT_PRECIS; lf.lfClipPrecision=CLIP_DEFAULT_PRECIS; lf.lfQuality=PROOF_QUALITY; lf.lfPitchAndFamily=VARIABLE_PITCH | FF_ROMAN; strcpy(lf.lfFaceName, "Times New Roman"); CreateFontIndirect(&lf); } CAutoFont::CAutoFont(CString facename) { lf.lfHeight=16; lf.lfWidth=0; lf.lfEscapement=0; lf.lfOrientation=0; lf.lfWeight=FW_NORMAL; lf.lfItalic=0; lf.lfUnderline=0; lf.lfStrikeOut=0; lf.lfCharSet=ANSI_CHARSET; lf.lfOutPrecision=OUT_DEFAULT_PRECIS; lf.lfClipPrecision=CLIP_DEFAULT_PRECIS; lf.lfQuality=PROOF_QUALITY; lf.lfPitchAndFamily=VARIABLE_PITCH | FF_ROMAN; strcpy(lf.lfFaceName, (LPCTSTR)facename); CreateFontIndirect(&lf); } ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////// Function Header CAutoFont& CAutoFont::operator =(CAutoFont &rhs) ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// { GetLogFont(&rhs.lf); SetColour(rhs.GetColour()); return *this; } CAutoFont::CAutoFont(LOGFONT& logfont) { lf=logfont; CreateFontIndirect(&lf); SetColour(0,0,0); } CAutoFont::CAutoFont(CFont font) { HFONT hFont=(HFONT)font; Attach((HFONT)hFont); GetLogFont(&lf); SetColour(0,0,0); } CAutoFont::~CAutoFont() { } LONG CAutoFont::SetHeight(LONG height) { LONG l=lf.lfHeight; DeleteObject(); lf.lfHeight=height; CreateFontIndirect(&lf); return l; } LONG CAutoFont::SetWidth(LONG width) { LONG l=lf.lfWidth; DeleteObject(); lf.lfWidth=width; CreateFontIndirect(&lf); return l; } LONG CAutoFont::SetEscapement(LONG esc) { LONG l=lf.lfEscapement; DeleteObject(); lf.lfEscapement=esc; CreateFontIndirect(&lf); return l; } LONG CAutoFont::SetOrientation(LONG or) { LONG l=lf.lfOrientation; DeleteObject(); lf.lfOrientation=or; CreateFontIndirect(&lf); return l; } LONG CAutoFont::SetWeight(LONG weight) { LONG l=lf.lfWeight; DeleteObject(); lf.lfWeight=weight; CreateFontIndirect(&lf); return l; } BYTE CAutoFont::SetCharset(BYTE charset) { BYTE b=lf.lfCharSet; DeleteObject(); lf.lfCharSet=charset; CreateFontIndirect(&lf); return b; } BYTE CAutoFont::SetOutPrecision(BYTE op) { BYTE b=lf.lfOutPrecision; DeleteObject(); lf.lfOutPrecision=op; CreateFontIndirect(&lf); return b; } BYTE CAutoFont::SetClipPrecision(BYTE cp) { BYTE b=lf.lfClipPrecision; DeleteObject(); lf.lfClipPrecision=cp; CreateFontIndirect(&lf); return b; } BYTE CAutoFont::SetQuality(BYTE qual) { BYTE b=lf.lfQuality; DeleteObject(); lf.lfQuality=qual; CreateFontIndirect(&lf); return b; } BYTE CAutoFont::SetPitchAndFamily(BYTE paf) { BYTE b=lf.lfPitchAndFamily; DeleteObject(); lf.lfPitchAndFamily=paf; CreateFontIndirect(&lf); return b; } CString CAutoFont::SetFaceName(CString facename) { CString str=lf.lfFaceName; DeleteObject(); strcpy(lf.lfFaceName, (LPCTSTR)facename); CreateFontIndirect(&lf); return str; } LPCTSTR CAutoFont::SetFaceName(LPCTSTR facename) { LPCTSTR str=lf.lfFaceName; DeleteObject(); strcpy(lf.lfFaceName, facename); CreateFontIndirect(&lf); return str; } BOOL CAutoFont::SetBold(BOOL B) { BOOL b; if (B) b=SetWeight(FW_BOLD); else b=SetWeight(FW_NORMAL); if (b >= FW_MEDIUM) return TRUE; else return FALSE; } BOOL CAutoFont::SetItalic(BOOL i) { BOOL b=(BOOL)lf.lfItalic; DeleteObject(); lf.lfItalic=i; CreateFontIndirect(&lf); return b; } BOOL CAutoFont::SetUnderline(BOOL u) { BOOL b=(BOOL)lf.lfUnderline; DeleteObject(); lf.lfUnderline=u; CreateFontIndirect(&lf); return b; } BOOL CAutoFont::SetStrikeOut(BOOL s) { BOOL b=(BOOL)lf.lfStrikeOut; DeleteObject(); lf.lfStrikeOut=s; CreateFontIndirect(&lf); return b; } void CAutoFont::SetLogFont(LOGFONT& logfont) { lf=logfont; DeleteObject(); CreateFontIndirect(&lf); } LONG CAutoFont::GetHeight() { return lf.lfHeight; } LONG CAutoFont::GetWidth() { return lf.lfWidth; } LONG CAutoFont::GetEscapement() { return lf.lfEscapement; } LONG CAutoFont::GetOrientation() { return lf.lfEscapement; } LONG CAutoFont::GetWeight() { return lf.lfWeight; } BYTE CAutoFont::GetCharset() { return lf.lfCharSet; } BYTE CAutoFont::GetOutPrecision() { return lf.lfOutPrecision; } BYTE CAutoFont::GetClipPrecision() { return lf.lfClipPrecision; } BYTE CAutoFont::GetQuality() { return lf.lfQuality; } BYTE CAutoFont::GetPitchAndFamily() { return lf.lfPitchAndFamily; } LPCTSTR CAutoFont::GetFaceName() { return lf.lfFaceName; } BOOL CAutoFont::GetBold() { return lf.lfWeight >= FW_MEDIUM ? TRUE : FALSE; } BOOL CAutoFont::GetItalic() { return (BOOL)lf.lfItalic; } BOOL CAutoFont::GetUnderline() { return (BOOL)lf.lfUnderline; } BOOL CAutoFont::GetStrikeOut() { return (BOOL)lf.lfStrikeOut; } CString CAutoFont::ContractFont() { CString str; str.Format("%i,%i,%i,%i,%i,%i,%i,%i,%i,%i,%i,%i,%i,%i,%i,%i,%s", lf.lfHeight, lf.lfWidth, lf.lfEscapement, lf.lfOrientation, lf.lfWeight, lf.lfItalic, lf.lfUnderline, lf.lfStrikeOut, lf.lfCharSet, lf.lfOutPrecision, lf.lfClipPrecision, lf.lfQuality, lf.lfPitchAndFamily, GetRValue(m_crColour), GetGValue(m_crColour), GetBValue(m_crColour), lf.lfFaceName); return str; } void CAutoFont::ExtractFont(CString& str) { lf.lfHeight=atol((LPCTSTR)GetToken(str, ",")); lf.lfWidth=atol((LPCTSTR)GetToken(str, ",")); lf.lfEscapement=atol((LPCTSTR)GetToken(str, ",")); lf.lfOrientation=atol((LPCTSTR)GetToken(str, ",")); lf.lfWeight=atol((LPCTSTR)GetToken(str, ",")); lf.lfItalic=atoi((LPCTSTR)GetToken(str, ",")); lf.lfUnderline=atoi((LPCTSTR)GetToken(str, ",")); lf.lfStrikeOut=atoi((LPCTSTR)GetToken(str, ",")); lf.lfCharSet=atoi((LPCTSTR)GetToken(str, ",")); lf.lfOutPrecision=atoi((LPCTSTR)GetToken(str, ",")); lf.lfClipPrecision=atoi((LPCTSTR)GetToken(str, ",")); lf.lfQuality=atoi((LPCTSTR)GetToken(str, ",")); lf.lfPitchAndFamily=atoi((LPCTSTR)GetToken(str, ",")); int r = atoi((LPCTSTR)GetToken(str, ",")); int g = atoi((LPCTSTR)GetToken(str, ",")); int b = atoi((LPCTSTR)GetToken(str, ",")); SetColour(r,g,b); strcpy(lf.lfFaceName, (LPCTSTR)str); DeleteObject(); CreateFontIndirect(&lf); } CString CAutoFont::GetToken(CString& str, LPCTSTR c) { int pos; CString token; pos=str.Find(c); token=str.Left(pos); str=str.Mid(pos+1); return token; } ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////// Function Header void CAutoFont::SetAntialiasQuality(int nQuality) ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // Undocumented feature - max quality is 4 { lf.lfQuality = nQuality; } ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////// Function Header void CAutoFont::SetNonAntialiasQuality(int nQuality) ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // Undocumented feature - max quality is 3 { lf.lfQuality = nQuality; } ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////// Function Header void CAutoFont::SetColour(COLORREF crColour) { m_crColour = crColour; } void CAutoFont::SetColour(int r, int g, int b) { m_crColour = RGB(r,g,b); } ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////// Function Header COLORREF CAutoFont::GetColour() { return m_crColour; } ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////// Function Header int CAutoFont::GetRedValue(){ return GetRValue(m_crColour); } int CAutoFont::GetGreenValue(){ return GetGValue(m_crColour); } int CAutoFont::GetBlueValue(){ return GetBValue(m_crColour); } /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////