Re[3]: изменить цвет и фонт отдельного итема в CListCtrl
От: willi  
Дата: 24.04.01 06:43
Оценка: 7 (2)
Здравствуйте mrwel, 20.04.2001 18:42:02 вы писали:

>Ну таким образом можно всех туда посылать !!!

>Объясни чуваку , мне тоже интересно !!! :)
>
>Это не трудно !!!

Это не трудно, но проблема ведь тривиальная!!!
А времени чтобы давать развернутые ответы нет.
Там все написано, даже примеры есть.
Ну и ленивый же вы народ!

в диалог вставляем ListCtrl (ID: IDC_LIST, переменная m_listCtrl)
сделаем цвет красным а шрифт жирным италиком


добавляем перемнную CFont m_fontBoldItalic в наш диалог
в OnInitDialog добавляем

BOOL CCustDrawListDlg::OnInitDialog()
{
CDialog::OnInitDialog();
...
LOGFONT lf;
::GetObject((HGDIOBJ)::SendMessage(m_listCtrl.GetSafeHwnd(), WM_GETFONT, 0, 0), sizeof(LOGFONT), &lf);
lf.lfWeight = FW_BOLD;
lf.lfItalic = TRUE;
m_fontBoldItalic.CreateFontIndirect(&lf);


return TRUE; // return TRUE unless you set the focus to a control
}


в карту сообщений ручками добавляем
...
BEGIN_MESSAGE_MAP(CCustDrawListDlg, CDialog)
//{{AFX_MSG_MAP(CCustDrawListDlg)
...
//}}AFX_MSG_MAP
ON_NOTIFY(NM_CUSTOMDRAW, IDC_LIST, OnCustomDraw)
END_MESSAGE_MAP()
...

ну и теперь имплементируем
...
void CCustDrawListDlg::OnCustomDraw(NMHDR* pNMHDR, LRESULT* pResult)
{
NMLVCUSTOMDRAW* pLVCustomDraw = (NMLVCUSTOMDRAW*)pNMHDR;
*pResult = CDRF_DODEFAULT;
switch(pLVCustomDraw->nmcd.dwDrawStage)
{
case CDDS_PREPAINT:
*pResult |= CDRF_NOTIFYITEMDRAW;
break;
case CDDS_ITEMPREPAINT:
pLVCustomDraw->clrText = RGB(255, 0, 0);
::SelectObject(pLVCustomDraw->nmcd.hdc, m_fontBold);
*pResult |= CDRF_NEWFONT;
break;
}
}
...

и сё
\/\/i||i
Re[10]: изменить цвет и фонт отдельного итема в CListCtrl
От: Odi$$ey Россия http://malgarr.blogspot.com/
Дата: 15.04.04 09:25
Оценка: 2 (1)
Здравствуйте, algod, Вы писали:

A>Переношу код один в один в другой проект написанный на чистом WinAPI — CDDS_PREPAINT приходит, а дальше — глухо... .


http://www.rsdn.ru/Forum/Message.aspx?mid=522524
Автор: Lunich
Дата: 28.01.04
изменить цвет и фонт отдельного итема в CListCtrl
От: serebro Россия  
Дата: 20.04.01 08:57
Оценка:
Кто знает как изменить цвет и фонт отдельного item'а в CListCtrl?

WBR,
Serebryakov A.
WBR,
Serebryakov Alex
Re: изменить цвет и фонт отдельного итема в CListCtrl
От: willi  
Дата: 20.04.01 09:06
Оценка:
есть такая фича Custom Draw

http://msdn.microsoft.com/library/psdk/shellcc/commctls/listview/notifications/NM_CUSTOMDRAW_LISTVIEW.htm#NM_CUSTOMDRAW_LISTVIEW
http://msdn.microsoft.com/library/wcedoc/wceui/ctrls_73.htm

все просто до безобразия :)
\/\/i||i
Re[2]: изменить цвет и фонт отдельного итема в CListCtrl
От: mrwel Россия  
Дата: 21.04.01 00:42
Оценка:
Здравствуйте willi, 20.04.2001 03:06:52 вы писали:

>есть такая фича Custom Draw

>
>http://msdn.microsoft.com/library/psdk/shellcc/commctls/listview/notifications/NM_CUSTOMDRAW_LISTVIEW.htm#NM_CUSTOMDRAW_LISTVIEW
>http://msdn.microsoft.com/library/wcedoc/wceui/ctrls_73.htm
>
>все просто до безобразия :)
Ну таким образом можно всех туда посылать !!!
Объясни чуваку , мне тоже интересно !!! :)

Это не трудно !!!

Заранее благодарен !
Re[4]: изменить цвет и фонт отдельного итема в CListCtrl
От: Koumandin Россия  
Дата: 26.04.01 18:18
Оценка:
Просто было на бумаге...

>void CCustDrawListDlg::OnCustomDraw(NMHDR* pNMHDR, LRESULT* pResult)

>{
> NMLVCUSTOMDRAW* pLVCustomDraw = (NMLVCUSTOMDRAW*)pNMHDR;
> *pResult = CDRF_DODEFAULT;
> switch(pLVCustomDraw->nmcd.dwDrawStage)
> {
> case CDDS_PREPAINT:
> *pResult |= CDRF_NOTIFYITEMDRAW;
> break;
> case CDDS_ITEMPREPAINT:
> pLVCustomDraw->clrText = RGB(255, 0, 0);
> ::SelectObject(pLVCustomDraw->nmcd.hdc, m_fontBold);
> *pResult |= CDRF_NEWFONT;
> break;
> }
>}
>...
>
>и сё

Почему-то сообщение CDDS_PREPAINT приходит, а дождаться CDDS_ITEMPREPAINT не удается :( . При этом пример с CListView работает!!! Может в филармонии что-то подправить? :)
Re[5]: изменить цвет и фонт отдельного итема в CListCtrl
От: willi  
Дата: 27.04.01 05:15
Оценка:
Здравствуйте Koumandin, 26.04.2001 12:18:10 вы писали:

> Просто было на бумаге...


Это не на бумаге, это кусок РАБОТАЮЩЕЙ программы.
Могу выслать исходники.

>Почему-то сообщение CDDS_PREPAINT приходит, а дождаться CDDS_ITEMPREPAINT не удается :( . При этом >пример с CListView работает!!! Может в филармонии что-то подправить? :)


А поподробнее?
Для того чтобы пришел CDDS_ITEMPREPAINT, надо в ответ на CDDS_PREPAINT запихнуть в pResult CDRF_NOTIFYITEMDRAW.
\/\/i||i
Re[6]: изменить цвет и фонт отдельного итема в CListCtrl
От: Koumandin Россия  
Дата: 30.04.01 13:43
Оценка:
Здравствуйте willi, 26.04.2001 23:15:45 вы писали:

>Это не на бумаге, это кусок РАБОТАЮЩЕЙ программы.

>Могу выслать исходники.
>
>>Почему-то сообщение CDDS_PREPAINT приходит, а дождаться CDDS_ITEMPREPAINT не удается :( . При этом >пример с CListView работает!!! Может в филармонии что-то подправить? :)
>
>А поподробнее?
>Для того чтобы пришел CDDS_ITEMPREPAINT, надо в ответ на CDDS_PREPAINT запихнуть в pResult CDRF_NOTIFYITEMDRAW.

Это я все понимаю. Сам этот исходник скачал и запустил. Действительно работает ! Однако сделал сам простой пример (dialog based ) c CListCtrl — а он не работает :(. Все происходит так, как описано выше :(.
Могу сам прислать ! Или я чего не понимаю ?
Re[7]: изменить цвет и фонт отдельного итема в CListCtrl
От: willi  
Дата: 03.05.01 10:38
Оценка:
Здравствуйте Koumandin, 30.04.2001 07:43:40 вы писали:

> Это я все понимаю. Сам этот исходник скачал и запустил. Действительно работает ! Однако сделал сам простой пример (dialog based ) c CListCtrl — а он не работает :(. Все происходит так, как описано выше :(.

>Могу сам прислать ! Или я чего не понимаю ?

Присылай исходники. Позырим что там не так :)

vcpublic@gmx.net
\/\/i||i
Re[7]: изменить цвет и фонт отдельного итема в CListCtrl
От: willi  
Дата: 04.05.01 05:12
Оценка:
Здравствуйте Koumandin, 30.04.2001 07:43:40 вы писали:

> Это я все понимаю. Сам этот исходник скачал и запустил. Действительно работает ! Однако сделал сам простой пример (dialog based ) c CListCtrl — а он не работает :(. Все происходит так, как описано выше :(.

>Могу сам прислать ! Или я чего не понимаю ?

Присылай исходники. Позырим что там не так :)

vcpublic@gmx.net
\/\/i||i
Re[8]: изменить цвет и фонт отдельного итема в CListCtrl
От: Koumandin Россия  
Дата: 05.05.01 18:53
Оценка:
Здравствуйте willi, 05.03.2001 04:38:33 вы писали:

>

>Присылай исходники. Позырим что там не так :)
>
>vcpublic@gmx.net

Большое спасибо за помощь !
Все действительно работает, а виноват я сам !
Люди !!! Читайте MSDN ( и , конечно, RSDN :) )
Re[9]: изменить цвет и фонт отдельного итема в CListCtrl
От: alex2808 Украина  
Дата: 01.11.02 14:22
Оценка:
Привет!!!
Делал как в этом примере, он у меня меняет цвет и стиль всего ListCtrl... А как поменять стиль только выбранного Selected элемента?
Если у кого-то есть примеры, пришлите на alex2808@ua.fm
Заранее благодарен..
Всех благ
Re: изменить цвет и фонт отдельного итема в CListCtrl
От: bua  
Дата: 03.11.02 20:49
Оценка:
Здравствуйте serebro, Вы писали:

S>Кто знает как изменить цвет и фонт отдельного item'а в CListCtrl?


S>WBR,

S>Serebryakov A.

http://www.codeguru.com/listview/CListCtrlStyled.html

Только вот уже 2 недели бьюсь — как заставить это дело сортировать итемы...
Не работает, хоть убей (виновник — функция PFNLVCOMPARE LIS_CompFunc;

см. в файле ListCtrlStyled.cpp )

// Store the user-defined callback function

int CALLBACK LIS_CompareFunc(LPARAM lParam1, LPARAM lParam2, LPARAM lParamSort)
{ // Must call the origine compare function
//
LPARAM lp1; // the real lParam1
LPARAM lp2; // the real lParam2

Так вот она эти оба параметра обнуляет... Т.е. уже реализованная сортировка, работающая с CListCtrl, с этим классом не работает...

Буду рад, если кто поможет!
Re[2]: изменить цвет и фонт отдельного итема в CListCtrl
От: alex2808 Украина  
Дата: 04.11.02 09:33
Оценка:
Здравствуйте bua, Вы писали:

bua>Здравствуйте serebro, Вы писали:

bua>http://www.codeguru.com/listview/CListCtrlStyled.html

Насколько я понял из прочитанного, там нужно создавать наследника на ListCtrl, а я работаю с ListView, может как-то в CustomDraw можно сделать, чтобы только изменить стиль отмеченные.
Всех благ
Re[2]: изменить цвет и фонт отдельного итема в CListCtrl
От: alex2808 Украина  
Дата: 04.11.02 10:11
Оценка:
Как можно заставить принудительно выполниться NM_CUSTOMDRAW ???
Есть ли метод?
Update(nItem) или Redraw(...) для этого не подходит?
А то получается он только при начальной загрузке выполняется
Всех благ
Re[9]: изменить цвет и фонт отдельного итема в CListCtrl
От: algod Украина  
Дата: 15.04.04 08:56
Оценка:
Здравствуйте, Koumandin, Вы писали:

K>Большое спасибо за помощь !

K>Все действительно работает, а виноват я сам !
K>Люди !!! Читайте MSDN ( и , конечно, RSDN )

Так в чем баг был?

А то у меня вообще мистика твориться (правда я работаю с CListCtrl а с Toolbar-ом):
Есть мой MFC-ный код — все работает. Приходит CDDS_PREPAINT, я отвечаю CDRF_NOTIFYITEMDRAW после чего мне приходит CDDS_ITEMPREPAINT.

Переношу код один в один в другой проект написанный на чистом WinAPI — CDDS_PREPAINT приходит, а дальше — глухо... .

Заранее спасибо.
There is no bug
Re[11]: изменить цвет и фонт отдельного итема в CListCtrl
От: algod Украина  
Дата: 15.04.04 09:55
Оценка:
Здравствуйте, Odi$$ey, Вы писали:
OE>http://www.rsdn.ru/Forum/Message.aspx?mid=522524
Автор: Lunich
Дата: 28.01.04

Огромное спасибо! Именно оно.
There is no bug
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.