5

CListCtrl を使用して、ListView モードでアイコン付きのアイテムを表示しています。ほとんどの場合、リストには項目が 1 つしかなく、右側に十分なスペースがありますが、私の Win2008 システム (または Win7) では、省略記号を使用してテキストが切り捨てられます (たとえば、"Tank" は "Ta..." に切り捨てられます)。 . これはすべてのデータで発生するわけではありません (一部の長い文字列でも機能します) が、「タンク」の例では繰り返し発生します。また、WinXP システムでは正常に動作します - 常に。

リスト ビューは、rc ファイルを介して作成されます。

CONTROL  "List2",IDC_LIST,"SysListView32",LVS_LIST | WS_BORDER | WS_TABSTOP,320,27,195,38

その後、インスタンス化されます

myListCtrl.SubclassDlgItem( IDC_LIST, this );
myListCtrl.ModifyStyle(LVS_OWNERDRAWFIXED, LVS_SHAREIMAGELISTS | LVS_SINGLESEL | LVS_SHOWSELALWAYS);

ListView_SetBkColor(myListCtrl.m_hWnd,PMAINFRM->GetColor(IDCOLOR_LI_BKG));
ListView_SetTextBkColor(myListCtrl.m_hWnd,PMAINFRM->GetColor(IDCOLOR_LI_BKG));

myListCtrl.SetImageList(PMAINFRM->GetImageList(IDICO_16),LVSIL_NORMAL);
myListCtrl.SetImageList(PMAINFRM->GetImageList(IDICO_16),LVSIL_SMALL);

次の形式の列を 1 つだけ挿入しています。

LV_COLUMN lvc;
lvc.mask = LVCF_FMT | LVCF_SUBITEM;
lvc.fmt = LVCFMT_LEFT;
lvc.iSubItem = 0;
myListCtrl.InsertColumn(0,&lvc);

そして、データが挿入されます

int index = 0;
int nItem = m_lstClass.InsertItem(index,(LPTSTR) strLabel, iIconID));
myListCtrl.SetItemData( nItem, (DWORD)index);
myListCtrl.SetItemState( nItem, LVIS_FOCUSED | LVIS_SELECTED, LVIS_FOCUSED | LVIS_SELECTED);

私はもう試した

myListCtrl.SetColumnWidth(column, LVSCW_AUTOSIZE_USEHEADER); 

としても

myListCtrl.SetColumnWidth(column, LVSCW_AUTOSIZE); 

そして、

myListCtrl.SetExtendedStyle(LVS_EX_AUTOSIZECOLUMNS);

トリックもしなかった。

何か案は?

ミカ

4

4 に答える 4

1

私はこの問題を抱えていましたが、ついに答えを見つけたと思います。私の場合の問題は、ダイアログにこのスタイルで指定されたフォントがあることでした:

IDD_DIALOG_TurnOnOffRecords DIALOG 0, 0, 376, 263
STYLE DS_SETFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Turn on off records"
FONT 8, "@Arial Unicode MS"
.
.
.

FONT行とDS_SETFONTフラグを削除すると、CListCtrl切り捨てられずにテキストが再び表示されるようになりました。

私の推測では、異なるフォントを使用してテキストの幅を測定し、実際に描画を行っているため、切り捨てが発生しています。

于 2013-04-12T17:02:08.113 に答える
0

同じダイアログに2つの同一のCListCtrlがあり、1つは省略記号を表示していて、もう1つは省略記号を表示していなかったため、これに髪の毛を引っ張っていました。

私の場合の問題は、_fgetts() を使用してファイルから項目を読み取った結果、挿入した項目に改行文字 (10) が追加されたことであることが判明しました。キャリッジリターンでも同じ問題が表示されました。

項目の長さは問題ではありませんでした。改行文字がある場合、最後の 2 文字が取り除かれ、省略記号に置き換えられます (ただし、少なくとも 1 文字は表示されます)。この問題は、Vista / Windows 7 および同等のサーバー 2008、2008 R2 でのみ発生します。Windows 8 と Server 2012 でも表示されると思いますが、まだテストしていません。

改行文字を削除すると、アイテムが完全に表示されました!

于 2013-09-12T17:14:32.530 に答える
0

私の場合、リストのサイズを変更した後、各行の最後に省略記号が表示されました。リストを埋める前に「SetRedraw (false)」を呼び出し、チェックリストの完了を確定するために「SetRedraw (true)」を呼び出す (Tom Archer のソリューション) というのが解決策でした。

于 2013-09-30T17:58:51.070 に答える