亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

旋轉字體

2019-11-18 17:37:47
字體:
來源:轉載
供稿:網友
如何使自己設計的程序具有漂亮和友好的界面,是程序員間永恒的話題。這里,筆者向您介紹一種非常簡單的技巧,使文字旋轉起來。
這里的“旋轉字體”指的是讓一行字體的水平基線(baseline)轉過一定的角度。正如您所看到的,旋轉字體會產生輕松、活潑的視覺效果,可以給觀者以特殊的聯想,是一種行之有效的顯示特技。
有一種很容易想到的辦法可以實現旋轉字體,即首先生成文字的點陣(位圖),然后利用坐標旋轉變換生成新的位圖再輸出到屏幕或打印機上。這種辦法思路清晰,不但可以用于字體的旋轉,也可以用于其他種種字體變形,如同WinWord中的WordArt或中文之星的“藝術漢字”。但這種辦法實現起來比較麻煩,需要一些計算機繪圖學方面的知識,而且位圖變換過程中需要占用較多的內存。而我們所要介紹的方法,可以有效地解決這些問題,而且不需要什么專門的知識,而是充分地利用WindowsAPI已有的功能實現旋轉字體的效果。
我們知道,邏輯字體是一類非常重要的WindowsGDI對象。我們正是通過選擇不同的邏輯字體來輸出各種秀美的字體的。而所謂“旋轉字體”不過是一類特殊的邏輯字體。如同其他的GDI對象(如畫筆、畫刷、調色板)一樣,字體對象不但具有固有的字體,我們也可以建立自己的邏輯字體。建立字體可以使用WindowsAPI的CreateFontIndirect()函數。在調用該函數之前,我們將字體的特征放入LOGFONT
結構變量中。LOGFONT結構是這樣定義的:
TypeLOGFONT
lfHeightAsInteger'字體的高度
lfWidthAsInteger'字體的寬度
lfEscapementAsInteger'字體旋轉的角度
lfOrientationAsInteger
lfWeightAsInteger'字體的輕重
lfItalicAsString*1'是否為斜體
lfUnderlineAsString*1'是否有下劃線
lfStrikeOutAsString*1'是否有強調線
lfCharSetAsString*1'字符集
lfOutlfClEndType

利用這個數據結構,你可以方便地設置各種字體參數,比如高度、寬度等。該結構中同我們所要討論的問題關系最大的是lfEscapement,它表示字符的基線同坐標的X軸之間的旋轉角度,從X軸正方向開始沿逆時針方向旋轉,以十分之一度為單位(圖2)。蔡明志先生著的《Windows程序設計?繪圖篇--使用BorlandC forWindows》一書(科學出版社1993年9月出版)的482頁上指出旋轉角度以十度為單位,為此筆者查閱了SDK手冊,其英文原文為:“measuredintenthsofadegree”,似應為以十分之一度為單位。
lfFaceName指明字體的名稱,如“宋體”、“行楷”。需要指出的是,個別字體不支持字體旋轉,主要是字體寬度不可變的種類,如FixedSys就不支持字體旋轉,好在這樣的字體只有一兩種。
具體的實現參見文后所附的程序(用VisualBasic3.0編寫),其中RotPrint過程用來輸出旋轉字體。其步驟如下:首先,利用GetObject()函數獲得當前字體的LOGFONT結構,修改lfEscapement,設置旋轉角度,然后調用CreateFontIndirect()函數建立邏輯字體并選用之。接下來,調用TextOut()函數輸出字符串。使用TextOut()函數可以使那些不支持Print方法的控制(如標簽),同樣可以輸出旋轉字體。最后,用DeleteObject()函數刪除建立的邏輯字體并恢復原字體。
您可以通過示例程序的“選擇”菜單中的“字體”項來嘗試不同的字體效果,從中選出令人滿意的組合。

附錄:源程序
ROTFONT.BAS文件:
DefIntA-Z
'邏輯字體
GlobalConstLF_FACESIZE=32'最長的字體名稱
GlobalConstSYSTEM_FONT=13
TypeLOGFONT
lfHeightAsInteger
lfWidthAsInteger
lfEscapementAsInteger
lfOrientationAsInteger
lfWeightAsInteger
lfItalicAsString*1
lfUnderlineAsString*1
lfStrikeOutAsString*1
lfCharSetAsString*1
lfOutPrecisionAsString*1
lfClipPrecisionAsString*1
lfQualityAsString*1
lfPitchAndFamilyAsString*1
lfFaceNameAsString*LF_FACESIZE
EndType
'字體的族
GlobalConstFF_DONTCARE=0'無所謂
GlobalConstFF_ROMAN=16'字體寬度可變,TimesRoman,Century
'Schoolbook等
GlobalConstFF_SWISS=32'寬度可變,帶襯線,如Helvetica,Swiss等
GlobalConstFF_MODERN=48'具有規定的寬度,襯線可有可無,
'如Pica,Elite,Courier等等.
GlobalConstFF_SCRIPT=64'手寫體,如Cursive
GlobalConstFF_DECORATIVE=80'特殊字體,如OldEnglish
'GDI字體函數
DeclareFunctionCreateFontIndirectLib"GDI"(lpLogFontAsLOGFONT)As
Integer
DeclareFunctionSelectObjectLib"GDI"(ByValhDC,ByValObject)As
Integer
DeclareSubDeleteObjectLib"GDI"(ByValObject)
DeclareFunctionGetStockObjectLib"GDI"(ByValnIndexAsInteger)As
Integer
DeclareSubGDIGetObjectLib"GDI"Alias"GetObject"(ByValhObjectAs
Integer,ByValnCountAsInteger,lpObjectAsAny)
DeclareSubTextOutLib"GDI"(ByValhDCAsInteger,ByValXAsInteger,
ByValYAsInteger,ByVallpStringAsString,ByValnCountAsInteger)

ROTFONT.FRM文件:
VERSION2.00
BeginFormfrmRotDemo
Caption="旋轉字體演示"
ClientHeight=4980
ClientLeft=1095
ClientTop=1785
ClientWidth=4380
FontBold=-1'True
FontItalic=0'False
FontName="CourierNew"
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
BeginCommonDialogCMDialog1
Flags=257
Left=0
Top=0
End
BeginMenumnuOption
Caption="選擇(&O)"
BeginMenumnuFont
Caption="字體(&F)..."
Shortcut=^F
End
BeginMenumnuS1
Caption="-"
End
BeginMenumnuExit
Caption="退出(&X)"
Shortcut=^X
End
End
End
OptionExplicit

SubForm_Paint()
DimnAngle
Cls
FornAngle=20To80Step10
ForeColor=QBColor(nAngle/10-2)
RotPrinthDC,"熱情技術技巧旋轉字體",10,290,nAngle
Next
EndSub

SubmnuExit_Click()
End
EndSub

SubmnuFont_Click()
'初始化對話框控制
CMDialog1.FontName=FontName
CMDialog1.FontSize=FontSize
CMDialog1.FontItalic=FontItalic
CMDialog1.FontBold=FontBold
CMDialog1.FontUnderLine=FontUnderLine
CMDialog1.FontStrikeThru=FontStrikeThru
OnErrorGoToErrHandle
CMDialog1.Action=4
'設置窗體的字體屬性
FontName=CMDialog1.FontName
FontSize=CMDialog1.FontSize
FontItalic=CMDialog1.FontItalic
FontBold=CMDialog1.FontBold
FontUnderLine=CMDialog1.FontUnderLine
FontStrikeThru=CMDialog1.FontStrikeThru
Refresh
ErrHandle:
EndSub

SubRotPrint(ByValhDestDCAsInteger,Text$,xAsInteger,yAs
Integer,LineAngleAsInteger)
DimhFontAsInteger,hOldFontAsInteger,r
DimFontAsLOGFONT
hOldFont=SelectObject(hDestDC,GetStockObject(SYSTEM_FONT))
GDIGetObjecthOldFont,Len(Font),Font
'填充LOGFONT結構
Font.lfEscapement=LineAngle*10'輸出字體行與水平頁底間的角度(以1/10
度為單位)
'必須是可變點字體
Font.lfPitchAndFamily=Chr$(VARIABLE_PITCHOrFF_DONTCARE)
'創建字體
hFont=CreateFontIndirect(Font)
'選擇旋轉字體
r=SelectObject(hDestDC,hFont)
'顯示字體
TextOuthDestDC,x,y,Text$,Len(Text$)
'恢復原字體
hFont=SelectObject(hDestDC,hOldFont)
'刪除創建的字體
DeleteObjecthFont
EndSub->


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产日韩欧美在线播放| 亚洲免费电影在线观看| 亚洲黄色av网站| 中文精品99久久国产香蕉| 91精品久久久久久久久| 在线精品视频视频中文字幕| 亚洲xxxx做受欧美| 91色琪琪电影亚洲精品久久| 91精品国产亚洲| …久久精品99久久香蕉国产| 亚洲va久久久噜噜噜久久天堂| 91香蕉嫩草神马影院在线观看| 成人美女av在线直播| 一区二区三区久久精品| 亚洲精品免费av| 中文一区二区视频| 丝袜情趣国产精品| 欧美黑人一区二区三区| 国产精品成人一区二区| 日韩视频欧美视频| 欧美日韩免费在线观看| 1769国产精品| 九九精品视频在线观看| 亚洲性视频网站| 成人国产精品免费视频| 欧美一区第一页| 国产性色av一区二区| 国产精品旅馆在线| 久久影院资源网| 日韩在线观看成人| 亚洲国产免费av| 国产精品成人免费视频| 在线观看国产精品淫| 国产精品户外野外| 在线a欧美视频| 日韩激情av在线免费观看| 日韩精品电影网| 精品伊人久久97| 亚洲丝袜在线视频| 色噜噜国产精品视频一区二区| 亚洲另类xxxx| 国产做受69高潮| 欧美巨猛xxxx猛交黑人97人| 7777免费精品视频| 精品福利免费观看| 91免费精品视频| 欧美激情第99页| 欧美日韩亚洲网| 日韩av片免费在线观看| 日本精品免费一区二区三区| 亚洲午夜国产成人av电影男同| 欧美最猛性xxxx| 高清欧美性猛交xxxx| 欧美日韩亚洲一区二区| 在线播放日韩精品| 热re91久久精品国99热蜜臀| 久久精品国产欧美亚洲人人爽| 日韩美女视频在线观看| 91精品国产电影| 美女国内精品自产拍在线播放| 亚洲欧美日韩在线一区| 国产欧美日韩精品在线观看| 午夜精品福利电影| 国产精品极品美女在线观看免费| 夜夜嗨av色综合久久久综合网| 欧美猛男性生活免费| 日本精品视频网站| 亚洲成成品网站| 91av在线视频观看| 国产成人极品视频| 97在线看免费观看视频在线观看| 欧美午夜精品久久久久久浪潮| 中文字幕亚洲欧美一区二区三区| 国产亚洲精品成人av久久ww| 中文字幕亚洲一区二区三区| 日韩精品有码在线观看| www日韩中文字幕在线看| 2021国产精品视频| 国产精品激情av在线播放| 草民午夜欧美限制a级福利片| 欧美成人午夜激情视频| 日韩在线视频中文字幕| 国产精品情侣自拍| 中文字幕无线精品亚洲乱码一区| 国产精品成人一区二区| 日本伊人精品一区二区三区介绍| 欧美精品在线第一页| 久久久久免费精品国产| 日韩动漫免费观看电视剧高清| 亚洲精品成人久久电影| 亚洲国产精品免费| 中文字幕国产日韩| 久久久精品一区二区| 欧美专区中文字幕| 97在线观看免费高清| 久久久www成人免费精品张筱雨| 国产亚洲精品久久久久久| 国产丝袜精品第一页| 91午夜在线播放| 欧美大片欧美激情性色a∨久久| 欧美美女操人视频| 国产精品美女久久久免费| 久久久av免费| 欧美综合一区第一页| www.亚洲天堂| 精品激情国产视频| 国产一区二区日韩精品欧美精品| 久久久精品免费视频| 中文字幕亚洲欧美日韩在线不卡| 亚洲美女性生活视频| 亚洲欧美成人精品| 久久精品美女视频网站| 亚洲激情在线观看| 国产在线一区二区三区| 国产精彩精品视频| 日韩激情第一页| 亚洲成人激情图| 亚洲黄色在线看| 成人激情免费在线| 国产有码一区二区| 欧美日韩中文字幕在线视频| 亚洲人a成www在线影院| 成人精品在线观看| 亚洲精品videossex少妇| 国产噜噜噜噜噜久久久久久久久| 国产精品久久久久免费a∨| 上原亚衣av一区二区三区| 日韩一区在线视频| 日本不卡免费高清视频| 欧美性高潮在线| 亚洲一区999| 欧美亚洲免费电影| 日韩av在线免费观看| 亚洲精品一区av在线播放| 亚洲国产精品久久久| 亚洲片国产一区一级在线观看| 国产噜噜噜噜噜久久久久久久久| 97精品国产aⅴ7777| 欧美色videos| 激情懂色av一区av二区av| 欧美激情国产日韩精品一区18| 国产精品一区二区三区毛片淫片| 国产精品v片在线观看不卡| 伊人久久久久久久久久久久久| 久久久久久久久久亚洲| 欧美日韩国产精品专区| 亚洲欧洲自拍偷拍| 国产精品美女视频网站| 亚洲欧洲第一视频| 日韩欧中文字幕| 亚洲自拍偷拍视频| 日韩美女视频免费在线观看| 欧美天堂在线观看| 亚洲第一福利视频| www.亚洲男人天堂| 日本精品va在线观看| 日韩一区视频在线| 欧美日韩国产页| 久久久久久久91| 精品国产区一区二区三区在线观看| 中文字幕视频在线免费欧美日韩综合在线看| 中文字幕亚洲欧美日韩2019| 欧美成人亚洲成人| 免费不卡欧美自拍视频|