这是ListView的错误吗?

时间:2016-07-01 22:33:41

标签: win32gui

如果使用LVS_REPORT样式创建WC_LISTVIEW并设置LVSIL_SMALL和LVSIL_STATE(或使用LVS_EX_CHECKBOXES)图像列表和小图像的高度小于状态图像的高度 - 列表显示不正确:小图像不以Y为中心,但在同一行上使用状态图像,底线(完全是CY_state - CY_small)由垃圾填充。例如,在高DPI显示器上,带有LVS_EX_CHECKBOXES的ListView对于CY_state使用20像素高度,如果使用15像素小图标 - 将是〜下一张图片(图像的左侧)。如果将状态图像更改为< = CY_small将正常显示(图像右侧) 这是已知的bug?还是有办法解决这个问题? enter image description here

1 个答案:

答案 0 :(得分:1)

是的,这是ListView错误 - 存在于所有Windows版本中,包括最新的win10版本。

功能错误

  

int CLVView :: ComputeCYItemSize()

这里存在下一个代码:

int CLVView::ComputeCYItemSize() // this -> CLVReportView
{
    // CListView* _pListView;
    CLVImageListManager* p = _pListView->_pImageListManager;
    ...
    if (p->_himlState)
    {
        p->_cySmall = max(p->_cyState, p->_cySmall);// bug !! need remove this line
    ...
    }
  ...
}

如果'nop'

  

p-> _cySmall = max(p-> _cyState,p-> _cySmall)

在调试器下 - 所有开始工作正常并有下一个视图:

enter image description here