http://topic.csdn.net/t/20030509/10/1759362.html
关于这几个函数的解释在本文开头部分的链接,SetMapMode是设置映射模式, MM_ANISOTROPIC:逻辑单位转换成具有任意比例轴的任意单位,用SetWindowExtEx和SetViewportExtEx函数可指定单位、方向和比例。
编辑OnDraw
运行,ok。
- 让我受益匪浅。
首先按默认新建一个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);//设置窗口左上角为坐标系原点
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。