- ベストアンサー
未インストールのフォントプレビュー実現方法
いろいろサイトなどを検索してみたのですが、実現方法がわからなかったので教えてください。 現在、VisualStudio2008でMFCを利用して開発しています。 タイトルの通り、未インストールフォントをプレビューできたりするフリーソフトがいくつもあります。 インストール済みのフォントのプレビューは実現できそうなのですが、未インストールフォントに関しては、皆目見当がつきません。 すこし強引なような気がしますが、自分の想像では未インストールフォントファイルを一時的にインストールして、プレビューが終了したらアンインストールしているのではないかと考えているのですが、実際どのように処理されているのでしょうか?
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
はじめまして。 未インストールのプレビュー機能を.net FrameWork1.1, C#のwindowsアプリで作成した経験があります。 そのときはAddFontResourseExでフォントの追加、CreateFontで論理フォントの作成、RemoveFontResourseExで削除で機能を作りました。プレビュー機能のみなので AddFontResourseExにして、自身のプロセスのみで使用できるようにしました。 フォント名については関数がなかったので、フォントファイルを解析して、名前をとってくるクラスを自前で作成しています。 以下のサイトを参照しました。 http://www.microsoft.com/typography/SpecificationsOverview.mspx ただ、プレビュー件数が数百フォントとかになると、処理に結構時間がかかってしまいます。 どうにかしてパフォーマンスを向上したいところです。
その他の回答 (1)
- FAY
- ベストアンサー率49% (95/193)
::AddFontResource("Hoge.ttf"); ::SendMessage(HWND_BROADCAST, WM_FONTCHANGE, 0, 0); でシステムにインストールしてないフォントも一時的に 使えるようになります。 見て分かる通り、フォントのファイルが必要ですが。 使い終わったら ::RemoveFontResource("Hoge.ttf"); ::SendMessage(HWND_BROADCAST, WM_FONTCHANGE, 0, 0); で元に戻すべし。 #アプリケーションにフォントをリソースとして #登録している場合にも似たような方法があります。 #実際のアプリケーションがどのような方法をとっているかは分かりません。
お礼
お返事ありがとうございます。 なるほど、AddFontResourceで一時的に使えるようにすればよさそうですね。 あと、問題なのがフォント名をどうやって取得するかが難問のようです。 一旦、AddFontResourceを使用した後インストール済みフォントを列挙して前回列挙した分のデータと比較すればできそうですが、処理が冗長ですしフォントファイルからフォント名を取得できるようにファイル構造を調べて独自で関数を作るしかなさそうです。 もし、フォント名を取得できるような便利な関数等をご存知でしたら教えてください。