トップページ > 過去ログ > 記事閲覧
フォントハンドルの生成について
名前:tozica 日時: 2012/11/09 04:57

いつもお世話になっています。 現在、以下のフォントをゲーム上で使おうとしているのですが、 フォント名をどのように指定してもフォントハンドルが正しく生成されないという状況が起きています。 ttp://w w w.fontspace.com/diogene/bienetresocial 詳しく状況を説明すると、このフォントには Bienetresocial.ttf Bienetresocial Bold.ttf の2種類があり、どちらもフォントビューワ上では "Bienetresocial" と表示されます。 しかし、DXライブラリにおいてEnumFontNameを用いてフォント名を確認すると、 前者はフォントのリストに含まれておらず、 後者は "Bienetresocial Bold" と表示されており、 また、CreateFontToHandleの引数として "Bienetresocial" "Bienetresocial Bold" のどちらを与えても、 フォントハンドルが正しく生成されず、MSゴシック表示になってしまっています。 実際のプログラム上では AddFontMemResourceEx を用いて埋め込みファイルからロードしているのですが、 PC自体にフォントをインストールした状態で試しても同じ現象が発生するため、 今回の症状に AddFontMemResourceExは無関係だと考えています。 この症状について、何か意見を頂ければ幸いです。 よろしくお願いいたします。

Page: 1 |

Re: フォントハンドルの生成について ( No.1 )
名前:Will 日時:2012/11/09 07:53

実行時のログを貼って下さい。 確認したいこと CreateFontToHandleの戻り値は-1ではないのですね? CreateFontToHandle実行時の引数を提示して下さい。 (サイズ、太さ、タイプ) 正しく表示されない場合の文字列を提示して下さい。 (そのフォントは半角英数字記号しかないようですが全角文字を出力しようとしていませんよね?)
Re: フォントハンドルの生成について ( No.2 )
名前:管理人 日時:2012/11/10 16:32

Bienetresocial が EnumFontName で列挙されない原因は日本語文字セットに対応していないからです ( EnumFontName はデフォルトでは日本語文字セットを含むフォントしか列挙しません ) ( 因みに私の環境では Bold の方も列挙されませんでした ) DXライブラリの内部の処理を変更してMSゴシックにならないようにしましたので、 よろしければお試しになってみてください m(_ _)m http://homepage2.nifty.com/natupaji/DxLib/DxLibVCTest.exe // VisualC++ 用 http://homepage2.nifty.com/natupaji/DxLib/DxLibBCCTest.exe // BorlandC++ 用 http://homepage2.nifty.com/natupaji/DxLib/DxLibGCC_DevCppTest.exe // Dev-C++ 用 http://homepage2.nifty.com/natupaji/DxLib/DxLibGCC_MinGWTest.exe // MinGW 用 http://homepage2.nifty.com/natupaji/DxLib/DxLibDotNet.zip // .NET用 http://homepage2.nifty.com/natupaji/DxLib/DxLibMakeTest.exe // ソース (中身を既存のライブラリのファイルに上書きして、BCCをお使いの 場合は『再構築』を、VCをお使いの場合は『リビルド』を、 Dev-C++をお使いの方は「Rebuild All(Ctrl+F11)」をして下さい) <本件の現象と今回の処理変更までの経緯にご興味がありましたら読んでください> DXライブラリでは ChangeFont の第二引数や CreateFontToHandle の第五引数にある非公開引数 CharSet で 特に文字セットの指定が無い場合は日本語文字セットのフォントとしてフォントを作成しようとするのですが、 日本語文字セットが無いフォントでも Win32API の CreateFont では一応フォントの作成は成功してしまい ただ、それで作成されるフォントはMSゴシックなどOSのデフォルトフォントになってしまうという仕様があります Win32API の CreateFont で失敗しないのでは作成されたフォントがMSゴシックかどうか判断する手段が無い、 ということで今までは「日本語文字セットの無いフォントを使用される際は非公開引数 CharSet で対処してください」 とご説明する流れだったのですが、今回指定の文字セット( デフォルトでの「指定」は日本語文字セット )が 存在するフォントなのかどうかを事前に EnumFontName でチェックして、無い場合はデフォルト文字セットで フォントを作成するようにすることでMSゴシックのフォントハンドルが作成されてしまうという現象を解消しました というか何で今までこの方法に気づかなかったのか謎です tozicaさんのお書き込みに EnumFontName での確認をされたという内容が無かったら今回も思いついて いなかったかもしれません・・・
Re: フォントハンドルの生成について ( No.3 )
名前:tozica(解決済み) 日時:2012/11/11 17:05

>Willさま そうですね、それらの情報は提示すべきでした 以後気をつけたいと思います >管理人さま 無事、表示を行うことができました。 なるほど、欧文フォントだったことが原因だったのですね…… 迅速な対応、本当にありがとうございました。

Page: 1 |