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