Оригинальный DVD-ROM: eXeL@B DVD !
eXeL@B ВИДЕОКУРС !

ВИДЕОКУРС ВЗЛОМ
выпущен 2 августа!


УЗНАТЬ БОЛЬШЕ >>
Домой | Статьи | RAR-cтатьи | FAQ | Форум | Скачать | Видеокурс
Новичку | Ссылки | Программирование | Интервью | Архив | Связь

ПРОГРАММИРОВАНИЕ НА C и С++



Слушай, дружище, зачем так мучиться с этим языком С++, ты ведь не Билл Гейтс. Возьми тот же Python и программируй, он кроссплатформенный, под Windows тоже работает. Я сам давно заметил: то что на Си пишешь в страницу кода, на питоне решается в одну-две строки. При том, питон намного проще, я его сам недавно изучил по видеокурсу вот этому. Кстати, автор отлично там объясняет. Буквально день-два и уже будешь писать на нём, чего не скажешь про сложный С++.

Как изменить иконку или битмап в выбранной ячейке CListCtrl

Эта статья объясняет, как изменить иконку или битмап в ячейке CListCtrl когда она выбрана.

Когда, Вы инициализируете CListCtrl при помощи вызова CListCtrl::InsertItem(), то Вы можете передать в значении I_IMAGECALLBACK номер картинки. То есть, при получении уведомления LVN_GETDISPINFO надо сообщить системе номер картинки, которая должна быть показана. Для этого, внутри обработчика LVN_GETDISPINFO, необходимо устроить проверку.

Пример кода

    BEGIN_MESSAGE_MAP(CTestView, CView)
       //{{AFX_MSG_MAP(CTestView)
       ON_WM_CREATE()
       //}}AFX_MSG_MAP
       ON_NOTIFY (LVN_GETDISPINFO, IDI_LIST, OnGetDispInfo)
    END_MESSAGE_MAP()
 
    int CTestView::OnCreate(LPCREATESTRUCT lpCreateStruct)
    {
       if (CView::OnCreate(lpCreateStruct) == -1)
          return -1;
 
       // m_pImage, это переменная член CTestView, имеющая тип CImageList*
       // и создающая CImageList с картинками 16x15
       m_pImage = new CImageList();
       VERIFY (m_pImage->Create (16, 15, TRUE, 0, 1));
       CBitmap bm;
       // IDR_MAINFRAME, это битмап тулбара в дефолтовом проекте
       //
       bm.LoadBitmap (IDR_MAINFRAME);
       // Будет произведено автоматическое разделение битмапа на девять
       // картинок.
       m_pImage->Add (&bm, RGB (192, 192, 192));
 
       // m_pList, это переменная член  CTestView имеющая тип CListCtrl*,
       // и создающая CListCtrl.
       m_pList = new CListCtrl();
       VERIFY (m_pList->Create (WS_VISIBLE | WS_CHILD | LVS_REPORT |
           LVS_EDITLABELS, CRect (0, 0, 400, 400), this, IDI_LIST));
       // Создаём колонку.
       m_pList->InsertColumn (0, "Button Number", LVCFMT_LEFT, 100);
       // Связываем CImageList с CListCtrl.
       m_pList->SetImageList (m_pImage, LVSIL_SMALL);
 
       char szTemp[10];
       for (int iCntr = 0; iCntr < 9; iCntr++)
       {
          wsprintf (szTemp, "%d", iCntr);
          m_pList->InsertItem (LVIF_IMAGE | LVIF_TEXT,
             iCntr, szTemp, 0, 0, I_IMAGECALLBACK, 0L);
       }
       return 0;
    }
 
    void CTestView::OnGetDispInfo (NMHDR* pnmhdr, LRESULT* pResult)
    {
       LV_DISPINFO* pdi = (LV_DISPINFO *) pnmhdr;
 
       // Заполняем структуру LV_ITEM информацией о картинке.
       // Когда ячейка выбрана, то изображение устанавливается на первую
       // картинку (новый bitmap на тулбаре).
       // Когда она не выбрана, то индекс изображения равен номеру
       // ячейки (то есть, 0=new, 1=open, 2=save, и т. д.)
       if (LVIS_SELECTED == m_pList->GetItemState (pdi->item.iItem,
                          LVIS_SELECTED))
          pdi->item.iImage = 0;
       else
          pdi->item.iImage = pdi->item.iItem;
    }
 
    CTestView::~CTestView()
    {
       // Очищаем.
       delete m_pImage;
       delete m_pList;
    } 

 



<< ВЕРНУТЬСЯ В ПОДРАЗДЕЛ

<< ВЕРНУТЬСЯ В ОГЛАВЛЕНИЕ




Материалы находятся на сайте https://exelab.ru/pro/



Оригинальный DVD-ROM: eXeL@B DVD !


Вы находитесь на EXELAB.rU
Проект ReactOS