Выбранный элемент в моем CListCtrl показывает многоточие, несмотря на наличие большого количества места! - PullRequest
1 голос
/ 21 августа 2009

У меня есть 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);

Этот сводит меня с ума. Любые советы будут очень признательны! Спасибо, что посмотрели.

Ответы [ 3 ]

1 голос
/ 21 августа 2009

Я бы попробовал добавить

myListCtrl.SetExtendedStyle(LVS_EX_FULLROWSELECT);

перед строкой InsertColumn и посмотрите, поможет ли это.

0 голосов
/ 24 ноября 2009

Я думаю, что строки, которые вы вводите в список, не обрезаны по правому краю. Попробуйте

while (fgets(sz,100,f))
{
   CString s(sz);    
   s.TrimRight();
   myListCtrl.InsertItem(0, s);
}
0 голосов
/ 21 августа 2009

MSDN, похоже, не говорит, что SetColumnWidth заставляет содержимое автоматически перерисовываться.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...