У листбокса есть св-во OwnerDraw и соот-во можно менять размер элемента через OnMeasureItem и рисовать его самому...
Как можно сделать тоже самое но с ListView?
Надо просто сделать много-строчные элементы.
Нашел нужный пример на Си++, но увы не до конца пойму как его перенести.
http://www.codeproject.com/wtl/ListView_OwnerDraw.asp
Я попытался сделать аналогичное на C#, но есть вопросы.
Почему-то WndProc для System.Windows.Forms.ListView не получает сообщения WM_INITDIALOG. А на этом основана вся суть того контрола на Си++. Надо переместить контрол до вызова WM_INITDIALOG, чтобы принудительно вызвать сообщение WM_MEASUREITEM. И т.о. можно будет сделать любой размер элемента.
Ниже приведена как раз эта ф-ция, для генерации WM_MEASUREITEM:
// If this control was .SubclassWindowed instead of .Create(Xe)d, then it
// will not receive a WM_MEASUREITEM since this message occurs before
// WM_INITDIALOG. By moving the window we can get windows to generate
// another one for us.
// ---------------------------------------------------------------------
void ForceMeasureItemMessage()
{
// I just want to nudge it up a little.
CRect window_rect;
GetWindowRect(&window_rect);
CPoint pt = window_rect.TopLeft();
::ScreenToClient(GetParent(), &pt);
window_rect.right = pt.x + window_rect.Width();
window_rect.left = pt.x;
window_rect.bottom = pt.y + window_rect.Height();
window_rect.top = pt.y + 1;
MoveWindow(window_rect);
// Alright now move it back.
window_rect.top = pt.y;
MoveWindow(window_rect);
}
Щас эта ф-ция вызывается в OnInitDialog() т.о. до сообщения WM_INITDIALOG.
Вопрос в том как это реализовать на C#?