我要用OD修改basefont.createfonttindirect函数的字符集,应该改哪里?

CreateFont_百度百科
CreateFont
本词条缺少信息栏、名片图,补充相关内容使词条更完整,还能快速升级,赶紧来吧!
CreateFont函数的作用是创建一种有特殊性的逻辑字体,此逻辑字体可以在后面被任何设备选择。
CreateFont函数功能
函数原型:
HFONT CreateFont(
int nHeight, // logical height of font height
int nWidth, // logical average character width
int nEscapement, // angle of escapement
int nOrientation, // base-line orientation angle
int fnWeight, // font weight
DWORD fdwItalic, // italic attribute flag
DWORD fdwUnderline, // underline attribute flag
DWORD fdwStrikeOut, // strikeout attribute flag
DWORD fdwCharSet, // character set identifier
DWORD fdwOutputPrecision, // output precision
DWORD fdwClipPrecision, // clipping precision
DWORD fdwQuality, // output quality
DWORD fdwPitchAndFamily, // pitch and family
LPCTSTR lpszFace // pointer to typeface name string
CreateFont参数
1、nHeight:指定字体的字符单元或字符的逻辑单位高度,字符的高度值(也被称为em高度)是指字符单元高度值减去内部标头值。字体映射器以如下方式解释nHeight指定的值,各值含义为:
&0:字体映射器转换这个值以设备单位,并和已有字体的单元高度相匹配。
0:字体映射器转换在选择匹配时用一个缺省的高度值。
&0:字体映射器转换这个值到设备单位,并将它的绝对值和已有字体的字符高度相匹配。
比较所有的高度,字体映射器选择不超过要求大小的最大字体。
此映射当字体第一次被使用时发生。
对于MM_TEXT映射方式,可以用下面的公式为一种指定了点大小的字体确定高度:
nHeight=-MulDiv(PointSize, GetDeviceCaps(hDC, LOGPIXELSY),72)
2、nWidth:指定所要求字体的字符的逻辑单位的平均宽度。如果此值为0,字体映射器选择一个closest match值,closest match值是由比较当前设备的特征系数与可使用字体的数字化特征系数之差的绝对值而确定的。
3、nEscapement:指定移位向量和设备X轴之间的一个角度,以十分之一度为单位。移位向量平行于正文行的基线。
Windows NT:当图形设备设置为GM_ADVANCED时,可以不依赖字符串的字符的定位角而指定字符串的移位角。
当图形模式被设置为GM_COMPATIBLE时,nEscapement同时指定移位角和定位角,可以设置nEscapement和nOrientation为相同的值。
Windows 95:nEscapement同时指定移位角和定位角,可设置nEscapement和nOrientation为相同的值。
4、nOrientation:指定每个字符的基线和设备X轴之间的角度。
5、FnWeight:在0到1000之间指定字体的权值,如400表示标准体,700表示黑(粗)体,如果此值为0,则使用缺省的权值。
FW_DONTCARE:0;FW_THIN;100;FW_EXTRALIGHT;200;FW_ULTRALIGHT;200;FW_LIGHT;300;
FW_NORMAL:400;FW_MEDIUM;500;FW_SEMIBOLD;600;FW_DEMIBOLD;600;FW_BOLD:700;FW_EXTRABOLD;800;FW_BLACK;900。
6、fdwItalic:如果设置为TRUE,则字体设置为斜体。
7、fdwUnderline:如果设置为TRUE,则字体增加下划线。
8、fdwStrikeOut:如果设置为TRUE,则字体增加删除线。
9、fdwCharSet:指定,下列值是预定义的:
ANSI_CHARSET; BALTIC_CHARSET; CHINESEBIG5_CHARSET; DEFAULT_CHARSET;
EASTEUROPE_CHARSET; GB2312_CHARSET; GREEK_CHARSET; HANGUL_CHARSET; MAC_CHARSET; OEM_CHARSET; RUSSIAN_CHARSET; SHIFTJIS_CHARSET;
SYMBOL_CHARSET; TURKISH_CHARSET。
韩国Windows:JOHAB_CHARSET;
Windows:HEBREW_CHARSSET; ARABIC_CHARSET
泰国Windows:THAI_CHARSET
OEM_CHARSET指定的与操作系统有关。
可以使用DEFAULT_CHARSET值来允许字体的名字和大小来充分描述逻辑字体。如果指定的字体名不存在,任何字符集的字体都可以替代指定的字体,所以应该小心地用DEFAULT_CHARSET来避免不期望的结果出现。
操作系统中存在其他字符集的字体。如果一个应用程序用一种未知字符集的字体,则应用程序不会试图去翻译或解释用那种字体写出来的字符串。
在字体映射过程中此参数很重要。为确保获得一致的结果,指定一个特殊的。如果在lpszFace参数中指定了一个字体名,确定fdwCharSet值与由lpszFace指定的字体字符集是否匹配。
10、fdwOutputPrecision:指定输出精度,输出精度义输出与要求的字体高度、宽度、字符定位、移位、字符间距和字符类型的匹配程序,它可取下列值之一:
OUT_CHARACTER_PRECIS;未用。
OUT_DEFAULT_PRECIS:指定缺省的字体映射器状态。
OUT_DEVICE_PRECIS:指示字体映射器在当系统里有多种字体使用同一个字体使用同一个名字时选择一种设备字体。
OUT_OUTLINE_PRCIS:在Windows NT中此值指示字体映射器从TrueType和其他基于边框的字体中选择。
OUT_RASTER_PRECIS:指示字体映射器在当系统里有多种字体使用同一个名字时选择一种。
OUT_STRING_PRECIS:此值没有被字全映射器使用,但是当扫描字体被列举时作为返回值。
OUT_STROKE_PRECIS:在Windows NT中此值没有被字体映射器使用,但是当、其他基于边框的字体和向量字体被列举时,作为返回值。
Windows 95:此值没有被字体映射器使用,但是当TrueType字体或向量字体被列举时,作为返回值。
OUT_TT_ONLY_PRECIS:指示字体映射器仅从TrueType字体中选择,如果系统中没有安装TrueType字体,则字体映射返回缺省状态。、
OUT_TT_PRECIS:指示字体映射器在当系统里有多种同名的字体时选择一种TrueType字体。
当操作系统含有多种与指定名字同名的字体时,应用程序可以使用OUT_DEVICE_PRECIS,OUT_RASTER_PRECIS和OUT_TT_PRECIS值来控制字体映射器如何选择一种字体,例如,如果操作系统含有名字Symbol的光栅和TrueType两种字体,指定OUT_TT_PRECIS使字体映射器选择TrueType方式。指定OUT_TT_ONLY_PRECIS使字体映射器选择一种TrueType字体,尽管这会给TrueType字体换一个名字。
11、fdwClipPrecision;指定裁剪精度,裁剪精度定义如何裁剪部分超出裁剪区的字符,它可取一个或多个下列值:
CLIP_DEFAULT_PRECIS:指定缺省裁剪状态。CLIP_CHARACTER_PRECIS:未用。
CLIP_STROKE_PRECIS:未被字体映射器使用,但是当、向量字体或TrueType字体被列举时作为返回值。在Windows环境下,为保证兼容性,当列举字体时这个值总被返回。
CLIP_MASK:未用。CLIP_EMBEDDED:要使用嵌入式只读字体必须使用此标志。
CLIP_LH_ANGLES:当此值被使用时,所有字体的旋转依赖于的定位是朝左的还是朝右的。
如果未使用此值,设备字体总是逆时针方向旋转,但其他字体的旋转依赖于坐标系统的定向。要得到更多关于坐标系统定向的信息,参见参数orientation。
CLIP_TT_ALWAYS:未用。
12、fdwQuality:指向输出质量,输出质量定义GDI如何仔细地将逻辑字体属性与实际物理字体属性相匹配。它可取下列值之一:
DEFAULT_QUALITY:字体的外观不重要。
DRAFT_QUALITY:字体外观的重要性次于使用PROOF_QUALITY时,对GDI,缩放比例是活动的,这意味着多种字体大小可供选择,但质量可能不高,如果有必要,粗体、斜体、下划线、strikeout字体可被综合起来使用。
PROOF_QUALITY:字符质量比精确匹配逻辑字体字体属性更重要。对GDI扫描字体,缩放比例是活动的,并选择最接近的大小。尽管当使用PROOF_QUALITY时,选择字体大小并不完全匹配,但字体的质量很高,并没有外观上的变形。如果有必要,粗体、斜体、下划线、strikeout字体可被综合起来使用。
13、fdwPitchAndFamily:指定字体间距和字体族,低端二位指定字体的字符间距,它可取下列值之一:
DEFAULT_PITCH;FIXED_PITCH; VARIABLE_PITCH
高端四位指定字体族,可取下列值之一:
FF_DECORATIVE:新奇的字体,如老式英语(Old English)。FF_DONTCARE:不关心或不知道。
FF_MODERN:笔划宽度固定的字体,有或者无衬线。如Pica、Elite和Courier New。
FF_ROMAN:笔划宽度变动的字体,有衬线。如MS Serif。
FF_SCRIPT:设计成看上去象的字体。如Script和Cursive。
FF_SWISS:笔划宽度变动的字体,无斜线。如MS Sans Serif。
应用程序可以用运算符OR将字符间距和字体族组合起来给fdwPitchAndFamily赋值。
字体族描述一种字体的普通外观,当所有的精确字样都不能使用时,可用它们来指定字体。
14、lpszface:指向指定字体的字样名的、以\0结束的字符串,字符串的长度不能超过32个字符(包括字符\0),函数EnumFontFamilies可用来列举所有当前可用字体的字样名。
如果lpszFace为NULL或指向一个空串,GDI使用能匹配其他属性的第一种字体。
返回值:如果成功,返回值是一种逻辑字体句柄;如果函数调用失败,返回值为NULL。
Windows NT:若想获得更多错误信息,请调用GetLastError函数。
备注:当一种字体不再使用时,可用来删除。
为保护那些提供字体给Windows和Windows NT的卖主的版权,基于Win32的应用程序总是列出所选择字体的准确名字。由于不同的系统会使用不同的字体,不要认为所选择字体就是要求的字体。例如,如果要求名叫Palatino的字体,但系统没提供那样一种字体,则字体映射器将会以一种不同名但有相似属性的字体取而代之。系统总是将用户选择的字体名报告出来。
速查:Windows NT:3.1及以上版本;Windows:95及以上版本;Windows CE:不支持;头文件:wingdi.h;库文件:gdi32.lib;Unicode:在Windows NT环境下以Unicode和ANSI两种方式实现。
CreateFontVC++示例
hFont=CreateFont(10,10,0,0,FW_THIN,true,false,false,
CHINESEBIG5_CHARSET,OUT_CHARACTER_PRECIS,
CLIP_CHARACTER_PRECIS,DEFAULT_QUALITY,
FF_MODERN,&宋体&);
SelectObject(hDC,hFont)
CreateFont易语言声明
.DLL命令 CreateFont, 整数型, &gdi32.dll&, &CreateFontA&, 公开, HFONT WINAPI CreateFont
.参数 nHeight, 整数型, , int nHeight ,
.参数 nWidth, 整数型, , int nWidth ,
.参数 nEscapement, 整数型, , int nEscapement ,
.参数 nOrientation, 整数型, , int nOrientation ,
.参数 fnWeight, 整数型, , int fnWeight ,
.参数 fdwItalic, 整数型, , DWORD fdwItalic ,
.参数 fdwUnderline, 整数型, , DWORD fdwUnderline ,
.参数 fdwStrikeOut, 整数型, , DWORD fdwStrikeOut ,
.参数 fdwCharSet, 整数型, , DWORD fdwCharSet ,
.参数 fdwOutputPrecision, 整数型, , DWORD fdwOutputPrecision ,
.参数 fdwClipPrecision, 整数型, , DWORD fdwClipPrecision ,
.参数 fdwQuality, 整数型, , DWORD fdwQuality ,
.参数 fdwPitchAndFamily, 整数型, , DWORD fdwPitchAndFamily ,
.参数 lpszFace, 文本型, , LPCTSTR lpszFace ,
CreateFontVB声明
Private Declare Function CreateFontA Lib &gdi32& Alias &CreateFontA& (ByVal H As Long, ByVal W As Long, ByVal E As Long, ByVal O As Long, ByVal W As Long, ByVal I As Long, ByVal u As Long, ByVal S As Long, ByVal C As Long, ByVal OP As Long, ByVal CP As Long, ByVal Q As Long, ByVal PAF As Long, ByVal F As String) As Long二次元同好交流新大陆
扫码下载App
汇聚2000万达人的兴趣社区下载即送20张免费照片冲印
扫码下载App
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!&&|&&
LOFTER精选
网易考拉推荐
用微信&&“扫一扫”
将文章分享到朋友圈。
用易信&&“扫一扫”
将文章分享到朋友圈。
CreateFontIndirect(
& const p1: TLogFont {字体结构}
): HFONT;& & & & & & {返回新字体指针}
//TLogFont 是 tagLOGFONTA 结构的重定义:
tagLOGFONTA = packed record
& lfHeight: L& & & {字体高度}
& lfWidth: L& & &
{字体平均宽度}
& lfEscapement: L& {角度, 单位是 1/10 度}
& lfOrientation: L {基线角度}
& lfWeight: L& & & {粗体, 取值: 0-1000}
& lfItalic: B& & & &
& lfUnderline: B& & & {下划线}
& lfStrikeOut: B& & & {删除线}
& lfCharSet: B& & & & {字符集}
& lfOutPrecision: B&
{输出精度}
& lfClipPrecision: B& {剪裁精度}
& lfQuality: B& & & & {输出质量}
& lfPitchAndFamily: B {间距及字族}
& lfFaceName: array[0..LF_FACESIZE - 1] of AnsiC {字样名称}
procedure TForm1.FormMouseUp(Sender: TO Button: TMouseB
& Shift: TShiftS X, Y: Integer);
& FontInfo: TLogF {声明字体结构}
& FH1,FH2: HFONT;& &
{声明字体句柄}
& str = '万一的 Delphi 博客';
& {定义字体特征}
& FontInfo.lfHeight := 0;& &
{赋值 0, 系统自动给一个值}
& FontInfo.lfWidth := 0;& & & {赋值 0, 系统自动给一个值}
& FontInfo.lfEscapement := 0; {无角度}
& FontInfo.lfWeight := 500;&
{中等加粗}
& FontInfo.lfItalic := 0;& &
& FontInfo.lfUnderline := 0;& {无下划线}
& FontInfo.lfStrikeOut := 0;& {无删除线}
& FontInfo.lfFaceName := '宋体';
& FH1 := CreateFontIndirect(FontInfo);
& FH2 := SelectObject(Canvas.Handle, FH1);
& {用 CreateFontIndirect 建立逻辑字体; 用 SelectObject 选人设备; 并返回字体句柄}
& TextOut(Canvas.Handle, X, Y, str, Length(str));
& DeleteObject(FH1);
& DeleteObject(FH2);
//例2: 扁字
procedure TForm1.FormMouseUp(Sender: TO Button: TMouseB
& Shift: TShiftS X, Y: Integer);
& FontInfo: TLogF
& FH1,FH2: HFONT;
& str = '万一的 Delphi 博客';
& FontInfo.lfHeight := 0;& &
& FontInfo.lfWidth := 12;& &
{只修改了此处}
& FontInfo.lfEscapement := 0;
& FontInfo.lfWeight := 500;&
& FontInfo.lfItalic := 0;& &
& FontInfo.lfUnderline := 0;&
& FontInfo.lfStrikeOut := 0;&
& FontInfo.lfFaceName := '宋体';
& FH1 := CreateFontIndirect(FontInfo);
& FH2 := SelectObject(Canvas.Handle, FH1);
& TextOut(Canvas.Handle, X, Y, str, Length(str));
& DeleteObject(FH1);
& DeleteObject(FH2);
//例3: 长字
procedure TForm1.FormMouseUp(Sender: TO Button: TMouseB
& Shift: TShiftS X, Y: Integer);
& FontInfo: TLogF
& FH1,FH2: HFONT;&
& str = '万一的 Delphi 博客';
& FontInfo.lfHeight := 32;& & {修改了此处}&
& FontInfo.lfWidth := 12;& &
& FontInfo.lfEscapement := 0;
& FontInfo.lfWeight := 500;&
& FontInfo.lfItalic := 0;& &
& FontInfo.lfUnderline := 0;&
& FontInfo.lfStrikeOut := 0;&
& FontInfo.lfFaceName := '宋体';
& FH1 := CreateFontIndirect(FontInfo);
& FH2 := SelectObject(Canvas.Handle, FH1);
& TextOut(Canvas.Handle, X, Y, str, Length(str));
& DeleteObject(FH1);
& DeleteObject(FH2);
//例4: 旋转
procedure TForm1.FormMouseUp(Sender: TO Button: TMouseB
& Shift: TShiftS X, Y: Integer);
& FontInfo: TLogF
& FH1,FH2: HFONT;& & &
& str = '万一的 Delphi 博客';
& FontInfo.lfHeight := 0;& & &
& FontInfo.lfWidth := 0;& &
& FontInfo.lfEscapement := 450; {修改了此处}
& FontInfo.lfWeight := 500;&
& FontInfo.lfItalic := 0;& &
& FontInfo.lfUnderline := 0;&
& FontInfo.lfStrikeOut := 0;&
& FontInfo.lfFaceName := '宋体';
& FH1 := CreateFontIndirect(FontInfo);
& FH2 := SelectObject(Canvas.Handle, FH1);
& TextOut(Canvas.Handle, X, Y, str, Length(str));
& DeleteObject(FH1);
& DeleteObject(FH2);
//一个利用角度的示例:
procedure TForm1.FormPaint(Sender: TObject);
& FontInfo: TLogF
& FH1,FH2: HFONT;
& x,y,i: I
& str = '万一的 Delphi 博客';
& FontInfo.lfHeight := 0;
& FontInfo.lfWidth := 0;& &
& FontInfo.lfEscapement := 0;
& FontInfo.lfWeight := 1000;&
& FontInfo.lfItalic := 0;& &
& FontInfo.lfUnderline := 0;&
& FontInfo.lfStrikeOut := 0;&
& FontInfo.lfFaceName := '宋体';
& x := ClientWidth div 2;
& y := ClientHeight div 2;
& SetBkMode(Canvas.Handle, TRANSPARENT);
& while i&360 do
& & FontInfo.lfEscapement := i * 10;
& & FH1 := CreateFontIndirect(FontInfo);
& & FH2 := SelectObject(Canvas.Handle, FH1);
& & TextOut(Canvas.Handle, X, Y, str, Length(str));
& & Inc(i,10);
& DeleteObject(FH1);
& DeleteObject(FH2);
用微信&&“扫一扫”
将文章分享到朋友圈。
用易信&&“扫一扫”
将文章分享到朋友圈。
历史上的今天
在LOFTER的更多文章
loftPermalink:'',
id:'fks_',
blogTitle:'WinAPI: CreateFontIndirect - 根据字体结构建立逻辑字体',
blogAbstract:''
{list a as x}
{if x.moveFrom=='wap'}
{elseif x.moveFrom=='iphone'}
{elseif x.moveFrom=='android'}
{elseif x.moveFrom=='mobile'}
${a.selfIntro|escape}{if great260}${suplement}{/if}
{list a as x}
推荐过这篇日志的人:
{list a as x}
{if !!b&&b.length>0}
他们还推荐了:
{list b as y}
转载记录:
{list d as x}
{list a as x}
{list a as x}
{list a as x}
{list a as x}
{if x_index>4}{break}{/if}
${fn2(x.publishTime,'yyyy-MM-dd HH:mm:ss')}
{list a as x}
{if !!(blogDetail.preBlogPermalink)}
{if !!(blogDetail.nextBlogPermalink)}
{list a as x}
{if defined('newslist')&&newslist.length>0}
{list newslist as x}
{if x_index>7}{break}{/if}
{list a as x}
{var first_option =}
{list x.voteDetailList as voteToOption}
{if voteToOption==1}
{if first_option==false},{/if}&&“${b[voteToOption_index]}”&&
{if (x.role!="-1") },“我是${c[x.role]}”&&{/if}
&&&&&&&&${fn1(x.voteTime)}
{if x.userName==''}{/if}
网易公司版权所有&&
{list x.l as y}
{if defined('wl')}
{list wl as x}{/list}如何调用CreateFontIndirect()
[问题点数:40分]
如何调用CreateFontIndirect()
[问题点数:40分]
不显示删除回复
显示所有回复
显示星级回复
显示得分回复
只显示楼主
2010年11月 总版技术专家分月排行榜第二2010年9月 总版技术专家分月排行榜第二2010年8月 总版技术专家分月排行榜第二
2010年7月 总版技术专家分月排行榜第三
2010年11月 总版技术专家分月排行榜第二2010年9月 总版技术专家分月排行榜第二2010年8月 总版技术专家分月排行榜第二
2010年7月 总版技术专家分月排行榜第三
2010年11月 总版技术专家分月排行榜第二2010年9月 总版技术专家分月排行榜第二2010年8月 总版技术专家分月排行榜第二
2010年7月 总版技术专家分月排行榜第三
2010年11月 总版技术专家分月排行榜第二2010年9月 总版技术专家分月排行榜第二2010年8月 总版技术专家分月排行榜第二
2010年7月 总版技术专家分月排行榜第三
2010年11月 总版技术专家分月排行榜第二2010年9月 总版技术专家分月排行榜第二2010年8月 总版技术专家分月排行榜第二
2010年7月 总版技术专家分月排行榜第三
2010年11月 总版技术专家分月排行榜第二2010年9月 总版技术专家分月排行榜第二2010年8月 总版技术专家分月排行榜第二
2010年7月 总版技术专家分月排行榜第三
2010年11月 总版技术专家分月排行榜第二2010年9月 总版技术专家分月排行榜第二2010年8月 总版技术专家分月排行榜第二
2010年7月 总版技术专家分月排行榜第三
本帖子已过去太久远了,不再提供回复功能。CreateFontIndirect function (Windows)
Windows desktop applications
Expand the table of content
The topic you requested is included in another documentation set. For convenience, it's displayed below. Choose Switch to see the topic in its original location.
CreateFontIndirect function
The CreateFontIndirect function creates a logical font that has the specified characteristics. The font can subsequently be selected as the current font for any device context.
HFONT CreateFontIndirect(
_In_ const LOGFONT *lplf
Parameters
A pointer to a
structure that defines the characteristics of the logical font.
Return value
If the function succeeds, the return value is a handle to a logical font.
If the function fails, the return value is NULL.
The CreateFontIndirect function creates a logical font with the characteristics specified in the
structure. When this font is selected by using the
function, GDI's font mapper attempts to match the logical font with an existing physical font. If it fails to find an exact match, it provides an alternative whose characteristics match as many of the requested characteristics as possible.
To get the appropriate font on different language versions of the OS, call
with the desired font characteristics in the
structure, retrieve the appropriate typeface name, and create the font using
or CreateFontIndirect.
When you no longer need the font, call the
function to delete it.
The fonts for many East Asian languages have two typeface names: an English name and a localized name.
and CreateFontIndirect take the localized typeface name only on a system locale that matches the language, while they take the English typeface name on all other system locales. The best method is to try one name and, on failure, try the other. Note that , , and
return the English typeface name if the system locale does not match the language of the font.
The font mapper for , CreateFontIndirect, and
recognizes both the English and the localized typeface name, regardless of locale.
For an example, see .
Requirements
Minimum supported client
Windows 2000 Professional [desktop apps only]
Minimum supported server
Windows 2000 Server [desktop apps only]
Wingdi.h (include Windows.h)
Unicode and ANSI names
CreateFontIndirectW (Unicode) and CreateFontIndirectA (ANSI)
IN THIS ARTICLE
Was this page helpful?
Additional feedback?
1500 characters remaining
Thank you!
We appreciate your feedback.

我要回帖

更多关于 createfont 字体大小 的文章

 

随机推荐