在指定区域内绘制文本

该博客介绍了如何在指定矩形区域内根据可用空间动态截取并绘制文本,当文本过长时,用省略号表示。通过创建一个函数`DrawTextInRect`,使用GDI函数`DrawText`和`DrawTextEx`计算文本尺寸并进行绘制,确保文本在指定区域内的适配展示。
摘要由CSDN通过智能技术生成

在某些情况下,显示文本的区域比较小,而显示的文本比较长,这时就需要截取部分文本,并以省略号的代替的形式来显示文本,下面这个函数是一个比较笨拙的处理方式:

int DrawTextInRect(HDC hDC, CString& strText,RECT& rect,UINT nFormat,CSize sizeMargin = CSize(0,0))
{
    //在指定区域以指定格式绘制文本
    //HDC hDC                绘制文本的DC句柄
    //CString& strText        绘制的文本
    //RECT& rect            绘制文本的区域
    //UINT nFormat            绘制文本的格式,与DT相同的设置
    //CSize sizeMargin        文本距离区域的边距
    //
    CString strTemp = strText;
    CRect rcTemp = 0;
    CRect rcDraw = rect;
    rcDraw.DeflateRect(sizeMargin.cx,sizeMargin.cy);//绘制文本的区域
    CDC* pDC = CDC::FromHandle(hDC);

    //是否垂直居中
    UINT nVCenter = DT_VCENTER & nFormat;
    if (nVCenter)
    {
        //计算当前设备字体高度
        TEXTMETRIC   tm;
        pDC->GetTextMetrics(&tm);
        int nFontHei

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值