如果使用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?还是有办法解决这个问题?
答案 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)
在调试器下 - 所有开始工作正常并有下一个视图: