Высота строк ListView после смены шрифта

Тема в разделе "WASM.WIN32", создана пользователем al79, 20 янв 2011.

  1. al79

    al79 Алексей

    Публикаций:
    0
    Регистрация:
    11 май 2006
    Сообщения:
    133
    Адрес:
    Екатеринбург
    Второй раз сталкиваюсь с проблемой изменения высоты строк ListView после смены шрифта.
    Первый раз извернулся таким способом:
    Код (Text):
    1.     invoke SendMessage,hList,WM_SETFONT,eax,1
    2.     sub esp,16
    3.     invoke GetWindowRect,hList,esp
    4.     mov eax,[esp+12]
    5.     sub eax,[esp+4]
    6.     mov edx,[esp+8]
    7.     sub edx,[esp]
    8.     xor al,1
    9.     invoke MoveWindow,hList,0,22,edx,eax,1
    10.     add esp,16
    Вот после этого приходит сообщение WM_MEASUREITEM и ListView нормально перерисовывается.
    Хотелось бы увидеть ответ, как можно изменить высоту строк у ListView не используя приведенное выше извращение.
    Заранее СПАСИБО!
     
  2. mrcrown

    mrcrown Member

    Публикаций:
    0
    Регистрация:
    18 янв 2008
    Сообщения:
    227
    http://msdn.microsoft.com/en-us/library/bb773761%28v=vs.85%29.aspx
     
  3. cresta

    cresta Active Member

    Публикаций:
    0
    Регистрация:
    13 июн 2004
    Сообщения:
    2.257
    mrcrown
    разве листвью обрабатывает сообщения тривью?

    по-моему, для листвью нет способа, кроме изменения размера шрифта.
     
  4. al79

    al79 Алексей

    Публикаций:
    0
    Регистрация:
    11 май 2006
    Сообщения:
    133
    Адрес:
    Екатеринбург
    В этом то и проблема, меняю рамер шрифта, а высота строк при этом не меняется пока не сменишь размеры всего ListView.
    TVM_SETITEMHEIGHT - тоже попробовал, не работает.
    Забавно, что в инете есть сайты которые расказывают про сообщение LVM_SETITEMHEIGHT (0f135h), но это тоже не работает.
     
  5. mrcrown

    mrcrown Member

    Публикаций:
    0
    Регистрация:
    18 янв 2008
    Сообщения:
    227
    Да, не заметил, что дал ссылку на TVM_ но когда-то (очень, очень давно) делал LVM_SETITEMHEIGHT и все работало (Могу и ошибаться)
     
  6. cresta

    cresta Active Member

    Публикаций:
    0
    Регистрация:
    13 июн 2004
    Сообщения:
    2.257
    обновить не пробовал? redrawWindow, updateWindow etc?
     
  7. al79

    al79 Алексей

    Публикаций:
    0
    Регистрация:
    11 май 2006
    Сообщения:
    133
    Адрес:
    Екатеринбург
    И InvalidateRect пробывал, при RedrawWindow - даже иногда на глаз видно, что ListView полностью перерисовывается, но размер строк не меняется и сообщение WM_MEASUREITEM не приходит.
     
  8. Scholium

    Scholium New Member

    Публикаций:
    0
    Регистрация:
    5 мар 2009
    Сообщения:
    96
    На С++ решение есть в статье Изменение высоты и расположения CHeaderCtrl и высоты строк CListCtrl с помощью сообщений HDM_LAYOUT и WM_MEASUREITEM. Если нужен ассемблер, то можно воспользоваться наводкой С++.

    В английской версии этой статьи, в комментариях, идет речь об недокументированных структурах HEADER_INFO и LISTVIEW_INFO c помощью которых можно непосредственно менять многие параметры SysListView32 (CListCtrl / CListView в MFC), в т.ч. высоту строк списка и его заголовка. Только эти структуры настолько недокументированы, что конкретные версии comctl32.dll нужно «изучать» самостоятельно :) .
     
  9. al79

    al79 Алексей

    Публикаций:
    0
    Регистрация:
    11 май 2006
    Сообщения:
    133
    Адрес:
    Екатеринбург
    Интересные ссылки.
    Спасибо!