VC++ 6.0 SP5 MFC
リストコントロールにタブ文字が表示されません。
---------------------------------------------
リストコントロールに対して
CListCtrl::InsertItem()でアイテムを登録しています。
アイテムの文字列の中にタブ文字が含まれる場合、
そのタブ文字だけがリストに表示されません。
(タブ文字の位置が先頭・中間・末尾に関わらず表示されません)
トリムされているのではなく内部的には保持しているようです。
たとえば
CString value = tab->\t<-tab;
LV_ITEM listitem;
listitem.pszText = value.GetBuffer( value.GetLength() );
InsertItem(&listitem);
として、実際にリストコントロールを表示すると
tab-><-tab
と表示されます。
タブ文字を表示させる方法をご存じでしょうか。
もしくはCListCtrlの仕様上、表示させることは出来ないものなのでしょうか。
※簡単な方法で無理なら表示できなくても構わないので、
パワフルなテクニックは不要です。
> タブ文字が表示されません。
そもそも、タブ文字(?)って表示されるもの?
という突っ込みは置いといて。
リストコントロールではTABに対応していなかったのでは?(自信なし)
表のように位置を合わせるのであれば、レポートビュースタイル(LVS_REPORT)
にしてカラムを使うほうが一般的ではないかな。
maruさん
さっそくのコメントありがとうございます。
> そもそも、タブ文字(?)って表示されるもの?
上記、エディットボックスの場合だと
tab-> <-tab
というようにタブ文字も表示されるんです。
なので他のコントロールでも表示されるのかと思ったのですが
リストコントロールではダメでした。
半角・全角スペースは使えるのに
わざわざタブ文字だけが除外されて表示されます。
> 表のように位置を合わせるのであれば
意図したものではなく、例外パターンなんです。
プログラムのつくりとしては
エディットボックスの入力値がリストコントロールに登録され、
登録済みのリストコントロールを選択すると
その値がまたエディットボックスに代入される
ような感じになっています。
エディットボックスへは直接タブ文字の入力は出来ないんですが
メモ帳からのコピペなどでは出来てしまうんです。
TAB文字(\t)は次のTAB位置まで進めるものであって、表示されるものではないって
言いたいんだけど。
で、リストコントロールにこの次のTAB位置まで進める機能がない。またはTAB位置が
定義されていないんだと思う。
無理やりやるんなら、自分で描画ルーチンを作ってCDC::TabbedTextOut当たりを使う
のかな。