DrawTextExでタブを表示するには

解決


初心者  2005-02-26 23:31:18  No: 56544

お久しぶりです。

DrawTextEx()で、入力された文字列を表示するプログラムを作っているのですが、次のようにソースを書いたとき、何かを入力した後のタブ文字がうまく展開されません。
どなたか教えてください。

DRAWTEXTPARAMS dtp;
LPSTR T_buf="a\tbcde";

dtp.cbSize=sizeof(DRAWTEXTPARAMS);
dtp.iLeftMargin=50;
dtp.iRightMargin=0;
dtp.iTabLength=8;

DrawTextEx(hdc,T_buf,-1,&rc,DT_EDITCONTROL | DT_EXPANDTABS | DT_TABSTOP | DT_NOPREFIX,&dtp);


Azzy  2005-03-01 17:45:03  No: 56545

このソースで実験してみましたが展開できますよ。

このソースだけでは何とも言えませんが、次に挙げることを確かめてみてください

1.
DrawTextEx は WM_PAINT で呼んでいると思うのですが、
dtp の設定はどこでしていますか?
もし WM_PAINT で設定していないのなら
DRAWTEXTPARAMS dtp; を
static DRAWTEXTPARAMS dtp; にしてください。

2.
rc の値が代入されているか。(GetClientRect 等をしているか)

この2つとも違うのなら ソースを省略せずに書いてくだ鱸さい。


初心者  2005-03-02 06:47:48  No: 56546

ごめんなさい。質問の趣旨を間違えたと思います。

展開できないというより、場所によっては(何文字目にあるかによって)タブの長さがdtpで設定したときの長さよりも短くなってしまいます。
DrawText()の仕様だとは思うのですが、この長さを取得したりできないでしょうか?


瀬戸っぷ  2005-03-02 07:32:45  No: 56547

ハズしているかも知れませんが…
DCに選択されているフォントは固定ピッチですか?プロポーショナルですか?


初心者  2005-03-02 08:15:45  No: 56548

DCはBeginPaint()で取得していますが・・・。
長さが変わるということはおそらくプロポーショナルなのではないかと・・・。


初心者  2005-03-03 07:02:44  No: 56549

すいません。プロポーショナルとか固定ピッチについて理解してないと思います。よろしければどなたかご教授ください。


初心者  2005-03-03 07:38:29  No: 56550

何度も何度もすいませんでした。
瀬戸っぷさん、それが原因でした。無事解決です。
ありがとうとございました。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加