|
显示空心字的关键是使用路径。举例如下: 空心字 在开始一个路径前,我们先调用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); } 其他颜色的边我想就是一个大一点的没有填充的空心字,当然你选择的笔的颜色就是你的边的颜色了。
|
|
|