MFC - CDC - DrawText 设置行高

MFC - CDC - DrawText 设置行高

#include <afxwin.h>
//hdc:要在其中绘图的一个设备场景的句柄
//str:欲描绘的文本字串
//count:欲描绘的字符数量。如果要描绘整个字串(直到空中止符),则可将这个参数设为-1
//rect:指定用于绘图的一个格式化矩形(采用逻辑坐标)
//flags:一个标志位数组,决定了以何种形式执行绘图,如DT_LEFT|DT_WORDBREAK|DT_EXPANDTABS|DT_TABSTOP| DT_EDITCONTROL| DT_NOPREFIX
//dtp:这个结构包含了附加的绘图参数,如tab键的宽度
//lineHeight:行高
void MyDrawText(HDC hdc,LPWSTR str,INT count,LPRECT rect,UINT flags,LPDRAWTEXTPARAMS dtp,float* lineHeight=NULL)
{	
	int fontHeight;	//字体高度	
	TEXTMETRICW tm;	
	GetTextMetricsW(hdc, &tm);
	if (flags & DT_EXTERNALLEADING)
		fontHeight = tm.tmHeight + tm.tmExternalLeading;
	else
		fontHeight = tm.tmHeight;
		
	float lh=lineHeight?*lineHeight:fontHeight;	//行高
					
	BOOL invert_y = FALSE;
	if (GetGraphicsMode(hdc) == GM_COMPATIBLE)
	{
		SIZE window_ext, viewport_ext;
		GetWindowExtEx(hdc, &window_ext);
		GetViewportExtEx(hdc, &viewport_ext);
		if ((window_ext.cy > 0) != (viewport_ext.cy > 0))
			invert_y = TRUE;
	}
	
	CRect line=rect;	//每行的方框
	line.bottom=line.top+fontHeight;	//首行
	while(line.bottom<=rect->bottom)
	{
		DrawTextExW(hdc,str,count,line,flags,dtp);	//每次在行方框中绘制,即每次绘制一行
		str += dtp->uiLengthDrawn;	//uiLengthDrawn 是已绘制了多少字符
		count -= dtp->uiLengthDrawn;
		if(invert_y)
		{			
			line.top -= lh;
			line.bottom -= lh;			
		}
		else
		{
			line.top += lh;		//移动方框
			line.bottom += lh;			
		}
	}
}
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值