Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / OnMeasureItem для ListView / 5 сообщений из 5, страница 1 из 1
15.07.2005, 14:06
    #33168539
OnMeasureItem для ListView
у листбокса есть св-во OwnerDraw и соот-во можно менять размер элемента через OnMeasureItem и рисовать его самому... как можно сделать тоже самое но с ListView?
Надо просто сделать много-строчные элементы.
...
Рейтинг: 0 / 0
15.07.2005, 16:11
    #33169059
SeraTJ
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
OnMeasureItem для ListView
А почему ты не хочешь листбокс использовать?
У listview-a есть только стиль LVS_OWNERDRAWFIXED, но он работает только для report-mode-а.
...
Рейтинг: 0 / 0
15.07.2005, 16:18
    #33169086
OnMeasureItem для ListView
SeraTJА почему ты не хочешь листбокс использовать?
У listview-a есть только стиль LVS_OWNERDRAWFIXED, но он работает только для report-mode-а.

Собственно мне и нужен только report-mode. И для OWNERDRAWFIXED как я понял можно только рисовать самому (а вот как поменять высоту строки я не нашел - оно вообще возможно? если да, то был бы очень благодарен за пример).

ListBox меня не устраивает, потомучто с ним не так удобно работать когда несколько колонок. И еще у него нету заголовков.
...
Рейтинг: 0 / 0
15.07.2005, 17:19
    #33169348
SeraTJ
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
OnMeasureItem для ListView
Посмотри в сторону WTL-ного примера:
http://www.codeproject.com/wtl/ListView_OwnerDraw.asp

Там подмечены хорошие вещи:
listview создан со стилем LVS_OWNERDRAWFIXED, а затем, чтобы получить WM_MESUAREITEM специально двигают listview.
...
Рейтинг: 0 / 0
16.07.2005, 18:19
    #33169987
OnMeasureItem для ListView
Спасибо. Хороший пример. Теперь можно надеется что задача решима, осталось только найти как. Но увы есть одна проблема, что мне надо это реализовать на C#. Я проанализировал код как смог. И возникли следующие вопросы. Почему-то WndProc для System.Windows.Forms.ListView не получает сообщения WM_INITDIALOG. А на этом как я понял и основана вся суть – надо переместить контрол до вызова WM_INITDIALOG, чтобы принудительно вызвать сообщение WM_MEASUREITEM.

Ниже приведена как раз эта ф-ция, для генерации WM_MEASUREITEM:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
    // 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#.

PS: Хотя думаю, дальше уже не сюда надо писать, поэтому создам параллельную тему в разделе по шарпу.
...
Рейтинг: 0 / 0
Форумы / C++ [игнор отключен] [закрыт для гостей] / OnMeasureItem для ListView / 5 сообщений из 5, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]