www.gusucode.com > 大学排课系统,VC++实现,能实现根据教师及课程资源自动排 > 大学排课系统,VC++实现,能实现根据教师及课程资源自动排课/ARRANGE/AutoFont.cpp
//CAutoFont class implementation //Modified by jingzhou xu #include "stdafx.h" #include "AutoFont.h" CAutoFont::CAutoFont() { ZeroMemory( &lf, sizeof( lf ) ); // fixed for uninitialized memory, majun 7.26 lf.lfHeight=-12; lf.lfWidth=0; lf.lfEscapement=0; lf.lfOrientation=0; lf.lfWeight=FW_NORMAL; lf.lfItalic=0; lf.lfUnderline=0; lf.lfStrikeOut=0; lf.lfCharSet=DEFAULT_CHARSET; //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); fontColor=0; hDC=NULL; } CAutoFont::CAutoFont(CString facename) { ZeroMemory( &lf, sizeof( lf ) ); // fixed for uninitialized memory, majun 7.26 lf.lfHeight=-12; lf.lfWidth=0; lf.lfEscapement=0; lf.lfOrientation=0; lf.lfWeight=FW_NORMAL; lf.lfItalic=0; lf.lfUnderline=0; lf.lfStrikeOut=0; lf.lfCharSet=DEFAULT_CHARSET; //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); fontColor=0; hDC=NULL; } CAutoFont::CAutoFont(LOGFONT& logfont) { ZeroMemory( &lf, sizeof( lf ) ); // fixed for uninitialized memory, majun 7.26 lf=logfont; CreateFontIndirect(&lf); fontColor=0; hDC=NULL; } CAutoFont::CAutoFont(CFont font) { ZeroMemory( &lf, sizeof( lf ) ); // fixed for uninitialized memory, majun 7.26 HFONT hFont=(HFONT)font; Attach((HFONT)hFont); GetLogFont(&lf); fontColor=0; hDC=NULL; } CAutoFont::~CAutoFont() { } LONG CAutoFont::SetHeight(LONG height) { LONG l=lf.lfHeight; DeleteObject(); lf.lfHeight=height; CreateFontIndirect(&lf); return l; } LONG CAutoFont::SetHeightA(LONG height) { LONG l=lf.lfHeight; DeleteObject(); if (height>0) height=0-height; 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, color; str.Format("%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, lf.lfFaceName); color.Format("%u", fontColor); str+=","; str+=color; 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, ",")); strcpy(lf.lfFaceName, (LPCTSTR)GetToken(str, ",")); DeleteObject(); CreateFontIndirect(&lf); fontColor=atol((LPCTSTR)str); } 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; } void CAutoFont::GetFontFromDialog(CFont *f, DWORD *color, CDC *pPrinterDC, CWnd *pParentWnd) { LOGFONT tlf; if (f==NULL) tlf=lf; else f->GetLogFont(&tlf); CFontDialog dlg(&tlf, CF_EFFECTS | CF_SCREENFONTS, pPrinterDC, pParentWnd); dlg.m_cf.rgbColors=fontColor; if (dlg.DoModal()==IDOK) { dlg.GetCurrentFont(&lf); DeleteObject(); CreateFontIndirect(&lf); f=(CFont *)this; color=&dlg.m_cf.rgbColors; SetFontColor(dlg.m_cf.rgbColors); } } void CAutoFont::SetFontColor(COLORREF color) { fontColor=color; if (hDC!=NULL) ::SetTextColor(hDC, color); } COLORREF CAutoFont::GetFontColor() { return fontColor; } void CAutoFont::SetDC(HDC dc) { hDC=dc; }