38

WinForms アプリケーションにフォントを埋め込んで、フォントがマシンにインストールされることを心配する必要がないようにしたいと考えています。MSDN サイトを少し検索したところ、Scott Hanselman がリンクしている Michael Caplan の (sp?) チュートリアルなど、ネイティブ Windows API 呼び出しの使用に関するヒントがいくつか見つかりました。さて、私は本当にすべてのトラブルを経験しなければなりませんか? アプリのリソース部分だけを使用することはできませんか?

そうでない場合は、おそらくインストール ルートに進みます。その場合、プログラムでそれを行うことはできますか? フォント ファイルを Windows\Fonts フォルダにコピーするだけですか?

ライセンスの問題を認識しています。

4

5 に答える 5

8
// specify embedded resource name
string resource = "embedded_font.PAGAP___.TTF";

// receive resource stream
Stream fontStream = Assembly.GetExecutingAssembly().GetManifestResourceStream(resource);

// create an unsafe memory block for the font data
System.IntPtr data = Marshal.AllocCoTaskMem((int)fontStream.Length);

// create a buffer to read in to
byte[] fontdata = new byte[fontStream.Length];

// read the font data from the resource
fontStream.Read(fontdata, 0, (int)fontStream.Length);

// copy the bytes to the unsafe memory block
Marshal.Copy(fontdata, 0, data, (int)fontStream.Length);

// pass the font to the font collection
private_fonts.AddMemoryFont(data, (int)fontStream.Length);

// close the resource stream
fontStream.Close();

// free up the unsafe memory
Marshal.FreeCoTaskMem(data);
于 2011-05-26T09:29:39.820 に答える
6

ランダムにダウンロードしたフォントを自分のリソースにドラッグ アンド ドロップしたところ、うまくいきました。ただし、ファイルを使用します。これを使用してフォントをインストールすることもできますか?

public Form1()
{
    string filename = @"C:\lady.gaga";
    File.WriteAllBytes(filename, Resources.KBREINDEERGAMES);
    PrivateFontCollection pfc = new PrivateFontCollection();
    pfc.AddFontFile(filename);

    Label label = new Label();
    label.AutoSize = true;
    label.Font = new Font(pfc.Families[0], 16);
    label.Text = "hello world";
    Controls.Add(label);
}
于 2014-07-21T12:12:12.247 に答える
2

アプリのリソース部分だけを使用することはできませんか?

はい。ただし、.NET リソースではなくネイティブ リソースである必要があります (つまり、ネイティブ リソース コンパイラである rc.exe を使用します)。

于 2009-02-17T15:02:19.693 に答える