2012-04-27 8 views
1

Win7 64ビット版のC#でプログラムでTrueTypeフォントをインストールしようとしています。C#AddFontResourceが機能しません - 1フォントのみで呼び出されたときに2つのフォントがインストールされます。

何らかの理由で、私がAddFontResourceを呼び出すと、フォントが正しくインストールされず、フォントを1つしか追加しなくても "2"という戻り値が得られます。

フォントをダブルクリックして通常のWindowsフォントインストールインターフェイスを使用してインストールするとフォントが正しくインストールされるため、適切なフォントであることがわかります。無効なパスでAddFontResourceを呼び出すと、フォントがインストールされていないために正しい戻り値0が返されるため、「何か」を実行してフォントファイルを検索しているように見えますが、何が行われていても動作していません。 "FontFile.ttf" 明らかに存在する

[DllImport("user32.dll")] 
    public static extern int SendMessage(int hWnd, uint Msg, int wParam, int lParam); 
    [DllImport("gdi32")] 
    public static extern int AddFontResource(string lpFileName); 
    public static void InstallFonts() 
    { 
     const int WM_FONTCHANGE = 0x001D; 
     const int HWND_BROADCAST = 0xffff; 
     int Ret = AddFontResource(@"C:\FontFile.ttf"); 
     int Res = SendMessage(HWND_BROADCAST, WM_FONTCHANGE, 0, 0); 
    } 

フォント:

はここで私が使用しているコードです。私が言及したように、AddFontResourceは意味をなさない2を返し、SendMessageは1を返して正しく送信します。

何が間違っている可能性がありますか?

ありがとうございます!

答えて

0

フォントファイルには、通常、複数のフォントが含まれています。たとえば、foo.ttfにはFoo、Foo Bold、Foo Italicなどのフォントが含まれている可能性があります。fontFile.ttfには太字またはイタリック体のフォントが含まれている可能性があるため、戻り値2は正しく、成功を示します。

関連する問題