如何在.NETWinForm中使用FontAwesome字体图标 [操作系统入门]

编程

思路

  • 将fontawesome-webfont.ttf文件添加到项目资源中
  • 将字体自动添加到内存中,无需安装字体,易于部署
  • 自动绘制字体图标图片

IconHelper

public sealed class IconHelper

{

public static Image GetFontImage(IconType type, Color color, int size)

{

var bmp = new Bitmap(size, size);

var g = Graphics.FromImage(bmp);

g.TextRenderingHint = TextRenderingHint.AntiAliasGridFit;

g.InterpolationMode = InterpolationMode.HighQualityBilinear;

g.PixelOffsetMode = PixelOffsetMode.HighQuality;

g.SmoothingMode = SmoothingMode.HighQuality;

var ch = char.ConvertFromUtf32((int)type);

var font = GetAdjustedFont(g, ch, size, size, 4, true);

var stringSize = g.MeasureString(ch, font, size);

float w = stringSize.Width;

float h = stringSize.Height;

// center icon

float left = (size - w) / 2;

float top = (size - h) / 2;

// Draw string to screen.

var brush = new SolidBrush(color);

g.DrawString(ch, font, brush, new PointF(left, top));

return bmp;

}

private static Font GetAdjustedFont(Graphics g, string graphicString, int containerWidth, int maxFontSize, int minFontSize, bool smallestOnFail)

{

for (double adjustedSize = maxFontSize; adjustedSize >= minFontSize; adjustedSize = adjustedSize - 0.5)

{

Font testFont = GetIconFont((float)adjustedSize);

// Test the string with the new size

SizeF adjustedSizeNew = g.MeasureString(graphicString, testFont);

if (containerWidth > Convert.ToInt32(adjustedSizeNew.Width))

{

// Fits! return it

return testFont;

}

}

// Could not find a font size

// return min or max or maxFontSize?

return GetIconFont(smallestOnFail ? minFontSize : maxFontSize);

}

private static Font GetIconFont(float size)

{

return new Font(Fonts.Families[0], size, GraphicsUnit.Point);

}

static IconHelper()

{

InitialiseFont();

}

[System.Runtime.InteropServices.DllImport("gdi32.dll")]

private static extern IntPtr AddFontMemResourceEx(IntPtr pbFont, uint cbFont, IntPtr pdv, [System.Runtime.InteropServices.In] ref uint pcFonts);

private static readonly PrivateFontCollection Fonts = new PrivateFontCollection();

private static void InitialiseFont()

{

try

{

unsafe

{

fixed (byte* pFontData = Properties.Resources.fontawesome_webfont)

{

uint dummy = 0;

Fonts.AddMemoryFont((IntPtr)pFontData, Properties.Resources.fontawesome_webfont.Length);

AddFontMemResourceEx((IntPtr)pFontData, (uint)Properties.Resources.fontawesome_webfont.Length, IntPtr.Zero, ref dummy);

}

}

}

catch (Exception)

{

// log?

}

}

}

IconType

图标字体Unicode代码通过http://www.fontawesome.com.cn/faicons/查找

public enum IconType

{

Adjust = 0xf042,

Adn = 0xf170,

AlignCenter = 0xf037,

AlignJustify = 0xf039,

AlignLeft = 0xf036,

AlignRight = 0xf038,

Ambulance = 0xf0f9,

Anchor = 0xf13d,

Android = 0xf17b,

AngleDoubleDown = 0xf103,

AngleDoubleLeft = 0xf100,

AngleDoubleRight = 0xf101,

AngleDoubleUp = 0xf102,

AngleDown = 0xf107,

AngleLeft = 0xf104,

AngleRight = 0xf105,

AngleUp = 0xf106,

Apple = 0xf179,

Archive = 0xf187,

ArrowCircleDown = 0xf0ab,

ArrowCircleLeft = 0xf0a8,

ArrowCircleODown = 0xf01a,

ArrowCircleOLeft = 0xf190,

ArrowCircleORight = 0xf18e,

ArrowCircleOUp = 0xf01b,

ArrowCircleRight = 0xf0a9,

ArrowCircleUp = 0xf0aa,

ArrowDown = 0xf063,

ArrowLeft = 0xf060,

ArrowRight = 0xf061,

ArrowUp = 0xf062,

Arrows = 0xf047,

ArrowsAlt = 0xf0b2,

ArrowsH = 0xf07e,

ArrowsV = 0xf07d,

Asterisk = 0xf069,

Automobile = 0xf1b9,

Backward = 0xf04a,

Ban = 0xf05e,

Bank = 0xf19c,

BarChartO = 0xf080,

Barcode = 0xf02a,

Bars = 0xf0c9,

Beer = 0xf0fc,

Behance = 0xf1b4,

BehanceSquare = 0xf1b5,

Bell = 0xf0f3,

BellO = 0xf0a2,

Bitbucket = 0xf171,

BitbucketSquare = 0xf172,

Bitcoin = 0xf15a,

Bold = 0xf032,

Bolt = 0xf0e7,

Bomb = 0xf1e2,

Book = 0xf02d,

Bookmark = 0xf02e,

BookmarkO = 0xf097,

Briefcase = 0xf0b1,

Btc = 0xf15a,

Bug = 0xf188,

Building = 0xf1ad,

BuildingO = 0xf0f7,

Bullhorn = 0xf0a1,

Bullseye = 0xf140,

Cab = 0xf1ba,

Calendar = 0xf073,

CalendarO = 0xf133,

Calculator = 0xf1ec,

Camera = 0xf030,

CameraRetro = 0xf083,

Car = 0xf1b9,

CaretDown = 0xf0d7,

CaretLeft = 0xf0d9,

CaretRight = 0xf0da,

CaretSquareODown = 0xf150,

CaretSquareOLeft = 0xf191,

CaretSquareORight = 0xf152,

CaretSquareOUp = 0xf151,

CaretUp = 0xf0d8,

Certificate = 0xf0a3,

Chain = 0xf0c1,

ChainBroken = 0xf127,

Check = 0xf00c,

CheckCircle = 0xf058,

CheckCircleO = 0xf05d,

CheckSquare = 0xf14a,

CheckSquareO = 0xf046,

ChevronCircleDown = 0xf13a,

ChevronCircleLeft = 0xf137,

ChevronCircleRight = 0xf138,

ChevronCircleUp = 0xf139,

ChevronDown = 0xf078,

ChevronLeft = 0xf053,

ChevronRight = 0xf054,

ChevronUp = 0xf077,

Child = 0xf1ae,

Circle = 0xf111,

CircleO = 0xf10c,

CircleONotch = 0xf1ce,

CircleThin = 0xf1db,

Clipboard = 0xf0ea,

ClockO = 0xf017,

Cloud = 0xf0c2,

CloudDownload = 0xf0ed,

CloudUpload = 0xf0ee,

Cny = 0xf157,

Code = 0xf121,

CodeFork = 0xf126,

Codepen = 0xf1cb,

Coffee = 0xf0f4,

Cog = 0xf013,

Cogs = 0xf085,

Columns = 0xf0db,

Comment = 0xf075,

CommentO = 0xf0e5,

Comments = 0xf086,

CommentsO = 0xf0e6,

Compass = 0xf14e,

Compress = 0xf066,

Copy = 0xf0c5,

CreditCard = 0xf09d,

Crop = 0xf125,

Crosshairs = 0xf05b,

Css3 = 0xf13c,

Cube = 0xf1b2,

Cubes = 0xf1b3,

Cut = 0xf0c4,

Cutlery = 0xf0f5,

Dashboard = 0xf0e4,

Database = 0xf1c0,

Dedent = 0xf03b,

Delicious = 0xf1a5,

Desktop = 0xf108,

Deviantart = 0xf1bd,

Digg = 0xf1a6,

Dollar = 0xf155,

DotCircleO = 0xf192,

Download = 0xf019,

Dribbble = 0xf17d,

Dropbox = 0xf16b,

Drupal = 0xf1a9,

Edit = 0xf044,

Eject = 0xf052,

EllipsisH = 0xf141,

EllipsisV = 0xf142,

Empire = 0xf1d1,

Envelope = 0xf0e0,

EnvelopeO = 0xf003,

EnvelopeSquare = 0xf199,

Eraser = 0xf12d,

Eur = 0xf153,

Euro = 0xf153,

Exchange = 0xf0ec,

Exclamation = 0xf12a,

ExclamationCircle = 0xf06a,

ExclamationTriangle = 0xf071,

Expand = 0xf065,

ExternalLink = 0xf08e,

ExternalLinkSquare = 0xf14c,

Eye = 0xf06e,

EyeSlash = 0xf070,

Facebook = 0xf09a,

FacebookSquare = 0xf082,

FastBackward = 0xf049,

FastForward = 0xf050,

Fax = 0xf1ac,

Female = 0xf182,

FighterJet = 0xf0fb,

File = 0xf15b,

FileArchiveO = 0xf1c6,

FileAudioO = 0xf1c7,

FileCodeO = 0xf1c9,

FileExcelO = 0xf1c3,

FileImageO = 0xf1c5,

FileMovieO = 0xf1c8,

FileO = 0xf016,

FilePdfO = 0xf1c1,

FilePhotoO = 0xf1c5,

FilePictureO = 0xf1c5,

FilePowerpointO = 0xf1c4,

FileSoundO = 0xf1c7,

FileText = 0xf15c,

FileTextO = 0xf0f6,

FileVideoO = 0xf1c8,

FileWordO = 0xf1c2,

FileZipO = 0xf1c6,

FilesO = 0xf0c5,

Film = 0xf008,

Filter = 0xf0b0,

Fire = 0xf06d,

FireExtinguisher = 0xf134,

Flag = 0xf024,

FlagCheckered = 0xf11e,

FlagO = 0xf11d,

Flash = 0xf0e7,

Flask = 0xf0c3,

Flickr = 0xf16e,

FloppyO = 0xf0c7,

Folder = 0xf07b,

FolderO = 0xf114,

FolderOpen = 0xf07c,

FolderOpenO = 0xf115,

Font = 0xf031,

Forward = 0xf04e,

Foursquare = 0xf180,

FrownO = 0xf119,

Gamepad = 0xf11b,

Gavel = 0xf0e3,

Gbp = 0xf154,

Ge = 0xf1d1,

Gear = 0xf013,

Gears = 0xf085,

Gift = 0xf06b,

Git = 0xf1d3,

GitSquare = 0xf1d2,

Github = 0xf09b,

GithubAlt = 0xf113,

GithubSquare = 0xf092,

Gittip = 0xf184,

Glass = 0xf000,

Globe = 0xf0ac,

Google = 0xf1a0,

GooglePlus = 0xf0d5,

GooglePlusSquare = 0xf0d4,

GraduationCap = 0xf19d,

Group = 0xf0c0,

HSquare = 0xf0fd,

HackerNews = 0xf1d4,

HandODown = 0xf0a7,

HandOLeft = 0xf0a5,

HandORight = 0xf0a4,

HandOUp = 0xf0a6,

HddO = 0xf0a0,

Header = 0xf1dc,

Headphones = 0xf025,

Heart = 0xf004,

HeartO = 0xf08a,

History = 0xf1da,

Home = 0xf015,

HospitalO = 0xf0f8,

HourglassHalf = 0xf252,

HourglassEnd = 0xf253,

Html5 = 0xf13b,

Image = 0xf03e,

Inbox = 0xf01c,

Indent = 0xf03c,

Info = 0xf129,

InfoCircle = 0xf05a,

Inr = 0xf156,

Instagram = 0xf16d,

Institution = 0xf19c,

Italic = 0xf033,

Joomla = 0xf1aa,

Jpy = 0xf157,

Jsfiddle = 0xf1cc,

Key = 0xf084,

KeyboardO = 0xf11c,

Krw = 0xf159,

Language = 0xf1ab,

Laptop = 0xf109,

Leaf = 0xf06c,

Legal = 0xf0e3,

LemonO = 0xf094,

LevelDown = 0xf149,

LevelUp = 0xf148,

LifeBouy = 0xf1cd,

LifeRing = 0xf1cd,

LifeSaver = 0xf1cd,

LightbulbO = 0xf0eb,

LineChart = 0xf201,

Link = 0xf0c1,

Linkedin = 0xf0e1,

LinkedinSquare = 0xf08c,

Linux = 0xf17c,

List = 0xf03a,

ListAlt = 0xf022,

ListOl = 0xf0cb,

ListUl = 0xf0ca,

LocationArrow = 0xf124,

Lock = 0xf023,

LongArrowDown = 0xf175,

LongArrowLeft = 0xf177,

LongArrowRight = 0xf178,

LongArrowUp = 0xf176,

Magic = 0xf0d0,

Magnet = 0xf076,

MailForward = 0xf064,

MailReply = 0xf112,

MailReplyAll = 0xf122,

Male = 0xf183,

MapMarker = 0xf041,

Maxcdn = 0xf136,

Medkit = 0xf0Fa,

MehO = 0xf11a,

Microphone = 0xf130,

MicrophoneSlash = 0xf131,

Minus = 0xf068,

MinusCircle = 0xf056,

MinusSquare = 0xf146,

MinusSquareO = 0xf147,

Mobile = 0xf10b,

MobilePhone = 0xf10b,

Money = 0xf0d6,

MoonO = 0xf186,

MortarBoard = 0xf19d,

Music = 0xf001,

Navicon = 0xf0c9,

Openid = 0xf19b,

Outdent = 0xf03b,

Pagelines = 0xf18c,

PaperPlane = 0xf1d8,

PaperPlaneO = 0xf1d9,

Paperclip = 0xf0c6,

Paragraph = 0xf1dd,

Paste = 0xf0ea,

Pause = 0xf04c,

PauseCircle = 0xf28b,

PauseCircleO = 0xf28c,

Paw = 0xf1b0,

Pencil = 0xf040,

PencilSquare = 0xf14b,

PencilSquareO = 0xf044,

Phone = 0xf095,

PhoneSquare = 0xf098,

Photo = 0xf03e,

PictureO = 0xf03e,

PiedPiper = 0xf1a7,

PiedPiperAlt = 0xf1a8,

PiedPiperSquare = 0xf1a7,

Pinterest = 0xf0d2,

PinterestSquare = 0xf0d3,

Plane = 0xf072,

Play = 0xf04b,

PlayCircle = 0xf144,

PlayCircleO = 0xf01d,

Plus = 0xf067,

PlusCircle = 0xf055,

PlusSquare = 0xf0fe,

PlusSquareO = 0xf196,

PowerOff = 0xf011,

Print = 0xf02f,

PuzzlePiece = 0xf12e,

QQ = 0xf1d6,

Rrcode = 0xf029,

Ruestion = 0xf128,

RuestionCircle = 0xf059,

RuoteLeft = 0xf10d,

RuoteRight = 0xf10e,

Ra = 0xf1d0,

Random = 0xf074,

Rebel = 0xf1d0,

Recycle = 0xf1b8,

Reddit = 0xf1a1,

RedditSquare = 0xf1a2,

Refresh = 0xf021,

Renren = 0xf18b,

Reorder = 0xf0c9,

Repeat = 0xf01e,

Reply = 0xf112,

ReplyAll = 0xf122,

Retweet = 0xf079,

Rmb = 0xf157,

Road = 0xf018,

Rocket = 0xf135,

RotateLeft = 0xf0e2,

RotateRight = 0xf01e,

Rouble = 0xf158,

Rss = 0xf09e,

RssSquare = 0xf143,

Rub = 0xf158,

Ruble = 0xf158,

Rupee = 0xf156,

Save = 0xf0c7,

Scissors = 0xf0c4,

Search = 0xf002,

SearchMinus = 0xf010,

SearchPlus = 0xf00e,

Send = 0xf1d8,

SendO = 0xf1d9,

Share = 0xf064,

ShareAlt = 0xf1e0,

ShareAltSquare = 0xf1e1,

ShareSquare = 0xf14d,

ShareSquareO = 0xf045,

Shield = 0xf132,

ShoppingCart = 0xf07a,

SignIn = 0xf090,

SignOut = 0xf08b,

Signal = 0xf012,

Sitemap = 0xf0e8,

Skype = 0xf17e,

Slack = 0xf198,

Sliders = 0xf1de,

SmileO = 0xf118,

Sort = 0xf0dc,

SortAlphaAsc = 0xf15d,

SortAlphaDesc = 0xf15e,

SortAmountAsc = 0xf160,

SortAmountDesc = 0xf161,

SortAsc = 0xf0de,

SortDesc = 0xf0dd,

SortDown = 0xf0dd,

SortNumericAsc = 0xf162,

SortNumericDesc = 0xf163,

SortUp = 0xf0de,

Soundcloud = 0xf1be,

SpaceShuttle = 0xf197,

Spinner = 0xf110,

Spoon = 0xf1b1,

Spotify = 0xf1bc,

Square = 0xf0c8,

SquareO = 0xf096,

StackExchange = 0xf18d,

StackOverflow = 0xf16c,

Star = 0xf005,

StarHalf = 0xf089,

StarHalfEmpty = 0xf123,

StarHalfFull = 0xf123,

StarHalfO = 0xf123,

StarO = 0xf006,

Steam = 0xf1b6,

SteamSquare = 0xf1b7,

StepBackward = 0xf048,

StepForward = 0xf051,

Stethoscope = 0xf0f1,

Stop = 0xf04d,

StopCircle = 0xf28d,

StopCircleO = 0xf28e,

Strikethrough = 0xf0cc,

Stumbleupon = 0xf1a4,

StumbleuponCircle = 0xf1a3,

Subscript = 0xf12c,

Suitcase = 0xf0f2,

SunO = 0xf185,

Superscript = 0xf12b,

Support = 0xf1cd,

Table = 0xf0ce,

Tablet = 0xf10a,

Tachometer = 0xf0e4,

Tag = 0xf02b,

Tags = 0xf02c,

Tasks = 0xf0ae,

Taxi = 0xf1ba,

TencentWeibo = 0xf1d5,

Terminal = 0xf120,

TextHeight = 0xf034,

TextWidth = 0xf035,

Th = 0xf00a,

ThLarge = 0xf009,

ThList = 0xf00b,

ThumbTack = 0xf08d,

ThumbsDown = 0xf165,

ThumbsODown = 0xf088,

ThumbsOUp = 0xf087,

ThumbsUp = 0xf164,

Ticket = 0xf145,

Times = 0xf00d,

TimesCircle = 0xf057,

TimesCircleO = 0xf05c,

Tint = 0xf043,

ToggleDown = 0xf150,

ToggleLeft = 0xf191,

ToggleRight = 0xf152,

ToggleUp = 0xf151,

TrashO = 0xf014,

Tree = 0xf1bb,

Trello = 0xf181,

Trophy = 0xf091,

Truck = 0xf0d1,

Try = 0xf195,

Tumblr = 0xf173,

TumblrSquare = 0xf174,

TurkishLira = 0xf195,

Twitter = 0xf099,

TwitterSquare = 0xf081,

Umbrella = 0xf0e9,

Underline = 0xf0cd,

Undo = 0xf0e2,

University = 0xf19c,

Unlink = 0xf127,

Unlock = 0xf09c,

UnlockAlt = 0xf13e,

Unsorted = 0xf0dc,

Upload = 0xf093,

Usd = 0xf155,

User = 0xf007,

UserMd = 0xf0f0,

Users = 0xf0c0,

VideoCamera = 0xf03d,

VimeoSquare = 0xf194,

Vine = 0xf1ca,

Vk = 0xf189,

VolumeDown = 0xf027,

VolumeOff = 0xf026,

VolumeUp = 0xf028,

Warning = 0xf071,

Wechat = 0xf1d7,

Weibo = 0xf18a,

Weixin = 0xf1d7,

Wheelchair = 0xf193,

Windows = 0xf17a,

Won = 0xf159,

Wordpress = 0xf19a,

Wrench = 0xf0ad,

Xing = 0xf168,

XingSquare = 0xf169,

Yahoo = 0xf19e,

Yen = 0xf157,

Youtube = 0xf167,

YoutubePlay = 0xf16a,

YoutubeSquare = 0xf166,

}

如何在.NET WinForm中使用Font Awesome字体图标

以上是 如何在.NETWinForm中使用FontAwesome字体图标 [操作系统入门] 的全部内容, 来源链接: utcz.com/z/519490.html

回到顶部