error2BeginPath和EndPath之间的TextOut无法显示

并不是所有字体,由TextOut函数输出都能形成路径,
通常像宋体、楷体_GB2312等TrueType类型的字体才可以,

有一个简单的判断方法,当你打开字体选择对话框时,只有字体
前有T符号标记的,才是TrueType字体,当然在CFontDialog中可以
指定只显示TrueType字体!

所以以下代码经测试通过!
void CTextView::OnDraw(CDC* /*pDC*/)
{
    CTextDoc* pDoc = GetDocument();
    ASSERT_VALID(pDoc);
    if (!pDoc)
        return;

    // TODO: 在此处为本机数据添加绘制代码

    CClientDC dc(this);

    CString zec;
    zec.LoadStringW(IDS_STRINGzec01);
    CSize cs = dc.GetTextExtent(zec);
    CRect rect;
    rect.left = 0;
    rect.top = 50;
    rect.right = 50 + cs.cx;
    rect.bottom = 50 + cs.cy;
    dc.TextOut(0,50,zec);
    dc.BeginPath();
    dc.Rectangle(0,50,cs.cx,50+cs.cy);         //划定一个区域作为剪切区域
    dc.EndPath();
    dc.SelectClipPath(RGN_DIFF);

    for (int i=0;i<100;i++)
    {
        dc.MoveTo(0,i*5);
        dc.LineTo(500,i*5);
    }
    for (int j=0;j<100;j++)
    {
        dc.MoveTo(j*5,0);
        dc.LineTo(j*5,600);
    }
}

原文地址:https://www.cnblogs.com/forlina/p/2124607.html