Второй раз сталкиваюсь с проблемой изменения высоты строк ListView после смены шрифта. Первый раз извернулся таким способом: Код (Text): invoke SendMessage,hList,WM_SETFONT,eax,1 sub esp,16 invoke GetWindowRect,hList,esp mov eax,[esp+12] sub eax,[esp+4] mov edx,[esp+8] sub edx,[esp] xor al,1 invoke MoveWindow,hList,0,22,edx,eax,1 add esp,16 Вот после этого приходит сообщение WM_MEASUREITEM и ListView нормально перерисовывается. Хотелось бы увидеть ответ, как можно изменить высоту строк у ListView не используя приведенное выше извращение. Заранее СПАСИБО!
mrcrown разве листвью обрабатывает сообщения тривью? по-моему, для листвью нет способа, кроме изменения размера шрифта.
В этом то и проблема, меняю рамер шрифта, а высота строк при этом не меняется пока не сменишь размеры всего ListView. TVM_SETITEMHEIGHT - тоже попробовал, не работает. Забавно, что в инете есть сайты которые расказывают про сообщение LVM_SETITEMHEIGHT (0f135h), но это тоже не работает.
Да, не заметил, что дал ссылку на TVM_ но когда-то (очень, очень давно) делал LVM_SETITEMHEIGHT и все работало (Могу и ошибаться)
И InvalidateRect пробывал, при RedrawWindow - даже иногда на глаз видно, что ListView полностью перерисовывается, но размер строк не меняется и сообщение WM_MEASUREITEM не приходит.
На С++ решение есть в статье Изменение высоты и расположения CHeaderCtrl и высоты строк CListCtrl с помощью сообщений HDM_LAYOUT и WM_MEASUREITEM. Если нужен ассемблер, то можно воспользоваться наводкой С++. В английской версии этой статьи, в комментариях, идет речь об недокументированных структурах HEADER_INFO и LISTVIEW_INFO c помощью которых можно непосредственно менять многие параметры SysListView32 (CListCtrl / CListView в MFC), в т.ч. высоту строк списка и его заголовка. Только эти структуры настолько недокументированы, что конкретные версии comctl32.dll нужно «изучать» самостоятельно .