На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! Правила раздела Visual C++ / MFC / WTL (далее Раздела)
1) На Раздел распространяются все Правила Форума.
2) Перед тем, как создать новый топик, убедитесь, что Вы читали Правила создания тем в Разделе.
3) Вопросы, не связанные с программированием (настройки MS Visual Studio, книги, библиотеки и т.д.),
обсуждаются в разделе C/C++: Прочее
4) Вопросы разработки .NET (Windows Form, C++/CLI и т.п.) приложений на Visual C++/C# обсуждаются в разделе .NET.
5) Нарушение Правил может повлечь наказание со стороны модераторов.

Полезные ссылки:
user posted image FAQ Раздела user posted image Обновления для FAQ Раздела user posted image Поиск по Разделу user posted image MSDN Library Online
Модераторы: ElcnU
  
> CListCtrl: раскраска строк и столбцов
    Всем привет

    Необходимо раскрасить ячейки элемента CListCtrl
    Делаю так:

    ExpandedWrap disabled
              NOTIFY_HANDLER      (IDC_LIST__DATA,        NM_CUSTOMDRAW,      OnNMCustomDraw)


    ExpandedWrap disabled
      LRESULT CPageDataDlg::OnNMCustomDraw
          (
          __in    int     /*idCtrl*/,
          __in    LPNMHDR pNMHDR,
          __inout BOOL&   /*bHandled*/
          )
      {
          NMLVCUSTOMDRAW* pLVCustomDraw = (NMLVCUSTOMDRAW*)pNMHDR;
       
          LRESULT lResult = CDRF_DODEFAULT;
       
          switch(pLVCustomDraw->nmcd.dwDrawStage)
          {
          case CDDS_PREPAINT:
              lResult |= CDRF_NOTIFYITEMDRAW;
              break;
       
          case CDDS_ITEMPREPAINT:
              {
                  pLVCustomDraw->clrText = RGB(0, 0, 0);
                  pLVCustomDraw->clrTextBk = RGB(0,255,0);
       
                  lResult |= CDRF_NEWFONT;
              }
              break;
          }
       
          return lResult;
      }


    Вроде все ок, но раскрашивается сразу вся строка, а я хочу с точностью до ячейки - вот как узнать какая колонка сейчас обрабатывается?
    Ряд можно получить через
    ExpandedWrap disabled
      pLVCustomDraw->nmcd.dwItemSpec
    , а вот столбец то как?
      ExpandedWrap disabled
            case CDDS_ITEMPREPAINT:
                SelectObject(lplvcd->nmcd.hdc,
                             GetFontForItem(lplvcd->nmcd.dwItemSpec,
                                            lplvcd->nmcd.lItemlParam) );
                lplvcd->clrText = GetColorForItem(lplvcd->nmcd.dwItemSpec,
                                                  lplvcd->nmcd.lItemlParam);
                lplvcd->clrTextBk = GetBkColorForItem(lplvcd->nmcd.dwItemSpec,
                                                      lplvcd->nmcd.lItemlParam);
         
        /* At this point, you can change the background colors for the item
        and any subitems and return CDRF_NEWFONT. If the list-view control
        is in report mode, you can simply return CDRF_NOTIFYSUBITEMDRAW
        to customize the item's subitems individually */
                ...
         
                return CDRF_NEWFONT;
            //  or return CDRF_NOTIFYSUBITEMDRAW;
            case CDDS_SUBITEM | CDDS_ITEMPREPAINT:
                SelectObject(lplvcd->nmcd.hdc,
                             GetFontForSubItem(lplvcd->nmcd.dwItemSpec,
                                               lplvcd->nmcd.lItemlParam,
                                               lplvcd->iSubItem));
                lplvcd->clrText = GetColorForSubItem(lplvcd->nmcd.dwItemSpec,
                                                     lplvcd->nmcd.lItemlParam,
                                                     lplvcd->iSubItem));
                lplvcd->clrTextBk = GetBkColorForSubItem(lplvcd->nmcd.dwItemSpec,
                                                         lplvcd->nmcd.lItemlParam,
                                                         lplvcd->iSubItem));
         
        /* This notification is received only if you are in report mode and
        returned CDRF_NOTIFYSUBITEMDRAW in the previous step. At
        this point, you can change the background colors for the
        subitem and return CDRF_NEWFONT.*/
                ...
                return CDRF_NEWFONT;

      Обратите внимание на комментарий. Взято отсюда.
      Сообщение отредактировано: artsb -
        Точно - надо было

        ExpandedWrap disabled
                  case CDDS_ITEMPREPAINT:
                      {
                          lResult |= CDRF_NEWFONT | CDRF_NOTIFYSUBITEMDRAW;
                      }
                      break;
           
                  case CDDS_SUBITEM | CDDS_ITEMPREPAINT:
                      {
                          lResult |= CDRF_NEWFONT | CDRF_NOTIFYSUBITEMDRAW;
                      }
                      break;
        0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
        0 пользователей:


        Рейтинг@Mail.ru
        [ Script execution time: 0,0220 ]   [ 16 queries used ]   [ Generated: 3.05.24, 06:11 GMT ]