На главную Наши проекты:
Журнал   ·   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
  
> OwnerDraw ListView , WinAPI
    доброво времени суток.

    Делаю, значит, собственную отрисовку ListView
    ExpandedWrap disabled
      case WM_DRAWITEM:
              RECT rectlv,recti,rectt,rectt2,rectl;
              draw=LPDRAWITEMSTRUCT(lparam);
              switch(draw->itemAction)
              {
              case ODA_SELECT:
              case ODA_DRAWENTIRE:
              HDC dc;
              dc=draw->hDC;
      ListView_GetItemRect(listview,draw->itemID,&recti,LVIR_BOUNDS);//Получение rect итема
              rectt=recti;//рект текста
              GetClientRect(listview,&rectlv);//Получение rect всего listview
          ListView_GetSubItemRect(listview,draw->itemID,1,
          LVIR_BOUNDS,&rectl);//Получение ректа субитемов
      //размер ректа итема
              recti.left=0;
              recti.right=rectlv.right;
       
              HBRUSH brush,brush2;
      //цвета брашей при выделании
              if (draw->itemState & ODS_SELECTED)
              {
              brush=GetSysColorBrush(COLOR_HIGHLIGHT);
              brush2=GetSysColorBrush(COLOR_HIGHLIGHT);
              }else{
      // и без выделения
              brush=CreateSolidBrush(RGB(255,255,255));
              brush2=CreateSolidBrush(RGB(200,200,200));
              }
      //рисуем итем
              FillRect(dc,&recti,brush);
      //Магия =) "Настройка" ректов текста
              rectt.left=35;
              rectt.top=rectt.top+12;
              rectt2=rectt;//рект текста 2 колонки
              rectt2.left=rectl.left+35;
      //Текст
              std::wstring text;
          wchar_t *gettext=new wchar_t[MAX_PATH];
          ListView_GetItemText(listview,draw->itemID,0,
          gettext,MAX_PATH);
      text=gettext;
      //Рисуем текст первой колнки
              DrawText(dc,text.c_str(),text.length(),
              &rectt,0);
      //Рисуем субитем
              FillRect(dc,&rectl,brush2);
      //Получаем текст субитемов
          wchar_t *gettext=new wchar_t[MAX_PATH];
          ListView_GetItemText(listview,draw->itemID,1,
          gettext,MAX_PATH);
      text=gettext;
      //Рисуем
              DrawText(dc,text.c_str(),text.length(),
              &rectt2,0);
      //Рисуем субитемы
              FillRect(dc,&rectlbk,brush);
      //Чистим память
              DeleteObject(brush);
              DeleteObject(brush2);      
              }
              break;


    Ну вроде все рисуется нормально, КРОМЕ! пустово места.
    Ну всмысле вот 2 колнки и справа пустое место без них

    Вот это место заливается цветом но как то неправильно
    Я выделаю итем, все рисуется ровно до конца второй колонки
    резайзю окно или скроллю listview дорисовывается до конца
    выделяю другой итем - снова тоже самое. Итемы рисуются а этот остаток места неперерисовывается

    Ну вот собстно вопрос - как пофиксить?

    --------------------------------------------------
    PS за качество кода просьба сильно не пиннать... :)
    Сообщение отредактировано: sdjhasdgjh -
      Путь один использовать WM_ERASEBKGND.
      Путь два LVM_SETBKCOLOR.
      Путь три LVM_SETBKIMAGE.
        Понятно...
        А есть еще способы? Я так понимаю эта часть просто не перерисовывается при WM_DRAWITEM.
        Сообщение отредактировано: sdjhasdgjh -
          Конечно же не перерисовывается.
          0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
          0 пользователей:


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