Форум программистов, компьютерный форум, киберфорум
Наши страницы
Visual C++
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/15: Рейтинг темы: голосов - 15, средняя оценка - 5.00
Doomych
0 / 0 / 1
Регистрация: 10.12.2007
Сообщений: 98
1

Как измененить цвет строки в CListCtrl?

15.12.2008, 11:58. Просмотров 2777. Ответов 1
Метки нет (Все метки)

Можно ли в элементе управления класса CListCtrl изменить цвет текста одной строки (не всего текста, а именно строки)?
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.12.2008, 11:58
Ответы с готовыми решениями:

Как изменить цвет выделяемых строк в таблице (CListCtrl)?
Есть таблица m_IDC_LIST1 типа CListCtrl. В неё строки выделяются синим цветом....

Как программно выделить строки и снять выделение со строк в таблице CListCtrl ?
Есть таблица m_IDC_LIST1 типа CListCtrl (режим LVS_REPORT). В этой таблице...

Программное выделение нескольких строк в CListCtrl при выделении мышью одной строки
Добрый день, вопрос по CListCtrl. Ситуация такая. У меня есть список,...

CListCtrl, при двойном нажатии на одну из строк открыть другую форму с данными из нажатой строки
Здравствуйте. На форме есть ClistCtrl в форме Отчета. Требуется при двойном...

Как в CListCtrl можно реализовать редактирование?
Судя по всему тому что мне удалось узнать об этом классе в нем можно...

1
boombastik
7 / 7 / 11
Регистрация: 13.02.2007
Сообщений: 1,255
15.12.2008, 14:43 2
Лучший ответ Сообщение было отмечено Doomych как решение

Решение

Можно все

Это 'ColorListBox.h'
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#pragma once
// CColorListBox
class CColorListBox : public CListBox
{
    DECLARE_DYNAMIC(CColorListBox)
 
public:
    CColorListBox();
    virtual ~CColorListBox();
 
protected:
    DECLARE_MESSAGE_MAP()
 
    int m_nItemHeight;
    COLORREF m_crIndicated;
 
public:
    virtual void DrawItem(LPDRAWITEMSTRUCT /*lpDrawItemStruct*/);
    virtual void MeasureItem(LPMEASUREITEMSTRUCT /*lpMeasureItemStruct*/);
    virtual int CompareItem(LPCOMPAREITEMSTRUCT /*lpCompareItemStruct*/);
};
А здесь его реализация 'ColorListBox.cpp'
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
// ColorListBox.cpp : implementation file
//
 
#include 'stdafx.h'
#include 'ColorListBox.h'
 
// CColorListBox
 
IMPLEMENT_DYNAMIC(CColorListBox, CListBox)
CColorListBox::CColorListBox()
: m_nItemHeight(0)
{
}
 
CColorListBox::~CColorListBox()
{
}
 
BEGIN_MESSAGE_MAP(CColorListBox, CListBox)
END_MESSAGE_MAP()
 
// CColorListBox message handlers
 
void CColorListBox::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct)
{
    ASSERT(lpDrawItemStruct->CtlType == ODT_LISTBOX);
    
    if (GetCount() > 0)
    {
        CDC dc;
        dc.Attach(lpDrawItemStruct->hDC);
 
        CString text;
        GetText(lpDrawItemStruct->itemID, text);
 
        // Save these value to restore them when done drawing.
        COLORREF crOldTextColor = dc.GetTextColor();
        COLORREF crOldBkColor = dc.GetBkColor();
 
        // If this item is selected, set the background color 
        // and the text color to appropriate values. Also, erase
        // rect by filling it with the background color.
        if ((lpDrawItemStruct->itemAction | ODA_SELECT) &&
            (lpDrawItemStruct->itemState & ODS_SELECTED))
        {
            dc.SetTextColor(::GetSysColor(COLOR_HIGHLIGHTTEXT));
            dc.SetBkColor(::GetSysColor(COLOR_HIGHLIGHT));
            dc.FillSolidRect(&lpDrawItemStruct->rcItem, ::GetSysColor(COLOR_HIGHLIGHT));
        } else
        {
            dc.FillSolidRect(&lpDrawItemStruct->rcItem, crOldBkColor);
        }
 
        // Coloring
        // Если элемент содержит строку 'test', тогда красным
        if (text == _T('test'))
        {
            dc.SetTextColor(RGB(255, 0, 0));
        }
 
        // Draw the text.
        RECT rect = lpDrawItemStruct->rcItem;
        rect.left += 2;
        rect.right -= 2;
        dc.DrawText(text, &rect, DT_SINGLELINE|DT_VCENTER);
 
        // If this item has the focus, draw a red frame around the
        // item's rect.
        if ((lpDrawItemStruct->itemAction | ODA_FOCUS) &&
            (lpDrawItemStruct->itemState & ODS_FOCUS))
        {
            dc.DrawFocusRect(&lpDrawItemStruct->rcItem);
        }
 
        // Reset the background color and the text color back to their
        // original values.
        dc.SetTextColor(crOldTextColor);
        dc.SetBkColor(crOldBkColor);
        dc.Detach();
    }
}
 
void CColorListBox::MeasureItem(LPMEASUREITEMSTRUCT lpMeasureItemStruct)
{
    if (m_nItemHeight == 0)
    {
        CSize sz;
        CDC* pDC = GetDC();
        sz = pDC->GetTextExtent(_T(' '));
        ReleaseDC(pDC);
        m_nItemHeight = sz.cy - 2;
    }
    lpMeasureItemStruct->itemHeight = m_nItemHeight;
}
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.12.2008, 14:43

Как программно задать выделенный элемент в CListCtrl?
День добрый! Есть модальное диалоговое окно содержащее в себе контрол CListCtrl...

Как отобразить директорию в CListCtrl с автоматической обработкой сообщений о ее модификации
Мне нужно отобразить в CListCtrl директорию (имя файла, размеры, время доступа...

Как выделить в таблице (CListCtrl) всю строку, но только одну?
Есть таблица m_IDC_LIST1 типа CListCtrl. Как сделать так, чтобы по щелчку...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru