ListCtrl
Кто-нить знает?
Заранее спасибо за помощь!
ListView_SetExtendedListViewStyle(m_hWnd/*ListCtrl*/,LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES);
Конечно, реально, и нет ничего проще:
ListView_SetExtendedListViewStyle(m_hWnd/*ListCtrl*/,LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES);
А ты мой пост внимательно читал? Если было бы все так просто, я бы не спрашивал...
Отрисовываю вручную на мысли не наводит? Я практически весь контрол вручную реализовал, а ты мне про стили пишешь... :devil:
И кто сказал, что будет перерисовка всего контрола? Будет перерисовка только тех итемов, которым пришло сообщение на перерисовку.
И если не хочешь пользоваться стилями, то придётся сетку рисовать самому в DrawItem(…);. Линии в этом случае на фон выводятся, как и всё остальное.
Или можно просто получить контекст устройства на окно этого контрола, а потом при сообщении на перерисовку самому сетку врисовывать.
Хоть отрисовывай в DrawItem(…); итемы вручную, хоть не вручную, если укажешь этот стиль, сетка будет выводиться.
Все верно, просто я даже не проверял, потому что мне нужна только вертикальная сетка...
Ты сам себе ответил:
"Будет перерисовка только тех итемов, которым пришло сообщение на перерисовку." А если перерисовывается фон, линий не будет...
Получить то контекст без проблем, но если перегружать функцию перерисовки, то весь контрол придется отрисовывать ручками...
Получить то контекст без проблем, но если перегружать функцию перерисовки, то весь контрол придется отрисовывать ручками...
Ну а если сначала вызвать windows procedure List View Control'а , потом нарисовать линии?
Ну а если сначала вызвать windows procedure List View Control'а , потом нарисовать линии?
Когда перегружаешь функцию OnPaint в коментах
//Do not call CListCtrl::OnPaint() for painting messages. Вставлял CListCtrl::OnPaint() - ничего не отрисовывает... :(
void CMyList::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct)
{
//Что-то рисуем
}
LRESULT CMyList::WindowProc(UINT message, WPARAM wParam, LPARAM lParam)
{
switch ( message )
{
case WM_PAINT:
{
LV_COLUMN Column;
Column.mask = LVCF_WIDTH;
LONG cPos = 0;
LONG lPos = 0;
CListCtrl::WindowProc(message, wParam, lParam);
while ( GetColumn(cPos,&Column) )
{
HDC hDC = ::GetDC(m_hWnd);
RECT RectWnd;
GetClientRect(&RectWnd);
lPos += Column.cx;
::MoveToEx(hDC,lPos,20,NULL);
::LineTo (hDC,lPos,RectWnd.bottom);
::ReleaseDC(m_hWnd,hDC);
cPos++;
}
return 0;
}
};
return CListCtrl::WindowProc(message, wParam, lParam);
}
Я говорил вот про такую реализацию...
При этом будут перерисовываться только те итемы которым придёт сообщение на перерисовку, а не весь контрол.
Вот тебе и вертикальные полосы.
Когда перегружаешь функцию OnPaint в коментах
//Do not call CListCtrl::OnPaint() for painting messages. Вставлял CListCtrl::OnPaint() - ничего не отрисовывает... :(
Эт потому, что нужно еще убрать CPaintDC dc(this);
(далее как у REFOT'а )