1

Win7 64 ビットの C# に True-Type フォントをプログラムでインストールしようとしています。

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

フォントをダブルクリックして通常の Windows フォント インストール インターフェイスを使用してインストールすると、フォントが正しくインストールされるので、適切なフォントであることがわかります。無効なパスで AddFontResource を呼び出すと、フォントがインストールされていない場合に正しい 0 が返されるため、「何か」を実行してフォント ファイルを見つけているように見えますが、何をしていても機能しません。

私が使用しているコードは次のとおりです。

    [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);
    }

フォント「FontFile.ttf」は明らかに存在します。前述したように、AddFontResource は意味をなさない 2 を返し、SendMessage は 1 を返すため、正しく送信されています。

何がうまくいかないのでしょうか?

ありがとう!

4

1 に答える 1

0

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

于 2014-05-28T22:42:53.670 に答える