2010-06-12 5 views

답변

5

응용 프로그램에 글꼴을 포함시키고 해당 글꼴을 사용자 시스템에서 사용할 수없는 경우 사용할 수 있습니다.

간단하게 PrivateFontCollection을 만들고 글꼴로 채우기 만하면 원하는대로 사용할 수 있습니다. MSDN에 따르면,이 방법은 섹션 PrivateFontCollection.AddFontFile 방법의 비고에서 Windows 2000

하기 전에 운영 체제에 적용되지 않습니다

Windows 2000의 이전 운영 체제에서 개인 글꼴을 사용하여, 기본 글꼴 (일반적으로 Microsoft Sans Serif)이 대체됩니다.

응용 프로그램을하려는 경우은 Windows 2000에서 사용되는 및 최신, 당신은 내가 개인 글꼴을 구현하는 방법을보고 쓴이 코드를 따를 수 있습니다.

Public Class Form1 
    Dim pfc As System.Drawing.Text.PrivateFontCollection 
    Dim ifc As System.Drawing.Text.InstalledFontCollection 

    Sub New() 

     ' This call is required by the designer. 
     InitializeComponent() 

     ' Add any initialization after the InitializeComponent() call. 
     pfc = New System.Drawing.Text.PrivateFontCollection() 
     ifc = New System.Drawing.Text.InstalledFontCollection() 

     LoadPrivateFonts({My.Resources.Series_60_ZDigi, My.Resources.Times_NR_Phonetics_2}) 
    End Sub 

    ''' <summary>Loads the private fonts.</summary> 
    ''' <param name="fonts">The fonts to be loaded into the private font collection.</param> 
    Private Sub LoadPrivateFonts(ByVal fonts As IEnumerable(Of Byte())) 
     For Each resFont In fonts 
      pfc.AddMemoryFont(Runtime.InteropServices.Marshal.UnsafeAddrOfPinnedArrayElement(resFont, 0), resFont.Length) 
     Next 
    End Sub 

    ''' <summary>Gets the FontFamily whose name matches the one specified.</summary> 
    ''' <param name="fontName">Name of the FontFamily to be returned.</param> 
    ''' <param name="defaultFamily"> 
    ''' Optional. The default font family to be returned if the specified font is not found 
    ''' </param> 
    Private Function GetFontFamily(ByVal fontName As String, Optional ByVal defaultFamily As FontFamily = Nothing) As FontFamily 
     If String.IsNullOrEmpty(fontName) Then 
      Throw New ArgumentNullException("fontName", "The name of the font cannont be null.") 
     End If 

     Dim foundFonts = From font In ifc.Families.Union(pfc.Families) Where font.Name.ToLower() = fontName.ToLower() 

     If foundFonts.Any() Then 
      Return foundFonts.First() 
     Else 
      Return If(defaultFamily, FontFamily.GenericSansSerif) 
     End If 
    End Function 

    Private Sub Form1_Disposed(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Disposed 
     'free the resources used by the font collections 
     pfc.Dispose() 
     ifc.Dispose() 
    End Sub 

    Private Sub Form1_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles Me.Paint 
     Dim g = e.Graphics 

     Using br As Brush = Brushes.Black 
      g.DrawString("1234567890ABCDEF", New Font(GetFontFamily("Series 60 ZDigi"), 18), br, New Point(20, 20)) 
      g.DrawString("ABCDEFGHIJKLMNOP", New Font(GetFontFamily("Times NR Phonetics 2"), 18), br, New Point(20, 100)) 
     End Using 
    End Sub 
End Class 

나는 개인 글꼴 모음으로 내가 자원에서 응용 프로그램 (시리즈 60 ZDigi, 내 노키아 휴대 전화에서 글꼴 및 시간 NR 음성학 2, 내 사전 응용 프로그램에서 글꼴)에서 사용하는 두 개의 글꼴을로드 Sub New()
그런 다음 GetFontFamily 메서드를 호출하여 양식에 페인트 할 원하는 글꼴을 가져옵니다.

이것을 응용 프로그램에 통합하는 것이 너무 어렵지 않아야합니다.

건배.

0

수 없습니다. 표준 Winforms 응용 프로그램의 포함 된 글꼴에 대해서는이 시점에서 플랫폼 간 표준이 없습니다. 사용자가 할 수있는 최선의 방법은 개별 OS 별 글꼴 파일을 포함하고 현재 사용중인 OS를 감지 한 다음 프로그래밍 방식으로 글꼴을 설치하는 것입니다.

반면에 VB.net의 WPF 응용 프로그램은 사용자의 요구에 부합 할 수 있지만이 위치가 아니라고 느낍니다. WPF 응용 프로그램으로 글꼴을 패키지하는 방법에 대한 자세한 내용은 this MSDN article을 참조하십시오.

+1

버블 버스트가 싫지만 ** 할 수 있습니다 **. 모든 운영 체제에서 작동하지 않을 수 있지만 Win2k 이상에서는 작동합니다. 방법에 대한 내 대답을보십시오. –

관련 문제