DrawTextExでタブを表示するには

解決


初心者  2005-02-26 14:31:18  No: 56544  IP: 192.*.*.*

お久しぶりです。

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 08:45:03  No: 56545  IP: 192.*.*.*

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

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

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

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

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

編集 削除
初心者  2005-03-01 21:47:48  No: 56546  IP: 192.*.*.*

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

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

編集 削除
瀬戸っぷ  2005-03-01 22:32:45  No: 56547  IP: 192.*.*.*

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

編集 削除
初心者  2005-03-01 23:15:45  No: 56548  IP: 192.*.*.*

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

編集 削除
初心者  2005-03-02 22:02:44  No: 56549  IP: 192.*.*.*

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

編集 削除
初心者  2005-03-02 22:38:29  No: 56550  IP: 192.*.*.*

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

編集 削除