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

http://topic.csdn.net/t/20030509/10/1759362.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。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值