我有一个CListCtrl,有足够的空间容纳所有物品,它们都能正确显示---直到被选中!选择任何条目后,该条目的结尾将被截断并添加省略号:
我不知道为什么会这样。您无法在此图像中看到它,但即使是非常短的条目也会显示此行为,即使上方或下方的条目更长并且完全显示。这是创建控件(和对话框)的.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);
这个让我真的很疯狂。任何提示将非常感谢!谢谢你看看。
答案 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);
}