Здравствуйте, maks-nelipa, Вы писали:
MN>>>Как задать цвет фона заголовка колонок в ListView?
C>>NM_CUSTOMDRAW
MN>На сколько я понимаю NM_CUSTOMDRAW в ListView отвечает только за отрисовку самих элементов а не заголовков столбцов.
Попробуй так: subclassing листа + NM_CUSTOMDRAW от заголовка в новой оконной функции листа.
По идее должно сработать, в MSDN есть
вот это.
"maks-nelipa" <73332@users.rsdn.ru> сообщил/сообщила в новостях следующее:
news:3025006@news.rsdn.ru...
> Здравствуйте, Carc, Вы писали:
>
> C>Здравствуйте, maks-nelipa, Вы писали:
>
> MN>>Как задать цвет фона заголовка колонок в ListView?
> C>NM_CUSTOMDRAW
> На сколько я понимаю NM_CUSTOMDRAW в ListView отвечает только за отрисовку самих элементов а не заголовков столбцов.
HeaderCtrl (заголовки) это отдельное контрол на ListCtrl и у него свои нотификации.
Posted via RSDN NNTP Server 2.1 beta
Здравствуйте, Carc, Вы писали:
C>"maks-nelipa" <73332@users.rsdn.ru> сообщил/сообщила в новостях следующее: news:3025006@news.rsdn.ru...
>> Здравствуйте, Carc, Вы писали:
>>
>> C>Здравствуйте, maks-nelipa, Вы писали:
>>
>> MN>>Как задать цвет фона заголовка колонок в ListView?
>> C>NM_CUSTOMDRAW
>> На сколько я понимаю NM_CUSTOMDRAW в ListView отвечает только за отрисовку самих элементов а не заголовков столбцов.
C>HeaderCtrl (заголовки) это отдельное контрол на ListCtrl и у него свои нотификации.
У меня WINAPI. Как у Винапишного ListView получить Header?
> На сколько я понимаю NM_CUSTOMDRAW в ListView отвечает только за отрисовку самих элементов а не заголовков столбцов.
На MFC примерно так: CListWithColorHeaderCtrl это наследник от CListCtrl для того чтобы перехватить нотификации от HeaderCtrl.
Ну лень мне городить оконные процедуры с этими всеми switch`ами.... Суть решения вполне видна в MFC-евом коде, наследник от CListCtrl просто сам ловит нотификации от HeaderCtrl, переписать на WinAPI труда, полагаю, не составит.
Короче, выложил полный MFC-евый пример тут
http://www.amlpages.com/Source/ColorHeaderCtrl.zip
/*HeaderCtrl это отдельный контрол дочерний по отношению к ListCtrl, и именно оконная
процедура ListCtrl и будет получать нотификации на CUSTOMDRAW HeaderCtrl`f
собственно их и ловим
*/
LRESULT CListWithColorHeaderCtrl::WindowProc(UINT message, WPARAM wParam, LPARAM lParam)
{
LRESULT l=CListCtrl::WindowProc(message, wParam, lParam);
if (WM_NOTIFY == message) {//че правда нотификация что ли? ептить...
const NMHDR* const pNMHDR=(NMHDR*)lParam;
//проверяем код нотификации и что нотификация пришла от HeaderCtrl
if (NM_CUSTOMDRAW==pNMHDR->code && GetHeaderCtrl()->GetSafeHwnd()==pNMHDR->hwndFrom) {
l=OnHeaderCustomDraw((NMCUSTOMDRAW*)pNMHDR);
}
}
return l;
}
//выставляем цвета
LRESULT CListWithColorHeaderCtrl::OnHeaderCustomDraw(NMCUSTOMDRAW *pCD)
{
//по умолчанию нехай Windows сама все рисует.
LRESULT l=CDRF_DODEFAULT;
switch ( pCD->dwDrawStage)//что за прорисовка, какой этап? (подробности в MSDN)
{
// при начале прорисовки указываем, что нам нужны нотификации
// на прорисовку каждого айтема
case CDDS_PREPAINT:
l|= CDRF_NOTIFYITEMDRAW ;
break;
case CDDS_ITEMPREPAINT:// собственно ставим разные цвета
if (pCD->dwItemSpec == 0) {//первый айтем?
::SetBkColor(pCD->hdc,RGB(255,0,0));
::SetTextColor(pCD->hdc,RGB(255,255,255));
}
else {// ах бль не первый айтем?
::SetBkColor(pCD->hdc,RGB(0,255,0));
::SetTextColor(pCD->hdc,RGB(255,0,0));
}
//винде напомним что мы вообще то сменили цвета
l|=CDRF_NEWFONT;
break;
}
return l;
}
Posted via RSDN NNTP Server 2.1 beta
> У меня WINAPI. Как у Винапишного ListView получить Header?
Сообщение LVM_GETHEADER вернет HWND Header
Posted via RSDN NNTP Server 2.1 beta