ListView
От: Lunich Россия  
Дата: 28.01.04 17:23
Оценка:
Подскажите, пожалуйста, решение такой задачи:

Имеется ListView. Мне нужно выделить строки цветом (неважно, фон или
текст) в зависимости от определенных параметров. Проект не под MFC.
Posted via RSDN NNTP Server 1.8 beta
Re: ListView
От: Odi$$ey Россия http://malgarr.blogspot.com/
Дата: 28.01.04 17:49
Оценка:
Здравствуйте, Lunich, Вы писали:

L>Подскажите, пожалуйста, решение такой задачи:


L>Имеется ListView. Мне нужно выделить строки цветом (неважно, фон или

L>текст) в зависимости от определенных параметров. Проект не под MFC.

NM_CUSTOMDRAW, здесь
Автор: Odi$$ey
Дата: 16.10.02
еще гдлянь
Re[2]: ListView
От: Lunich Россия  
Дата: 28.01.04 19:12
Оценка:
Odi$$ey wrote:

Еще такой вопрос. Что я делаю неправильно???

//    Обработка элементов управления
case WM_NOTIFY:{
     NMHDR *nm = (NMHDR *)lp;
     switch( nm->code ){
     case NM_CUSTOMDRAW:{
         LPNMLVCUSTOMDRAW lplvcd = (LPNMLVCUSTOMDRAW)lp;
         switch( lplvcd->nmcd.dwDrawStage ){
         case CDDS_PREPAINT:
//Сюда приходим постоянно
             return CDRF_NOTIFYITEMDRAW;
         case CDDS_ITEMPREPAINT:
//Здесь даже не появляемся
             return CDRF_NOTIFYSUBITEMDRAW;
         case CDDS_ITEM:
         case CDDS_SUBITEM:
         case CDDS_PREPAINT | CDDS_SUBITEM:
         case CDDS_ITEM | CDDS_SUBITEM | CDDS_PREPAINT:
//Здесь даже не появляемся
             lplvcd->clrTextBk = GetSysColor( COLOR_WINDOW );
             lplvcd->clrText = GetSysColor( COLOR_WINDOWTEXT );
             return CDRF_NEWFONT;
         }
     }break;


ТОРМОЖУ!!!
Posted via RSDN NNTP Server 1.8 beta
Re[3]: ListView
От: Lunich Россия  
Дата: 29.01.04 18:44
Оценка:
Lunich wrote:

>

> Еще такой вопрос. Что я делаю неправильно???
>
> // Обработка элементов управления
> case WM_NOTIFY:{
> NMHDR *nm = (NMHDR *)lp;
> switch( nm->code ){
> case NM_CUSTOMDRAW:{
> LPNMLVCUSTOMDRAW lplvcd = (LPNMLVCUSTOMDRAW)lp;
> switch( lplvcd->nmcd.dwDrawStage ){
> case CDDS_PREPAINT:
> *//Сюда приходим постоянно*
> return CDRF_NOTIFYITEMDRAW;
> case CDDS_ITEMPREPAINT:
> *//Здесь даже не появляемся*
> return CDRF_NOTIFYSUBITEMDRAW;
> case CDDS_ITEM:
> case CDDS_SUBITEM:
> case CDDS_PREPAINT | CDDS_SUBITEM:
> case CDDS_ITEM | CDDS_SUBITEM | CDDS_PREPAINT:
> *//Здесь даже не появляемся*
> lplvcd->clrTextBk = GetSysColor( COLOR_WINDOW );
> lplvcd->clrText = GetSysColor( COLOR_WINDOWTEXT );
> return CDRF_NEWFONT;
> }
> }break;
>

И все-таки, что не так? Или без MFC не обойтись?
HEEEEEEEEEEEEELP!!! (Крик души)
Posted via RSDN NNTP Server 1.8 beta
Re[3]: ListView
От: SergH Россия  
Дата: 30.01.04 10:28
Оценка:
Здравствуйте, Lunich, Вы писали:

L>Еще такой вопрос. Что я делаю неправильно???


L>
L>         switch( lplvcd->nmcd.dwDrawStage ){
L>         case CDDS_PREPAINT:
L>//Сюда приходим постоянно
L>             return CDRF_NOTIFYITEMDRAW;
L>         case CDDS_ITEMPREPAINT:
L>//Здесь даже не появляемся
..
L>//Здесь даже не появляемся
..
L>         }
L>     }break;
L>


L>ТОРМОЖУ!!!


А ты уверен что он должен появляться? Я не знаю. Попробуй использовать CDDS_PREPAINT и dwItemSpec.
Делай что должно, и будь что будет
Re[4]: ListView
От: Lunich Россия  
Дата: 30.01.04 13:05
Оценка:
SergH wrote:
>
> А ты уверен что он должен появляться? Я не знаю. Попробуй использовать
> CDDS_PREPAINT и dwItemSpec.

Ну хорошо, а что должно произойти в таком случае? (в реальности не
происходит ничего)
     case WM_NOTIFY:{
         NMHDR *nm = (NMHDR *)lp;
         switch( nm->code ){
         case NM_CUSTOMDRAW:{
             LPNMLVCUSTOMDRAW lplvcd = (LPNMLVCUSTOMDRAW)lp;
             switch( lplvcd->nmcd.dwDrawStage ){
             case CDDS_PREPAINT:
                 lplvcd->clrText = RGB( 255, 255, 255 );
                 lplvcd->clrTextBk = RGB( 0, 0, 0 );
                 return CDRF_NEWFONT;
             ...

???
Posted via RSDN NNTP Server 1.8 beta
Re[5]: ListView
От: Lunich Россия  
Дата: 30.01.04 14:38
Оценка:
Lunich wrote:
>
>
>
case WM_NOTIFY:{
>          NMHDR *nm = (NMHDR *)lp;
>          switch( nm->code ){
>          case NM_CUSTOMDRAW:{
>              LPNMLVCUSTOMDRAW lplvcd = (LPNMLVCUSTOMDRAW)lp;
>              switch( lplvcd->nmcd.dwDrawStage ){
>              case CDDS_PREPAINT:
>                  lplvcd->clrText = RGB( 255, 255, 255 );
>                  lplvcd->clrTextBk = RGB( 0, 0, 0 );
>                  return CDRF_NEWFONT;
>              ...
>

>
> ???

Может, яфлаги где-то не поставил? Или сообщения не пересылаю какие-то?
Хоть кто-то, хоть чем-то помогите
Posted via RSDN NNTP Server 1.8 beta
Re[6]: ListView
От: kliff Россия http://www.esignal.ru
Дата: 30.01.04 18:13
Оценка:
Здравствуйте, Lunich, Вы писали:

L>Lunich wrote:

>>
>>
>>
case WM_NOTIFY:{
>>          NMHDR *nm = (NMHDR *)lp;
>>          switch( nm->code ){
>>          case NM_CUSTOMDRAW:{
>>              LPNMLVCUSTOMDRAW lplvcd = (LPNMLVCUSTOMDRAW)lp;
>>              switch( lplvcd->nmcd.dwDrawStage ){
>>              case CDDS_PREPAINT:
>>                  lplvcd->clrText = RGB( 255, 255, 255 );
>>                  lplvcd->clrTextBk = RGB( 0, 0, 0 );
>>                  return CDRF_NEWFONT;
>>              ...
>>

>>
>> ???

L>Может, яфлаги где-то не поставил? Или сообщения не пересылаю какие-то?

L>Хоть кто-то, хоть чем-то помогите

что ты раскричался? ведь все в МСДН есть. что-то в таком духе:

case CDDS_PREPAINT:
  * pResult = CDDF_NOTIFYITEMDRAW;
  break;
case CDDS_ITEMPREPAINT:
  lplvcd->clrText = RGB( 255, 255, 255 );
  lplvcd->clrTextBk = RGB( 0, 0, 0 );
  * pResult = CDRF_NEWFONT;
  break;
Re[7]: ListView
От: Lunich Россия  
Дата: 30.01.04 18:44
Оценка:
kliff wrote:

>

>
> что ты раскричался? ведь все в МСДН есть. что-то в таком духе:
>
> case CDDS_PREPAINT:
> * pResult = CDDF_NOTIFYITEMDRAW;
> break;
> case CDDS_ITEMPREPAINT:
> lplvcd->clrText = RGB( 255, 255, 255 );
> lplvcd->clrTextBk = RGB( 0, 0, 0 );
> * pResult = CDRF_NEWFONT;
> break;
>

Да в том то и дело, что не работает (чего бы я кричал . Я пока
обошелся OWNER DRAW FIXED, но это же не дело...
Posted via RSDN NNTP Server 1.8 beta
ListView - как выделить строки цветом
От: McQwerty Россия  
Дата: 31.01.04 14:41
Оценка: 23 (2)
#Имя: FAQ.winapi.listview.customdraw
L>Имеется ListView. Мне нужно выделить строки цветом (неважно, фон или текст) в зависимости от определенных параметров. Проект не под MFC.

>> что ты раскричался? ведь все в МСДН есть. что-то в таком духе:


>> case CDDS_PREPAINT:
>>   * pResult = CDDF_NOTIFYITEMDRAW;
>>   break;
>> case CDDS_ITEMPREPAINT:
>>   lplvcd->clrText = RGB( 255, 255, 255 );
>>   lplvcd->clrTextBk = RGB( 0, 0, 0 );
>>   * pResult = CDRF_NEWFONT;
>>   break;

L>Да в том то и дело, что не работает (чего бы я кричал . Я пока
L>обошелся OWNER DRAW FIXED, но это же не дело...

Это возможно, если список в диалоге.
В диалоге результат нужно возвращать через:
SetWindowLong (hDlg, DWL_MSGRESULT, NOTIFYITEMDRAW);
Re[9]: ListView
От: Lunich Россия  
Дата: 31.01.04 16:29
Оценка:
McQwerty wrote:
>
> Это возможно, если список в диалоге.
> В диалоге результат нужно возвращать через:
>
> SetWindowLong (hDlg, DWL_MSGRESULT, NOTIFYITEMDRAW);
>

СПАСИБО!!! Наконец-то проблема решена!!!
Уррррррррраааааааа!!! Заррррррррааааааааботало!!!
(с)Кот Матроскин
Posted via RSDN NNTP Server 1.8 beta
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.