热情软件屋

 

怎样显示空心字


编号:QA002766
建立日期: 2000年3月23日 最后修改日期:2000年3月23日
所属类别:

yzfil:
    怎样显示空心字,还有我想给字加上一个其它颜色的边?请问各位大虾怎么办?如果我要显示阳文阴文呢?就象在Word中一样。thank in advance.

回答:

    摘自北京理工大学BBS
    显示空心字的关键是使用路径。举例如下:
    空心字
    在开始一个路径前,我们先调用CDC类的成员函数BeginPath,然后调用一系列的输出函数,在完成绘制之后,我们可以调用CDC类的成员函数EndPath。在完成一个路径之后,我们可以调用StrokePath来绘制该路径。为了简单起见,我们仅给出应用程序的OnPaint成员函数。如下:
    // 应用程序主窗口的重绘函数
    void CMyWnd::OnPaint()
    {
    // 获得窗口的客户区设备上下文句柄
    CPaintDC dc(this);
    // 更改当前字体
    LOGFONT lf;
    dc.GetCurrentFont()->GetLogFont(&lf);
    CFont font;
    CFont *pOldFont; // 保存设备上下文最初使用的字体对象
    lf.lfCharSet=134;
    lf.lfHeight=-150;
    lf.lfHeight=-150;
    lf.lfWidth=0;
    strcpy(lf.lfFaceName, "隶书");
    font.CreateFontIndirect(&lf);
    pOldFont=dc.SelectObject(&font);
    dc.SetBkMode(TRANSPARENT);
    // 更改当前画笔
    CPen pen(PS_SOLID, 1, RGB(255, 0, 0));
    CPen *pOldPen;
    pOldPen=dc.SelectObject(&pen);
    // 开始一个路径
    dc.BeginPath();
    dc.TextOut(10, 10, "空心字");
    dc.EndPath();
    // 绘制路径
    dc.StrokePath();
    //也可以用dc.StrokeAndFillPath()函数来代替,不过该函数会
    //使用当前刷子填充路径的内部。
    //所以你有必要在前面产生自己的刷子,并在最后删除,就象下面
    //这样:
    // 更改当前刷子
    //CBrush br(HS_DIAGCROSS, RGB(0, 255, 255)), *pOldBrush;
    //pOldBrush=dc.SelectObject(&br);
    
    //pOldBrush=dc.SelectObject(&br);
    //dc.SelectObject(pOldBrush);
    // 恢复设备上下文的原有设置
    dc.SelectObject(pOldFont);
    dc.SelectObject(pOldPen);
    }
    其他颜色的边我想就是一个大一点的没有填充的空心字,当然你选择的笔的颜色就是你的边的颜色了。希望你能成功。

此问题由Gg回答。

 
把这个问题推荐给朋友
   
   
您的意见类别
您的名字
您的电子邮件
您的建议(请尽可能详细)
 
 

版权所有 1997-2008 热情软件屋
如果您有任何建议和意见, 请给我发个电子邮件 askpro@china-askpro.com
Web Designed by ZebraStudio