我的CListCtrl中的选定项目显示省略号,尽管有足够的空间!

时间:2009-08-20 23:44:00

标签: c++ user-interface winapi mfc

我有一个CListCtrl,有足够的空间容纳所有物品,它们都能正确显示---直到被选中!选择任何条目后,该条目的结尾将被截断并添加省略号:

Click for Image

我不知道为什么会这样。您无法在此图像中看到它,但即使是非常短的条目也会显示此行为,即使上方或下方的条目更长并且完全显示。这是创建控件(和对话框)的.rc代码:

IDD_COMBOBOX_DIALOG DIALOGEX 0, 0, 320, 200
STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_VISIBLE | 
    WS_CAPTION | WS_SYSMENU
EXSTYLE WS_EX_APPWINDOW
CAPTION "ComboBox"
FONT 8, "MS Shell Dlg", 0, 0, 0x1
BEGIN
    DEFPUSHBUTTON   "OK",IDOK,263,7,50,16
    PUSHBUTTON      "Cancel",IDCANCEL,263,25,50,16
    CONTROL         "",IDC_LIST1,"SysListView32",LVS_REPORT | LVS_SINGLESEL | 
                    LVS_SORTASCENDING | LVS_ALIGNLEFT | LVS_NOSORTHEADER | WS_BORDER | 
                    WS_TABSTOP,7,78,306,85
END

这是来自InitDialog()的代码,用于设置和填充CListCtrl:

myListCtrl.InsertColumn(0,_T("Allergies"));
FILE *f = fopen("c:\\allergies.txt", "r");
char sz[100];
if (f)
    while (fgets(sz,100,f))
        myListCtrl.InsertItem(0, sz);
if (f)
    fclose(f);
myListCtrl.SetColumnWidth(0,LVSCW_AUTOSIZE);
LVFINDINFO FI;
FI.flags = LVFI_PARTIAL|LVFI_STRING;
FI.psz = _T("A");
int i = myListCtrl.FindItem(&FI);
myListCtrl.SetItemState(i, LVIS_SELECTED | LVIS_FOCUSED, LVIS_SELECTED | LVIS_FOCUSED);
myListCtrl.EnsureVisible(i, FALSE);

这个让我真的很疯狂。任何提示将非常感谢!谢谢你看看。

3 个答案:

答案 0 :(得分:1)

我尝试添加

myListCtrl.SetExtendedStyle(LVS_EX_FULLROWSELECT);
在InsertColumn行之前

,看看是否有帮助。

答案 1 :(得分:0)

MSDN似乎没有说SetColumnWidth是否强制自动重绘内容。

答案 2 :(得分:0)

我认为您输入列表的字符串未经过右调整。尝试

while (fgets(sz,100,f))
{
   CString s(sz);    
   s.TrimRight();
   myListCtrl.InsertItem(0, s);
}