Прорисовка элементов в CListCtrl
От: Ched Россия  
Дата: 23.03.06 16:41
Оценка:
Помогите пожалуйста. Как сделать чтоб при добавлении элементов можно было менять цвет фона, текста. Но как сделать не знаю. И еще мне надо
увеличить немного размер элеметов, они для меня слишком маленькие. Использую стиль Report.
Re: Прорисовка элементов в CListCtrl
От: BlackHeretic Израиль  
Дата: 23.03.06 16:56
Оценка:
OWNERDROW
Или сделай поиск по CFListCtrl по RSDN — нечего изобретать велосипед
Размер строчек в нормальном листе задается через фонт (кажется), в OWNERDRAW сам задаешь.
ICQ 156156278
Re: Прорисовка элементов в CListCtrl
От: Crypto Украина  
Дата: 23.03.06 16:59
Оценка:
Здравствуйте, Ched, Вы писали:

C>Помогите пожалуйста. Как сделать чтоб при добавлении элементов можно было менять цвет фона, текста. Но как сделать не знаю. И еще мне надо

C>увеличить немного размер элеметов, они для меня слишком маленькие. Использую стиль Report.

Информации по этому делу валом.
Например здесь.
Много чего здесь.
Вобщем поиск рулит.

Удачи.
Re[2]: Прорисовка элементов в CListCtrl
От: Ched Россия  
Дата: 23.03.06 17:53
Оценка:
Здравствуйте, Crypto, Вы писали:

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


C>>Помогите пожалуйста. Как сделать чтоб при добавлении элементов можно было менять цвет фона, текста. Но как сделать не знаю. И еще мне надо

C>>увеличить немного размер элеметов, они для меня слишком маленькие. Использую стиль Report.

C>Информации по этому делу валом.

C>Например здесь.
C>Много чего здесь.
C>Вобщем поиск рулит.

C>Удачи.

Ну вот я создал обработку DrawItem и MesureItem. В MesureItem меняю
высоту строк а вот в дроу итем хочу чтобы вызвался стандартный
обработчик CListCtrl. Можно ли так?
Переопрелел в классе Диалога. Но вот в DrawItem в функции
CDialog::OnDrawItem(nIDCtl, lpDrawItemStruct); выдает ошибку.
Если ее закоментить то все норм но вот итемы не выводятся. Как
правильно делать?
Re[3]: Прорисовка элементов в CListCtrl
От: _devdi_  
Дата: 24.03.06 15:07
Оценка:
Здравствуйте, Ched, Вы писали:

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


C>правильно делать?


пытаться обработать эти сообщения в паренте это еще то удовольствие
Лучше просабклась CListCtrl.

Далее отрисовку айтема делать в виртуальном методе DrawItem.
Для изменения высоты Item'ов нужно обработать отраженное парентом WM_MEASUREITEM.
Если у тебя листконтрол лежин на диалоге, то для того чтобы послалось WM_MEASUREITEM листконтролу на OnInitDialog() пошли листу сообщение
WM_WINDOWPOSCHANGED.

Что — то типа
WINDOWPOS wp;
    CRect rc;
    m_List.GetWindowRect( &rc );
    wp.hwnd  = m_hWnd;
    wp.cx    = rc.Width();
    wp.cy    = rc.Height();
    wp.flags = SWP_NOACTIVATE | SWP_NOMOVE | SWP_NOOWNERZORDER | SWP_NOZORDER;
    m_List.SendMessage(WM_WINDOWPOSCHANGED, 0, (LPARAM)&wp );


Код для листконтрола должен выглядеть примерно так:

// ListControl.cpp : implementation file
//

#include "stdafx.h"
#include "3.h"
#include "ListControl.h"
#include ".\listcontrol.h"

IMPLEMENT_DYNAMIC(CListControl, CListCtrl)
CListControl::CListControl()
{
}

CListControl::~CListControl()
{
}

BEGIN_MESSAGE_MAP(CListControl, CListCtrl)
    ON_WM_DRAWITEM()
    ON_WM_MEASUREITEM_REFLECT()
END_MESSAGE_MAP()


void CListControl::OnDrawItem(int nIDCtl, LPDRAWITEMSTRUCT lpDrawItemStruct)
{
}

void CListControl::MeasureItem(LPMEASUREITEMSTRUCT lpMeasureItemStruct)
{
}

void CListControl::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct)
{
    
    // TODO:  Add your code to draw the specified item
}



// ListControl.h

class CListControl : public CListCtrl
{
    DECLARE_DYNAMIC(CListControl)

public:
    CListControl();
    virtual ~CListControl();

protected:
    DECLARE_MESSAGE_MAP()
public:
    afx_msg void OnDrawItem(int nIDCtl, LPDRAWITEMSTRUCT lpDrawItemStruct);
    afx_msg void MeasureItem(LPMEASUREITEMSTRUCT lpMeasureItemStruct);
    virtual void DrawItem(LPDRAWITEMSTRUCT /*lpDrawItemStruct*/);
};



Успехов
Re[4]: Прорисовка элементов в CListCtrl
От: Ched Россия  
Дата: 24.03.06 16:06
Оценка:
Спасибо большое!
Re[4]: Прорисовка элементов в CListCtrl
От: Ched Россия  
Дата: 24.03.06 17:46
Оценка:
У меня еще проблемка. Надеюсь что последняя. Как правильно вывести текст? Т.е. отрисовать элемент. Можно ли сделать стандартным способом? Или надо полностью писать отрисовку?
Re[5]: Прорисовка элементов в CListCtrl
От: Crypto Украина  
Дата: 25.03.06 17:43
Оценка:
Здравствуйте, Ched, Вы писали:

C>У меня еще проблемка. Надеюсь что последняя. Как правильно вывести текст? Т.е. отрисовать элемент. Можно ли сделать стандартным способом? Или надо полностью писать отрисовку?


Секундочку, есть еще такая вещь как CUSTOMDRAW. Можно будет просто задавать расцветку. По-моему это то, что нужно вопрошающему.
Просто пример можно глянуть здесь
Удачи!
Re[6]: Прорисовка элементов в CListCtrl
От: Ched Россия  
Дата: 25.03.06 19:05
Оценка:
Здравствуйте, Crypto, Вы писали:

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


C>>У меня еще проблемка. Надеюсь что последняя. Как правильно вывести текст? Т.е. отрисовать элемент. Можно ли сделать стандартным способом? Или надо полностью писать отрисовку?


C>Секундочку, есть еще такая вещь как CUSTOMDRAW. Можно будет просто задавать расцветку. По-моему это то, что нужно вопрошающему.

C>Просто пример можно глянуть здесь
C>Удачи!
Ну я знаю что есть такая штучку. Но мне нужно отрисовать полностью элемент, потому что перегружается полностью функция DrawItem. Вот и спрашиваю как это сделать? А за ссылочку большое спасибо.
Re[7]: Прорисовка элементов в CListCtrl
От: Geronimo Россия  
Дата: 28.03.06 08:38
Оценка:
Удалено избыточное цитирование. — SchweinDeBurg

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

C>Ну я знаю что есть такая штучку. Но мне нужно отрисовать полностью элемент, потому что перегружается полностью функция DrawItem. Вот и спрашиваю как это сделать? А за ссылочку большое спасибо.


Насчет cusomdraw, вещь реальная и не такая сложная как кажется на первый взгляд, разрисовать лист можно и вдоль и поперек.
А размер строк определяется размером imagelista.
[от модератора]
От: SchweinDeBurg Россия https://zarezky.spb.ru/
Дата: 28.03.06 08:54
Оценка:
Убедительная просьба — следить за объемом цитирования.
[ posted via RSDN@Home 1.1.4 stable SR1 r568, accompanied by silence ]
- Искренне ваш, Поросенок Пафнутий
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.