2009-08-20 53 views
1

我有一個CListCtrl有足夠的空間用於所有的項目,並且它們都能正確顯示---直到選中!正如任何條目選擇不久,即進入年底被截斷並添加省略號:儘管有足夠的空間,但我的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); 

這一個是讓我真的瘋。任何提示將非常感謝!謝謝你看看。

回答

1

我想嘗試的InsertColumn線之前添加

myListCtrl.SetExtendedStyle(LVS_EX_FULLROWSELECT); 

,看看有沒有什麼幫助。

+0

冰冰冰!我們有一個贏家!那就是訣竅。現在---這不是一個錯誤嗎?!爲什麼我會想要這種奇怪的默認行爲?啊。 – rfeague 2009-08-21 06:17:16

+0

P.S.我在我的InitDialog()中添加了這行作爲最後一行,但它工作正常。 – rfeague 2009-08-21 06:18:55

+1

實際上你應該使用'myListCtrl.SetExtendedStyle(myListCtrl.GetExtendedStyle()| LVS_EX_FULLROWSELECT);'以防萬一其他LVS_EX_ *樣式被設置在某個點上。這一次可能並不重要,但這是一個很好的習慣,可以防止將來的錯誤。 – TheUndeadFish 2009-08-22 00:15:12

0

MSDN似乎沒有說如果SetColumnWidth強制內容自動重繪。

0

我想你輸入到列表中的字符串不是右對齊的。試試

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