大雀软件园

首页 软件下载 安卓市场 苹果市场 电脑游戏 安卓游戏 文章资讯 驱动下载
技术开发 网页设计 图形图象 数据库 网络媒体 网络安全 站长CLUB 操作系统 媒体动画 安卓相关
当前位置: 首页 -> 技术开发 -> 程序开发 -> 用"旋转字体"美化界面

用"旋转字体"美化界面

时间: 2021-07-31 作者:daque

怎样使本人安排的步调具备美丽和和睦的界面,是步调员间长久的话题。这边,笔者向您引见一种特殊大略的本领,使笔墨回旋起来。 这边的“回旋字体”指的是让一条龙字体的程度基线(baseline)转过确定的观点。正如您所看到的,回旋字领会爆发轻快、绚烂的视觉功效,不妨给观者以特出的设想,是一种卓有成效的表露绝技。 有一种很简单想到的方法不妨实行回旋字体,即开始天生笔墨的布点(位图),而后运用坐标回旋变幻天生新的位图再输入到屏幕或打字与印刷机上。这种方法思绪明显,不只不妨用来字体的回旋,也不妨用来其余各类字体变形,犹如winword中的wordart或华文之星的“艺术中国字”。但这种方法实行起来比拟烦恼,须要少许计划机画图学上面的常识,并且位图变幻进程中须要占用较多的外存。而咱们所要引见的本领,不妨灵验地处置那些题目,并且不须要什么特意的常识,而是充溢地运用windows api已有的功效实行回旋字体的功效。 咱们领会,论理字体是一类特殊要害的windows gdi东西。咱们恰是经过采用各别的论理字体来输入百般秀媚的字体的。而所谓“回旋字体”然而是一类特出的论理字体。犹如其余的gdi东西(如画笔、画刷、绘图板)一律,字体东西不只具备固有的字体,咱们也不妨创造本人的论理字体。创造字体不妨运用windows api的createfontindirect()因变量。在挪用该因变量之前,咱们将字体的特性放入logfont构造变量中。logfont构造是如许设置的: type logfont lfheight as integer ' 字体的莫大 lfwidth as integer ' 字体的宽窄 lfescapement as integer ' 字体回旋的观点 lforientation as integer lfweight as integer ' 字体的轻重 lfitalic as string * 1 ' 能否为斜体 lfunderline as string * 1 ' 能否有下划线 lfstrikeout as string * 1 ' 能否有夸大线 lfcharset as string * 1 ' 字符集 lfoutprecision as string * 1 ' 输入精度 lfclipprecision as string * 1 ' 剪裁精度 lfquality as string * 1 ' 输入品质 lfpitchandfamily as string * 1 ' 间距和字体族 lffacename as string * lf_facesize ' 字体名,如“宋体” end type 运用这个数据构造,你不妨简单地树立百般字体参数,比方莫大、宽窄等。该构造中同咱们所要计划的题目联系最大的是lfescapement,它表白字符的基线同坐目标x轴之间的回旋观点,从x轴正目标发端沿顺时针目标回旋,以格外之一番为单元(图2)。蔡明志教师著的《windows步调安排?画图篇--运用borland c++ for windows》一书(科学出书社1993年9月出书)的482页上指出回旋观点以十度为单元,为此笔者查看了sdk画册,其英文原文为:“measured in tenths of a degree”,似应为以格外之一番为单元。 lffacename指明字体的称呼,如“宋体”、“行楷”。须要指出的是,部分字体不扶助字体回旋,主假如字体宽窄不行变的品种,如fixedsys就不扶助字体回旋,幸亏如许的字体惟有一两种。 简直的实行拜见文后所附的步调(用visual basic 3.0编写),个中rotprint进程用来输入回旋字体。其办法如次:开始,运用getobject()因变量赢得暂时字体的logfont构造,窜改lfescapement,树立回旋观点,而后挪用createfontindirect()因变量创造论理字体并采用之。接下来,挪用textout()因变量输入字符串。运用textout()因变量不妨使那些不扶助print本领的遏制(如标签),同样不妨输入回旋字体。结果,用deleteobject()因变量简略创造的论理字体并恢恢复字体。 您不妨经过示例步调的“采用”菜单中的“字体”项来试验各别的字体功效,从当选出令人合意的拉拢。 附录:源步调 rotfont.bas文献: defint a-z ' 论理字体 global const lf_facesize = 32 ' 最长的字体称呼 global const system_font = 13 type logfont lfheight as integer lfwidth as integer lfescapement as integer lforientation as integer lfweight as integer lfitalic as string * 1 lfunderline as string * 1 lfstrikeout as string * 1 lfcharset as string * 1 lfoutprecision as string * 1 lfclipprecision as string * 1 lfquality as string * 1 lfpitchandfamily as string * 1 lffacename as string * lf_facesize end type '字体的族 global const ff_dontcare = 0 ' 无所谓 global const ff_roman = 16 ' 字体宽窄可变,times roman, century ' schoolbook等 global const ff_swiss = 32 ' 宽窄可变,带衬线,如helvetica, swiss等 global const ff_modern = 48 ' 具备规则的宽窄,衬线无足轻重, ' 如pica, elite, courier之类. global const ff_script = 64 ' 手写体,如cursive global const ff_decorative = 80 ' 特出字体,如old english ' gdi字体因变量 declare function createfontindirect lib "gdi" (lplogfont as logfont) as integer declare function selectobject lib "gdi" (byval hdc%, byval object%) as integer declare sub deleteobject lib "gdi" (byval object%) declare function getstockobject lib "gdi" (byval nindex as integer) as integer declare sub gdigetobject lib "gdi" alias "getobject" (byval hobject as integer, byval ncount as integer, lpobject as any) declare sub textout lib "gdi" (byval hdc as integer, byval x as integer, byval y as integer, byval lpstring as string, byval ncount as integer) rotfont.frm文献: version 2.00 begin form frmrotdemo caption = "回旋字体演练" clientheight = 4980 clientleft = 1095 clienttop = 1785 clientwidth = 4380 fontbold = -1 'true fontitalic = 0 'false fontname = "courier new" fontsize = 18 fontstrikethru = 0 'false fontunderline = 0 'false height = 5670 left = 1035 linktopic = "form1" scaleheight = 332 scalemode = 3 'pixel scalewidth = 292 top = 1155 width = 4500 begin commondialog cmdialog1 flags = 257 left = 0 top = 0 end begin menu mnuoption caption = "采用(&o)" begin menu mnufont caption = "字体(&f)..." shortcut = ^f end begin menu mnus1 caption = "-" end begin menu mnuexit caption = "退出(&x)" shortcut = ^x end end end option explicit sub form_paint () dim nangle% cls for nangle% = 20 to 80 step 10 forecolor = qbcolor(nangle% / 10 - 2) rotprint hdc, "关切本领本领 回旋字体", 10, 290, nangle% next end sub sub mnuexit_click () end end sub sub mnufont_click () ' 初始化对话框遏制 cmdialog1.fontname = fontname cmdialog1.fontsize = fontsize cmdialog1.fontitalic = fontitalic cmdialog1.fontbold = fontbold cmdialog1.fontunderline = fontunderline cmdialog1.fontstrikethru = fontstrikethru on error goto errhandle cmdialog1.action = 4 ' 树立窗体的字体属性 fontname = cmdialog1.fontname fontsize = cmdialog1.fontsize fontitalic = cmdialog1.fontitalic fontbold = cmdialog1.fontbold fontunderline = cmdialog1.fontunderline fontstrikethru = cmdialog1.fontstrikethru refresh errhandle: end sub sub rotprint (byval hdestdc as integer, text$, x as integer, y as integer, lineangle as integer) dim hfont as integer, holdfont as integer, r% dim font as logfont holdfont = selectobject(hdestdc, getstockobject(system_font)) gdigetobject holdfont, len(font), font ' 弥补logfont构造 font.lfescapement = lineangle * 10 ' 输入字体行与程度页底间的观点(以1/10度为单元) ' 必需是可变点字体 font.lfpitchandfamily = chr$(variable_pitch or ff_dontcare) ' 创造字体 hfont = createfontindirect(font) ' 采用回旋字体 r% = selectobject(hdestdc, hfont) ' 表露字体 textout hdestdc, x, y, text$, len(text$) ' 恢恢复字体 hfont = selectobject(hdestdc, holdfont) ' 简略创造的字体 deleteobject hfont end sub

热门阅览

最新排行

Copyright © 2019-2021 大雀软件园(www.daque.cn) All Rights Reserved.