前面我们介绍了字体相关的基础知识,接下来我们介绍一下在Symbian OS中如何使用并绘画字体。
Symbian OS 中提供了几个类用来在画字体时使用,CFont, CFbsFont, CBitmapFont, 其中CFont是抽象类,是CFbsFont和CBitmapFont的基类,如下图所示:
CBitmapFont可以访问和使用位图字体,也可以处理开放字体。而CFbsFont可以理解为处理Symbian自带的字体,由FBserver管理,主要用于在屏幕上显示。
前面介绍过,无论是画图还是显示字体,都需要用GC在相应的设备上操作。下面的步骤表述了如何在设备上选择和绘画字体:
l 声明一个CFont对象指针
l 设置你想使用的字体规范(TFontSpec),即typeface, 字形,字号或大小等
l 用设备对象来获取字体并赋值给CFont对象指针,一般使用GetNearestFont…系列函数
l 设置GC所使用的字体为得到的字体,用UseFont函数
l 用GC的DrawText方法来绘画字体
l GC绘画结束后,释放所选字体,用DiscardFont
l 同时设备对象也要释放字体
下面的代码段就是在设备上绘画字体。
Void DoCmdDrawText ()
{
//创建GC,用来绘画操作
CFBsBitGc *iFbsBitGc = CFbsBitGc::NewL();
//创建设备
CFbsScreenDevice* iFbsScreenDevice=CFbsScreenDevice::NewL(0, EColor256);
iFbsBitGc->Activate(iFbsScreenDevice);
// typeface name
_LIT(KMyFontName,"Swiss");
CFont* myFont;
// to get smallest Swiss font
TFontSpec myFontSpec(KMyFontName,1);
//Set font style what you want,设置字形
//加粗
myFontSpec.iFontStyle.SetStrokeWeight(EStrokeWeightBold);
//斜体
myFontSpec.iFontStyle.SetPosture(EPostureItalic);
//阳文
myFontSpec.iFontStyle.SetEffects(FontEffect::EEmbossed,ETrue);
//获取字体
iFbsScreenDevice->GetNearestFontToMaxHeightInTwips(myFont, myFontSpec, 220);
//选择字体
iFbsBitGc->UseFont(myFont);
//设置画笔颜色为红色
iFbsBitGc->SetPenColor(KRgbRed);
_LIT(KText, "This is a Test!");
TBufC<20> text (KText);
//绘制字体
iFbsBitGc ->DrawText(KText, TPoint(20, 120));
iFbsScreenDevice->Update();
// Discard and destroy the font
iFbsBitGc ->DiscardFont();
fbsdev->ReleaseFont(myFont);
delete iFbsScreenDevice;
delete iFbsBitGc;
}
需要说明的是,获取字体不仅可以使用设备对象,Symbian还提供了CFbsTypefaceStore类, 使用此类,也可以获取你想要的字体,方法也很简单,用下面的者两句代替上面用设备对象来获取字体的那句即可:
//创建CFbsTypefaceStore对象
CFbsTypefaceStore *facestore=CFbsTypefaceStore::NewL(iFbsScreenDevice);
facestore->GetNearestFontToDesignHeightInPixels(myFont,myFontSpec);
他们的效果是完全一样的,因为在CFbsScreenDevice中,有一个CFbsTypefaceStore对象,CFbsScreenDevice所有GetNearestFont…系列函数都是委派给了CFbsTypefaceStore对象的相应方法。
本文介绍了SymbianOS中字体的使用与绘制方法,包括CFont、CFbsFont及CBitmapFont等类的应用,详细讲解了通过GC进行字体绘画的具体步骤,并提供了代码示例。
1482

被折叠的 条评论
为什么被折叠?



