none
OSのデフォルトフォントを知りたい RRS feed

  • 質問

  • お世話になります。

    アプリケーションのローカライズ対応を行うことになったのですが、
    アプリケーションのデフォルトフォントを、知りたいと思っています。

    現在、アプリケーションでは、「MS 明朝」とハードコーディングしているのですが、
    各国にあわせたフォントを初回に設定したいと思っています。

    WORDPADでは、日本語OSの場合、「MS 明朝」なのですが、

    タイ語OSの場合は、「Caribli」で、タイ語を入力するときは「CordiaUPC」になります。

    APIから取得できますか。

    p.s.
    ローカライズ対応といっても、メニュー、ダイアログなどの文字を対応するだけで大した内容ではありませんが、
    フォントのコンボボックスに表示されるのが「MS 明朝」と表示されるので、何とかならないかなと思っています。

    2014年1月23日 6:05

すべての返信

  • Brilliaさん

    こんにちは。

    WindowsAPIだと、GetStockObject(SYSTEM_FONT)が使えると思います。

    HGDIOBJが返却されるのでHFONTに変換して使って下さい。

    .NETの場合だと、

    System.Windows.Forms.SystemInformation.MenuFontを使ったりできます。


    2014年1月23日 7:19
  • ところで「MS 明朝」が返されるAPIってあるんでしょうか。UIならサンセリフでしょうし…。そう考えると、ワードパッドなりInternet Explorerなりがアプリケーションとして各国に対応するフォント名を持っているのであって、Windows OSとしてはそこまでの情報は返さないのではと思いました。

    2014年1月23日 8:09
  • 質問文がわかりにくかったです。すみません。

    知りたいのは、たとえば、WORDPADでユーザーが使用するフォントの種類のデフォルトが、

    日本語OS:MS 明朝

    タイ語OS:、「Caribli」で、タイ語を入力するときは「CordiaUPC」

    となるのですが、これらは、どこからの情報で取得できるものなのでしょうか。

    2014年1月23日 8:25
  • これが正解かは自信ありませんが、

    ワードパッドのリソースファイル(C:\Program Files\Windows NT\Accessories\ja-JP\wordpad.exe.mui)のString Table 219番に「MS 明朝」とあります。

    ですので、質問者さんのローカライズしようとしているアプリケーションも、各言語ごとに適切なフォントを調べて保持するべきなのではと考えています。

    2014年1月23日 8:39
  • ご返事ありがとうございます。

    調査中ですが、日本語OSに、複数の言語を入力して、IMEにて切り替えると、
    WORDPADのフォントのコンボボックスは、言語に合わせた対象フォントに切り替わることが分かりました。

    MS-WORDでも切り替わるのですが、言語によっては異なるフォントが選択されることが分かりました。

    で、アプリケーション側で持っているのかなと思ってきたのですが。。。

    で、さらに質問となるのですが、

    1.WORDPAD.EXE.MUIファイルの中身を見たいのですが、なにかしらアプリが必要でしょうか。
     MUIファイル自体初めて知ったので

    2.IMEで言語切り替え時にアプリケーション側でメッセージを受け取る方法と、選択されている言語はどのようにして取得できるものなのでしょうか。

    2014年1月23日 9:36
  • Visual Studioで開けます。ファイルを開くアプリケーションの選択で「リソースエディター」を選択するだけです。

    切り替えたのは本当にIMEなのでしょうか? 同時に別の言語情報も切り替わっていませんか?

    2014年1月23日 10:00
  • ご参考:アプリケーションのグローバライズとローカライズ

    何となく、グローバライズのやり方そのものを間違っているような気がします。この投稿からは、「アプリケーション起動時に、言語設定などを動的に取得する」ようにしようとしていると思われます。各国語用のリソースを用意しておき、実行環境にあわせて選択します。もし、アプリケーションに静的に持っているのでなければ、Windows Vista 以降ではメモ帳のデフォルト フォントは「MS 明朝」ではなく、「メイリオ」だと思います。


    Jitta@わんくま同盟

    2014年1月23日 12:13
  • Windows VISTA以降はメイリオが標準フォントの記載を調査中に見ていたのですが、
    ほかのソフトはどうしているのかを調査してみると、MS-WORD、WORDPADは、「MS 明朝」だったので、
    なにかしらシステム的にデフォルトがあるのかなって思って、質問させていただきました。

    >切り替えたのは本当にIMEなのでしょうか? 同時に別の言語情報も切り替わっていませんか?

    地域と言語-キーボード変更からあらかじめ対象の言語を追加しておいて、
    IMEの切り替えは、「ALT-SHIFT」で言語を切り替えているだけです。

    WORDPAD、MS-WORDでは、「ALT-SHIFT」で言語を切り替えると、
    入力フォントが切り替わるので、同じような仕組みが実装できればなと思っています。

    2014年1月24日 0:14
  • どういうアプリケーションなのかわかりませんが、
    最初の投稿によると「メニュー、ダイアログなどの文字を対応する」はずなのに、ワープロの編集領域の動作を参考にするのは、なんだかそもそも違うのでは。

    • 回答の候補に設定 星 睦美 2014年1月24日 5:08
    • 回答の候補の設定解除 星 睦美 2014年1月24日 8:43
    2014年1月24日 2:48
  • 質問内容が間違った記述をしてしまい申し訳ございません。

    新たにスレッドをたてて質問を提出したいと思います。

    2014年1月24日 4:36
  • 質問文には

    フォントのコンボボックスに表示されるのが「MS 明朝」と表示されるので、何とかならないかなと思っています。

    とあるのでワープロの編集領域の動作を参考にするのはさして的外れな対応方法ではないと思います。
    質問者さんが求めているのが

    • ワードパッドのような、各言語に応じた文書作成に適したフォント
    • メモ帳のような、とりあえず固定ピッチのフォント
    • デスクトップテーマで選択されたUI用のフォント

    どれを求めているのか、だと思います。
    # それでもあえてワードパッドやOffice Wordを参考にされているので文書作成するんですよね?

    2014年1月24日 8:06
  • ご返事ありがとうございます。

    どう質問するべきか、悩んでおりました。

    ドキュメントベースアプリケーションを開発しており、ユーザーが入力するフォントを、
    入力言語に適したフォントに変更できればと思っています。

    ワードパッドで調査したところ、

    タイ語OSのデフォルトフォント(タイ語入力時)、「CordiaUPC」
    日本語osで、IMEをタイ語に切り替えると同時に、「CordiaUPC」に変更されました。※但し、MS-WORDの場合は、「Cordia New 」

    MS-WORDの結果からみると、入力言語に適したフォントは、アプリケーション単位にもっているのかなと思い、

    ・IMEの現在の入力言語の情報の取得
    ・入力言語の切り替えの通知

    がわかれば、あとは、自身のアプリケーションでフォントを設定することで、対応できるのかなとおもいました。

    で、次に「IMM API」、「Text Service Framework」など関係がありそうな情報を読んでみたのですが、
    理解ができず、またポイントがずれているのではと思いながら、中途半端な情報とまた整理できずに質問してしまいました。

    新たにスレッドをたてて質問しようと思ったのですが、佐祐理さんの返信の内容をもとに、整理できたつもりなので
    このスレッドで引き続き質問させてください。

    2014年1月24日 9:20
  • 個人的には、

     1.UIには「MS Shell Dlg 擬似フォント」を使用する。

    としています。Windows2000から、FontSubstitutes機能が導入されましたが、
    そのまんま機能しているものと信じているわけですね。
    まぁこれでDLGのEditなんかも何とかしてくれるわけで、
    フォントマッパーに頼りっきりというわけです。

    字面はGetSystemDefaultLCID()で取得したコード毎に用意したリソース供給専用DLL
    (全部は無理ですけどね)を、AfxSetResourceHandle()で切り替えてます。
    力技と言うか、やや古いやり方なのかもしれませんが、問題が起きたことはありません。
    さて、対象のアプリが「その国の文字列を編集する」機能
    がある場合、デフォルトのフォントに困るわけですが、

     2.HDCにデフォルトで選択されているフォントを利用して、
      まぁ、サイズぐらいは変えとくか・・。

    とするかもしれません。
    一口に「国際化」「ローカライズ」と言いますが、結構面倒ですよね。

    以下は参考

    http://msdn.microsoft.com/ja-jp/library/aa292134(v=vs.71).aspx

    2014年1月24日 9:58
  • こんばんは。
    職業プログラマーではなく、また最近のWindows環境に精通しているというわけでもないので、的外れな答えかもしれませんが・・・。

    アプリケーション、というより OS のデフォルトフォントを取得する、という方向で API の SystemParameterInfo を SPI_GETNONCLIENTMETRICS フラグで呼び出して、非クライアント領域のフォントを流用する、という方法では駄目でしょうか?

    キャプション、ミニキャプション、メニュー、ステータスバーのフォントが取得できますので。

    2014年1月25日 14:15
  •  ローカライズというより、アプリケーションを国際化対応する(グローバライズ)の方向のような気がするんだけどなぁ。

     以前の投稿で紹介した「アプリケーションのグローバライズとローカライズ」のページに、「アプリケーションのグローバル化(複数のカルチャをサポートするアプリケーションの作成について説明するページへのリンクを提供します。 )」とあって、その先「Windows フォームのグローバル化(Windows フォームのグローバリゼーションに関連するヘルプ ページへのリンクを示します。)」→「Windows フォームおよびコントロールの国際対応フォント(Windows フォームで各種言語の文字を表示するためにフォントを選択する時期と方法について説明します。 ) 」と進むと、次のように書かれています。

    国際対応のアプリケーションでフォントを選択する方法としては、できるだけフォント フォールバックを使用することをお勧めします。フォント フォールバックとは、文字が属する言語をシステムが判断することを指します。

    この機能を利用するには、フォームまたはその他の要素の Font プロパティは設定しないようにしてください。アプリケーションが、オペレーティング システムのローカライズ言語ごとに異なる既定のシステム フォントを自動的に使用します。アプリケーションの実行時、システムにより、オペレーティング システムで選択された地域に適したフォントが自動的に設定されます。

    この、「アプリケーションが、オペレーティング システムのローカライズ言語ごとに異なる既定のシステム フォントを自動的に使用します。」ということを実現したいのではないのでしょうか?


    画面の設定にこだわるなら、ご参考:SystemFonts クラス


    Jitta@わんくま同盟

    2014年1月27日 12:41