vc学习(三)字体设置及映射模式

来源:互联网 发布:达内java培训费用 编辑:程序博客网 时间:2024/06/06 00:32
http://topic.csdn.net/t/20030509/10/1759362.html

http://topic.csdn.net/t/20050226/11/3808037.html
  • 让我受益匪浅。

首先按默认新建一个MFC单文档程序,然后开始设置映射模式,由于WM_Paint消息在调用OnDraw函数前会先调用OnPrepareDc函数,于是我们重载一下这个函数来设置映射模式。在CXXView类上右键类向导,在虚函数中选择OnPrepareDC函数,添加函数,然后开始编辑代码
void CtestView::OnPrepareDC(CDC* pDC, CPrintInfo* pInfo){CRect clientRect;GetClientRect(clientRect);pDC->SetMapMode(MM_ANISOTROPIC);pDC->SetWindowExt(400,450);pDC->SetViewportExt(clientRect.right,clientRect.bottom);pDC->SetViewportOrg(0,0);}


关于这几个函数的解释在本文开头部分的链接,SetMapMode是设置映射模式,  MM_ANISOTROPIC:逻辑单位转换成具有任意比例轴的任意单位,用SetWindowExtEx和SetViewportExtEx函数可指定单位、方向和比例。
CRect   clientRect; 
GetClientRect(clientRect);//取窗口物理尺寸(单位:像素) 
pDC-> SetMapMode(MM_ANISOTROPIC); 
pDC-> SetWindowExt(400,450);//窗口逻辑大小:400*450, 
pDC-> SetViewportExt(clientRect.right, clientRect.bottom);//设置视图大小(设备单位)
pDC-> SetViewportOrg(0,0);//设置窗口左上角为坐标系原点

添加函数TraceMetrics(CDC *pDC)
void CtestView::TraceMetrics(CDC *pDC){TEXTMETRIC tm;TCHAR szFaceName[100];pDC->GetTextMetrics(&tm);pDC->GetTextFace(99, szFaceName);TRACE("font = %s, tmHeight = %d, tmInternalLeading = %d,"" tmExternalLeading = %d\n", szFaceName, tm.tmHeight,tm.tmInternalLeading, tm.tmExternalLeading);}
GetTextMetrics函数取得被选进指定设备环境的字体字样名,GetTextMetrics函数获取当前字体信息。
编辑OnDraw
void CtestView::OnDraw(CDC* pDC){CFont fontTest1,fontTest2,fontTest3,fontTest4;fontTest1.CreateFont(50,0,0,0,400,FALSE,FALSE,0,ANSI_CHARSET,OUT_DEFAULT_PRECIS,CLIP_DEFAULT_PRECIS,DEFAULT_QUALITY,DEFAULT_PITCH | FF_SWISS,_T("Arial"));CFont *pOldFont = pDC->SelectObject(&fontTest1);TraceMetrics(pDC);pDC->TextOut(0,0,_T("this is Arial,default width"));fontTest2.CreateFont(50,0,0,0,400,FALSE,FALSE,0,ANSI_CHARSET,OUT_DEFAULT_PRECIS,CLIP_DEFAULT_PRECIS,DEFAULT_QUALITY,DEFAULT_PITCH | FF_SWISS,_T("Courier"));pDC->SelectObject(&fontTest2);TraceMetrics(pDC);pDC->TextOut(0,100,_T("this is Courier,default width"));fontTest3.CreateFont(50,10,0,0,400,FALSE,FALSE,0,ANSI_CHARSET,OUT_DEFAULT_PRECIS,CLIP_DEFAULT_PRECIS,DEFAULT_QUALITY,DEFAULT_PITCH | FF_SWISS,NULL);pDC->SelectObject(&fontTest3);TraceMetrics(pDC);pDC->TextOut(0,200,_T("this is generic Roman,variable width"));fontTest4.CreateFont(50,0,0,0,400,FALSE,FALSE,0,ANSI_CHARSET,OUT_DEFAULT_PRECIS,CLIP_DEFAULT_PRECIS,DEFAULT_QUALITY,DEFAULT_PITCH | FF_SWISS,_T("LinePrinter"));pDC->SelectObject(&fontTest4);TraceMetrics(pDC);pDC->TextOut(0,300,_T("this is LinePrinter,default width"));pDC->SelectObject(pOldFont);}

运行,ok。