掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
テキスト(フォント)の幅を取得するには? (ID:81948)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
岡田さん回答ありがとうございます。 GetTextExtentPoint32を早速使ってみました。 文字列がリッチテキストボックスの端に達した位置を取得し、改行コードを 入れようと思ったのですが、結果から言うとうまくいきませんでした。 リッチテキストボックスの幅と、APIを使って取得した一行分のテキストの幅の 値が一致しないのです。 GetTextExtentPoint32の引数にリッチテキストボックスのハンドルを指定したところ、幅は取得できましたがフォントサイズを変えても幅は変わりません。 調べていると以下の記事があり(VCですが)、ハンドルにフォントを指定しないといけないようです。 http://216.239.53.104/search?q=cache:tjhkHbjz7m4J:cgi23.plala.or.jp/a-w-h/mfc/horizon.html+%E3%83%87%E3%83%90%E3%82%A4%E3%82%B9%E3%82%B3%E3%83%B3%E3%83%86%E3%82%AD%E3%82%B9%E3%83%88%E3%81%AB%E3%83%95%E3%82%A9%E3%83%B3%E3%83%88&hl=ja&lr=lang_ja&ie=UTF-8 そこでCreateFontでフォントを作成し、SelectObjectでリッチテキストボックスのハンドルに 割り当ててGetTextExtentPoint32を呼び出したところ、フォントサイズを大きくすると、幅も大きくなりました。 しかしリッチテキストボックスの幅が10500twipsに対し、取得できた幅が17640とずいぶん違います。 単位の考え方が違うのか、取得方法に誤りがあるのかわかりません。 コードをのせました(加工したので誤りがあるかも) ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' Dim hDC as Long Dim lnghFont1, lnghFont2 as Long Dim udtSize as TSize Lich1.SelStart = 1 'フォント名、フォントサイズ取得のため Lich1.SelLength = 1 '最初の一文字(フォントは均一) lnghFont1 = CreateFont(0, 0, 0, 0, 0, False, False, False, _ 1, False, False, False, False, Lich1.SelFontName) MsgBox Lich1.SelFontSize '10.5 MsgBox Lich1.SelFontName 'MS P明朝 hDC = GetDC(Lich1.hwnd) lnghFont2 = SelectObject(hDC, lnghFont1) Call GetTextExtentPoint32(hDC, Lich1.Text, LenB(Lich1.Text), udtSize) Call SelectObject(hDC, lnghFont2) 'Call DeleteObject(lnghFont1) 'なぜかエラーがでるけどいまは無視 Call ReleaseDC(Lich1.hwnd, hDC) '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 以上よろしくお願いします。
←解決時は質問者本人がここをチェックしてください。
戻る
掲示板システム
Copyright 2020 Takeshi Okamoto All Rights Reserved.