トップページ > 記事閲覧
CreateFontToHandleが失敗できない?
名前:ひる 日時: 2013/12/27 15:58

CreateFontToHandleの戻り値についての質問です。 リファレンスを見る限り、 CreateFontToHandleで指定したフォントがマシンにインストールされていない場合、 戻り値が「-1」となると思っていたのですが、 実際にはデフォルトのフォントが使用されて、 フォントハンドルが戻り値になってしまいます。 指定したフォントがインストールされていない場合、 また別のフォントを指定したいのですが、 この仕様だと最初に指定したフォントがインストールされているかどうかの判断が出来なくて困っているのですが、何か方法はあるのでしょうか?
メンテ

Page: 1 |

Re: CreateFontToHandleが失敗できない? ( No.1 )
名前:管理人 日時:2013/12/30 21:19

非公開関数の EnumFontNameEx を使用して使用できるフォントを列挙して、その中に目的のフォントが あるかどうかを確認すれば判断できますが、バッファを用意したり for文で比較したりと面倒なので専用の関数を用意しました // 指定のフォント名のフォントが存在するかどうかをチェックする( 戻り値 TRUE:存在する FALSE:存在しない ) int CheckFontName( char *FontName, int CharSet = -1 /* DX_CHARSET_DEFAULT 等 */ ) ; 第一引数にフォント名、第二引数に文字セットを指定します 文字セットは現在次の種類があります #define DX_CHARSET_DEFAULT (0) // デフォルト文字セット #define DX_CHARSET_SHFTJIS (1) // 日本語文字セット #define DX_CHARSET_HANGEUL (2) // 韓国語文字セット #define DX_CHARSET_BIG5 (3) // 繁体文字セット #define DX_CHARSET_GB2312 (4) // 簡体文字セット 特殊なフォントでなければデフォルト引数の -1 のままで問題ありません ( -1 を渡した場合は DX_CHARSET_DEFAULT を指定した場合と同じになります ) 戻り値が TRUE であれば FontName で指定したフォントが存在して、FALSE だった場合はフォントが無いことになります if( CheckFontName( "MS ゴシック" ) == TRUE ) { // MS ゴシック が存在する } こちらに CheckFontName を追加したバージョンをアップしましたので、よろしければお使いください 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)」をして下さい)
メンテ
Re: CreateFontToHandleが失敗できない? ( No.2 )
名前:ひる 日時:2013/12/31 01:26

ありがとうございます。 早速用意して頂いた関数を使用してみたのですが、 存在しているはずなのにフォントによっては戻り値がFALSEになるものがあります。 例えば、"MS ゴシック"はTRUEが返ってきますが、 "Meiryo"、"@MS ゴシック"だとFALSEが返ってきてしまいます。 これらのフォントはどれも存在している事を確認していますし、 CreateFontToHandleでは問題なく使用できています。 また、第二引数はどれも設定していません(デフォルト引数)。
メンテ
Re: CreateFontToHandleが失敗できない? ( No.3 )
名前:管理人 日時:2013/12/31 05:45

"@MS ゴシック"のような先頭に@が付く縦書きフォント名は弾いていたので弾かないように変更しました 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)」をして下さい) "Meiryo"ですが、こちらはメモ帳のメニュー『書式』→『フォント』のフォント変更ダイアログの フォント一覧を見る限りですと "Meiryo UI" と、後に " UI" が付くようですが、 " UI" が付かない "Meriyo" というフォントもあるのでしょうか?
メンテ
Re: CreateFontToHandleが失敗できない? ( No.4 )
名前:ひる(解決) 日時:2013/12/31 15:27

対応ありがとうございます。 用意して頂いた関数が問題なく使用できました。 "Meiryo"はこちらのミスでした。 申し訳ございません。
メンテ

Page: 1 |

題名
名前
コメント
パスワード (記事メンテ時に使用)

   クッキー保存