首页 > 居家养花

createfont hfont createfont UTF8

basefont.createfont设置字体无效

字体文件路径不正确、字体文件格式不受支持、字体名称不正确等。

1、字体文件路径不正确:在使用BaseFont.createFont()方法时,要指定字体文件的正确路径。如路径不正确,该方法将无法找到字体文件,从而无法设置字体。

2、字体文件格式不受支持:BaseFont.createFont()方法仅支持一些特定格式的字体文件,如TrueType字体和OpenType字体等。如使用不受支持的字体文件格式,该方法将无法正确解析字体文件,而无法设置字体。

3、字体名称不正确:在使用BaseFont.createFont()方法时,要指定正确的字体名称。如字体名称不正确,该方法将无法找到对应的字体文件,而无法设置字体。

vb drawtext怎样设置字体

下面是个例子:

PrivateDeclareFunctionSelectObjectLib”gdi32″(ByValhdcAsLong,ByValhObjectAsLong)AsLong

PrivateDeclareFunctionGetStockObjectLib”gdi32″(ByValnIndexAsLong)AsLong

PrivateDeclareFunctionGetObjectLib”gdi32″Alias”GetObjectA”(ByValhObjectAsLong,ByValnCountAsLong,lpObjectAsLOGFONT)AsLong

PrivateDeclareFunctionDeleteObjectLib”gdi32″(ByValhObjectAsLong)AsLong

PrivateDeclareFunctionCreateFontIndirectLib”gdi32″Alias”CreateFontIndirectA”(lpLogFontAsLOGFONT)AsLong

PrivateDeclareFunctionDrawTextLib”user32″Alias”DrawTextA”(ByValhdcAsLong,ByVallpStrAsString,ByValnCountAsLong,lpRectAsRECT,ByValwFormatAsLong)AsLong

PrivateConstSYSTEM_FONT=13

PrivateConstLF_FACESIZE=32

PrivateTypeLOGFONT

lfHeightAsLong

lfWidthAsLong

lfEscapementAsLong

lfOrientationAsLong

lfWeightAsLong

lfItalicAsByte

lfUnderlineAsByte

lfStrikeOutAsByte

lfCharSetAsByte

lfOutPrecisionAsByte

lfClipPrecisionAsByte

lfQualityAsByte

lfPitchAndFamilyAsByte

lfFaceName(1ToLF_FACESIZE)AsByte

EndType

PrivateTypeRECT

LeftAsLong

TopAsLong

RightAsLong

BottomAsLong

EndType

PrivateSubCommand1_Click()'点击Command1运行

DimofontAsLong,nfontAsLong

DimlfAsLOGFONT,rAsRECT

DimsAsString

ofont=SelectObject(Picture1.hdc,GetStockObject(SYSTEM_FONT))'获取Picture1的当前字体对象

GetObjectofont,Len(lf),lf'从字体对象中获取字体信息

lf.lfHeight=lf.lfHeight*3'字体扩大三倍(你可以自己改其他的)

nfont=CreateFontIndirect(lf)'重新建立字体对象

ofont=SelectObject(Picture1.hdc,nfont)'替换Picture1中的字体对象

s=”123你好abc”'要显示的文字

r.Left=0'此四行是设置要显示文字的区域范围(即整个Picture1)

r.Top=0

r.Right=Picture1.ScaleWidth\15

r.Bottom=Picture1.ScaleHeight\15

DrawTextPicture1.hdc,s,-1,r,0'显示文字

nfont=SelectObject(Picture1.hdc,ofont)'把Picture1的字体恢复为原来的

DeleteObjectnfont'删除新建的字体对象

EndSub

vc++ 为什么第二次调用createfontindirect会产生assertion

VC中的任何资源,包括字体、画笔、画刷、DC等,都不可以在同一个变量上二次创建。

如果需要二次创建,必须将前次的创建销毁才可以。

以CFont为例:

CFontf1;

LOGFONTlf={20,20,20,20,20,20};

f1.CreateFontIndirect(&lf);

f1.DeleteObject();//先销毁,不销毁就会二次创建失败

lf.lfWidth=30;

f1.CreateFontIndirect(&lf);

另外注意,字体资源必须在DC之外才可以*作,如果通过SelectObject放入了一个DC中,必须先释放出来再销毁,否则销毁就会失败。

本文链接:http://www.yangwm.com/html/87965304.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件举报,一经查实,本站将立刻删除。