お久しぶりです。
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);
このソースで実験してみましたが展開できますよ。
このソースだけでは何とも言えませんが、次に挙げることを確かめてみてください
1.
DrawTextEx は WM_PAINT で呼んでいると思うのですが、
dtp の設定はどこでしていますか?
もし WM_PAINT で設定していないのなら
DRAWTEXTPARAMS dtp; を
static DRAWTEXTPARAMS dtp; にしてください。
2.
rc の値が代入されているか。(GetClientRect 等をしているか)
この2つとも違うのなら ソースを省略せずに書いてくだ鱸さい。
ごめんなさい。質問の趣旨を間違えたと思います。
展開できないというより、場所によっては(何文字目にあるかによって)タブの長さがdtpで設定したときの長さよりも短くなってしまいます。
DrawText()の仕様だとは思うのですが、この長さを取得したりできないでしょうか?
ハズしているかも知れませんが…
DCに選択されているフォントは固定ピッチですか?プロポーショナルですか?
DCはBeginPaint()で取得していますが・・・。
長さが変わるということはおそらくプロポーショナルなのではないかと・・・。
すいません。プロポーショナルとか固定ピッチについて理解してないと思います。よろしければどなたかご教授ください。
編集 削除何度も何度もすいませんでした。
瀬戸っぷさん、それが原因でした。無事解決です。
ありがとうとございました。