トップページ > 記事閲覧
GetDrawStringWidthToHandleがエラーになる
名前:bane 日時: 2021/08/02 17:30

質問です。 文字列を描画したときのドット幅を得る関数 GetDrawStringWidthToHandle() についてですが、 事前に非同期読み込みを有効にする関数 SetUseASyncLoadFlag(TRUE) を実行すると常に-1が返ってきます。 ライブラリを最新版にしても同様で、引数をFALSEにすると正常に動作します。 自分の環境だけでしょうか?
メンテ

Page: 1 |

Re: GetDrawStringWidthToHandleがエラーになる ( No.1 )
名前:管理人 日時:2021/08/04 01:01

すみません、恐らく CreateFontToHandle を実行する際も SetUseASyncLoadFlag( TRUE ); で 非同期読み込みが ON になっているのではないでしょうか? CreateFontToHandle は『読み込み処理』ではないのですが、時間が掛かる処理ということで 非同期実行が有効になっています なので SetUseASyncLoadFlag( TRUE ) ; int FontHandle = CreateFontToHandle( NULL, 32, 10 ) ; int Width = GetDrawStringWidthToHandle( "あいうえお", -1, FontHandle ) ; ↑ こちらのように CreateFontToHandle の前に SetUseASyncLoadFlag( TRUE ) ; が実行され 非同期読み込みが ON になっていると GetDrawStringWidthToHandle が呼ばれた時点では まだフォントハンドルの作成が完了していない状態となり、GetDrawStringWidthToHandle が 失敗して -1 が返ってきます なので、 SetUseASyncLoadFlag( FALSE ) ; int FontHandle = CreateFontToHandle( NULL, 32, 10 ) ; int Width = GetDrawStringWidthToHandle( "あいうえお", -1, FontHandle ) ; ↑ こちらのように、CreateFontToHandle を実行する前には SetUseASyncLoadFlag( FALSE ) ; を 実行して非同期読み込みを OFF の状態にしておいてください m(_ _;m
メンテ
Re: GetDrawStringWidthToHandleがエラーになる ( No.2 )
名前:bane 日時:2021/08/04 13:17

CreateFontToHandleが非同期処理に対応していることを見落としていました。 無事に解決しました。ありがとうございます。
メンテ

Page: 1 |

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

   クッキー保存