トップページ > 記事閲覧
Systemフォントについて
名前:はむ 日時: 2019/11/18 22:30

プログラミング初心者なので、必要な情報が抜けていたらすみません。補足します。 下のコードを実行すると、アクセスエラーが発生するようです。 ちなみに、System2ハンドルのフォントの大きさを40ほどにするとエラーは起きず無事表示されます。これは仕様なのでしょうか...。 エラーはちょっと困りますので、改善等よろしくおねがいします。 コード(Main.cpp MorseCode.sln): #define WINDOW_X 1220 #define WINDOW_Y 600 // プログラムは WinMain から始まります int WINAPI WinMain(HINSTANCE h1, HINSTANCE hP, LPSTR lpC, int nC) { //ウィンドウモードにする ChangeWindowMode(TRUE); //ウィンドウサイズを変更する SetGraphMode(WINDOW_X, WINDOW_Y, 32); //背景色を設定する SetBackgroundColor(100, 149, 237); //DXライブラリ初期化 if (DxLib_Init() == -1) return -1; int System2 = CreateFontToHandle("System", 200, -1, DX_FONTTYPE_ANTIALIASING); //<-DX_FONTTYPE_ANTIALIASINGを消去しても同じエラー DrawStringToHandle((WINDOW_X - GetDrawStringWidthToHandle("LISTEN", strlen("LISTEN"), System2)) / 2, 80, "LISTEN", ~0U, System2); //待機 WaitKey(); //DXライブラリの終了処理 DxLib_End(); return 0; } エラー表示: により 0x00468343 で例外がスローされました (MorseCode.exe 内): 0xC0000005: 場所 0x0F473020 の読み取り中にアクセス違反が発生しました が発生しました 実行環境: Windows10 Visual Studio Express 2017 for Windows Desktop
メンテ

Page: 1 |

Re: Systemフォントについて ( No.1 )
名前:管理人 日時:2019/11/19 00:47

すみません、一部のフォントでメモリの不正なアクセスが発生する状態となっていました 修正版をアップしましたので、よろしければこちらの暫定最新バージョンをお使いください m(_ _;m https://dxlib.xsrv.jp/temp/DxLibVCTest.zip // Windows版 VisualC++ 用 https://dxlib.xsrv.jp/temp/DxLibBCCTest.zip // Windows版 BorlandC++ 用 https://dxlib.xsrv.jp/temp/DxLibBCC2Test.zip // Windows版 C++ Builder 10.3 用 https://dxlib.xsrv.jp/temp/DxLibGCC_MinGWTest.zip // Windows版 MinGW 用 https://dxlib.xsrv.jp/temp/DxLibDotNet.zip // Windows版 .NET用 https://dxlib.xsrv.jp/temp/DxLibMakeTest.zip // ソース (中身を既存のライブラリのファイルに上書きして『リビルド』をして下さい)
メンテ
Re: Systemフォントについて ( No.2 )
名前:はむ 日時:2019/11/20 00:52

迅速な対応感謝します。 動作確認してみましたところ、フォントの大きさが241までSystemフォントですが、242からMSゴシック(見た目で判断しただけですが)になっていました。 フォントの大きさも150〜241までほとんど同じ大きさで表示され、指定したサイズになっていないようでした。 試しに、Scriptフォントで描いてみましたがこちらは正しく描画されているようでした。 個人的にとてもSystemフォントを気に入っているので改善してほしいです。 特に急いでいるわけではないので、管理人さんのご都合がよい時に是非お願いします。
メンテ
Re: Systemフォントについて ( No.3 )
名前:管理人 日時:2019/11/21 00:35

Systemフォントはビットマップフォントなので、用意されていないサイズを指定されると 作成に失敗して標準フォントであるMSゴシックで作成されてしまうようです ( 同じく用意されていないサイズに対しては一番近いサイズのビットマップが選ばれるために  150〜241の間は大きさに変化があまりない…のかもしれません ) 文字列を拡大して描画するための関数 DrawExtendStringToHandle を使用することで 作成するフォントハンドルのサイズ自体を大きくしなくても大きい文字を描画できますので、 よろしければこちらの関数で代用してみてください m(_ _)m // フォントハンドルを使用して文字列を拡大描画する int DrawExtendStringToHandle( int x, int y, double ExRateX, double ExRateY, char *String, unsigned int Color, int FontHandle, unsigned int EdgeColor = 0 , int VerticalFlag = FALSE ) ; // フォントハンドルを使用して書式指定文字列を拡大描画する int DrawExtendFormatStringToHandle( int x, int y, double ExRateX, double ExRateY, unsigned int Color, int FontHandle, char *FormatString, ... ) ; 他にも回転描画や変形描画の関数もありますので、よろしければお使いください // フォントハンドルを使用して文字列を回転描画する int DrawRotaStringToHandle( int x, int y, double ExRateX, double ExRateY, double RotCenterX, double RotCenterY, double RotAngle, unsigned int Color, int FontHandle, unsigned int EdgeColor, int VerticalFlag, char *String ) ; // フォントハンドルを使用して書式指定文字列を回転描画する int DrawRotaFormatStringToHandle( int x, int y, double ExRateX, double ExRateY, double RotCenterX, double RotCenterY, double RotAngle, unsigned int Color, int FontHandle, unsigned int EdgeColor, int VerticalFlag, char *FormatString, ... ) ; // フォントハンドルを使用して文字列を変形描画する int DrawModiStringToHandle( int x1, int y1, int x2, int y2, int x3, int y3, int x4, int y4, unsigned int Color, int FontHandle, unsigned int EdgeColor, int VerticalFlag, char *String ) ; // フォントハンドルを使用して書式指定文字列を変形描画する int DrawModiFormatStringToHandle( int x1, int y1, int x2, int y2, int x3, int y3, int x4, int y4, unsigned int Color, int FontHandle, unsigned int EdgeColor, int VerticalFlag, char *FormatString, ... ) ;
メンテ

Page: 1 |

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

   クッキー保存