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

C++ 我的CListCtrl中的选定项显示省略号,尽管有足够的空间!,c++,user-interface,winapi,mfc,C++,User Interface,Winapi,Mfc,我有一个CListCtrl,有足够的空间放置所有的项目,它们都能正确显示——直到被选中!一旦选择任何条目,该条目的结尾将被截断并添加省略号: 我不知道为什么会这样。您在此图像中看不到它,但即使非常短的条目也会显示此行为,即使上面或下面的条目更长并且完全显示。下面是创建控件(和对话框)的.rc代码: 下面是InitDialog()中的代码,用于设置和填充CListCtrl: myListCtrl.InsertColumn(0,_T("Allergies")); FILE *f = fopen("

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

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

下面是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);
这件事真让我抓狂。任何提示都将不胜感激!谢谢您的关注。

我会尝试添加

myListCtrl.SetExtendedStyle(LVS_EX_FULLROWSELECT);
在InsertColumn行之前,查看是否有帮助。

我会尝试添加

myListCtrl.SetExtendedStyle(LVS_EX_FULLROWSELECT);

在InsertColumn行之前查看是否有帮助。

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

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

我认为您在列表中输入的字符串没有正确修剪。试一试

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

我认为您在列表中输入的字符串没有正确修剪。试一试

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

冰冰!我们赢了!这就成功了。现在——这不是一只虫子吗?!我到底为什么想要这种奇怪的违约行为?啊,谢谢。我在InitDialog()中添加了这一行作为最后一行,但效果很好。实际上应该使用
myListCtrl.SetExtendedStyle(myListCtrl.GetExtendedStyle()| LVS_EX_FULLROWSELECT)以防在某个时候设置了任何其他LVS_EX_*样式。这一次可能没有什么意义,但这是一个好习惯,可以防止将来的错误!我们赢了!这就成功了。现在——这不是一只虫子吗?!我到底为什么想要这种奇怪的违约行为?啊,谢谢。我在InitDialog()中添加了这一行作为最后一行,但效果很好。实际上应该使用
myListCtrl.SetExtendedStyle(myListCtrl.GetExtendedStyle()| LVS_EX_FULLROWSELECT)以防在某个时候设置了任何其他LVS_EX_*样式。这一次可能并不重要,但这是一个好习惯,可以防止将来的错误。