Здравствуйте, Antech, Вы писали:
A>Как для list control в стиле таблицы (report) задать высоту строк (ячеек)?
По-моему, под высоту шрифта он сам подстраивается... А если надо сделать выше, то создаешь image list (ImageList_Create) с нужной высотой и назначаешь этот image list твоему контролу (ListView_SetImageList).
Вот опять этот вопрос всплыл...
F>По-моему, под высоту шрифта он сам подстраивается...
Если не OwnerDraw. Иначе подстраивается под шрифт по-умолчанию. Если я меняю шрифт на произвольный, в обычном режиме прорисовки высота строк подстраивается, но вот если задать стиль OwnerDraw — фиг, остается прежняя высота.
Пытался ловить WM_MEASUREITEM — нет результата.
Неужели только задавать ImageList? Мне там не нужен ImageList .
Здравствуйте, OLEGus1, Вы писали:
OLE>С этим стилем надо вручную отрисовывать
Ну ясен пень . Отрисовывается все нормально (уже делал для стандартного шрифта). Но высота строк при смене шрифта не меняется ... Даже если Вы не обработаете сообщение WM_DRAWITEM, но у лист-контрла (т. е. таблицы) есть стиль, отображающий линии сетки, то и так видно, что высота строк не соответсвует высоте шрифта.
Покопал поиск. WM_MEASUREITEM появляется только при изменении размеров окна ListView. Сейчас попробую...
Здравствуйте, Antech, Вы писали:
A>Так, проверил. Действительно, если изменить размеры окна ListView и обработать WM_MEASUREITEM, высота строк изменяется.
A>Но нет ли более элегантного метода, чтобы не дергать внешний вид контрола?
WM_MEASUREITEM посылается родителю контрола в момент создания окна.
Если оно у тебя не ловится, значит что-то не так делаешь...
Здравствуйте, rus blood, Вы писали:
RB>WM_MEASUREITEM посылается родителю контрола в момент создания окна. RB>Если оно у тебя не ловится, значит что-то не так делаешь...
Во время создания окна сообщения не ловятся, потому что окно создается из ресурсов (точнее, это один из режимов работы). Но даже если создавать окно на лету, я ведь вначале создаю, а потом сабклассирую. Поэтому при создании окна это сообщение опять же я отловить не могу.
В общем, сделал через изменение размера лист-контрола +/- 1 пиксель с применением LockWindowUpdate().
Здравствуйте, Antech, Вы писали:
A>Здравствуйте, rus blood, Вы писали:
RB>>WM_MEASUREITEM посылается родителю контрола в момент создания окна. RB>>Если оно у тебя не ловится, значит что-то не так делаешь...
A>Во время создания окна сообщения не ловятся, потому что окно создается из ресурсов (точнее, это один из режимов работы). Но даже если создавать окно на лету, я ведь вначале создаю, а потом сабклассирую. Поэтому при создании окна это сообщение опять же я отловить не могу.
Если родителем ловить не хочется, то можно создавать окно динамически.
Можно создавать окно-суперкласс от lisview, и ловить reflection от родителя.
Или перед созданием окна делать сабклассинг родителя и ловить нужное сообщение.