2015-05-07 12 views
2

Я создал очень простой вид, полученный от CListView, и я хочу иметь возможность показывать изображения в каждом столбце моего CListView.
Для этого я знаю, что мне нужно использовать LVS_EX_SUBITEMIMAGES и использовать SetItem, чтобы установить изображение в подэлемент, просто, но это не работает.
весь код здесь Почему изображения не отображаются в подтипах в mfc CListView/CListCtrl?

void MyListView::OnInitialUpdate() 
{ 
    CListView::OnInitialUpdate(); 

    //create the list control 
    GetListCtrl().ModifyStyle(0,LVS_REPORT | LVS_ALIGNLEFT | WS_BORDER | WS_TABSTOP); 
    GetListCtrl().ModifyStyleEx(0,LVS_EX_SUBITEMIMAGES); 
    GetListCtrl().InsertColumn(0, _T("Column 1"), LVCFMT_LEFT,60); 
    GetListCtrl().InsertColumn(1, _T("Column 2"), LVCFMT_LEFT,60); 

    //load the images 
    CImageList *pImageList; 
    pImageList = new CImageList(); 
    pImageList->Create(26,26, ILC_MASK | ILC_COLOR16,2, 2); 

    CBitmap bitmap; 
    bitmap.LoadBitmap( IDB_MAIN); 
    pImageList->Add(&bitmap, (COLORREF)0xFFFFFF); 
    bitmap.DeleteObject(); 

    bitmap.LoadBitmap(IDB_MAIN1); 
    pImageList->Add(&bitmap, (COLORREF)0xFFFFFF); 
    bitmap.DeleteObject(); 
    GetListCtrl().SetImageList(pImageList, LVSIL_SMALL); 
    GetListCtrl().SetImageList(pImageList, LVSIL_NORMAL); 
    GetListCtrl().SetImageList(pImageList, LVSIL_STATE); 
    GetListCtrl().SetImageList(pImageList, LVSIL_GROUPHEADER); 

    COLORREF col; 
    col = RGB(240,240,240); 
    GetListCtrl().SetBkColor(col); 
    GetListCtrl().SetTextBkColor(col); 
    GetListCtrl().SetRedraw(TRUE); 

    //fill the view with 10 sample items 
    for (int i=0;i<10;i++) 
    { 
     CString csItem; 
     csItem.Format(L"Item %d",i+1); 

     GetListCtrl().InsertItem(LVIF_TEXT|LVIF_IMAGE,i,csItem,0,0,0,0); 

     CString csItem2; 
     csItem2.Format(L"Item2 %d",i+1); 
     GetListCtrl().SetItem(i,1,LVIF_TEXT|LVIF_IMAGE,csItem2,1,0,0,0,0); 
    } 
} 

Это очень простой, но я не могу получить результат, я хочу, и только первый столбец имеет изображения
wrong result
Я хотел, чтобы обе колонки были изображения, так результат должен быть таким:
expected result, edited picture with mspaint =)

Так что же мне здесь не хватает? Как правильно показать изображения во втором столбце?
любая помощь приветствуется, спасибо заранее!

+1

@ ahmedsafan86: Это было более 20 лет назад с Windows 95. Даже тогда вы можете использовать comctl версию 4.70 и использовать этот стиль. Начиная с Windows 98 расширенный стиль доступен для разработчиков без специального рисунка – cha

+0

@ ahmedsafan86, cha прав Я не уверен в точной версии, которая включала это, но это правда, что он не был доступен с самого начала CListCtrl – Robson

+1

вы оба правы, я был неправ, я не разбирался в syle LVS_EX_SUBITEMIMAGES раньше, а также не хорошо читал вопрос и не видел его, спасибо. – ahmedsafan86

ответ

1

Не используйте ModifyStyleEx(). Это для расширенных стилей CWnd. Для специальных стилей CListCtrl используется SetExtendedStyle(). Проверьте Quote discussion

по ссылке выше:

Перечень расширенных стилей для ModifyStyleEx() все начинаются с WS_EX _... и, вероятно, немного изменить в окне структуры через SetWindowLong (...). Метод SetExtendedStyle() относится к CListCtrl в представлении списка и имеет биты стиля, определенные LVS_EX _... Так как расширенный стиль элементов управления равен , отправленному через SendMessage (...), число бит расширенного стиля не равно ограничивается одним словом и, следовательно, может превышать 32.

+0

невероятный! что сработало =) большое спасибо – Robson