CMFCListctrl排序

CMFCListctrl排序,mfc,Mfc,在CMFCListCtrl中,我通过调用函数SetSortColumn()在标题中添加排序箭头图像 现在的问题是,当显示排序箭头图像时,标题文本不完全可见 如何在显示排序箭头时以编程方式调整/扩展标题的大小 内部代码显示表头控件-5的项目高度用于分拣符号的房间 请参阅CMFCHeaderCtrl::OnDrawItem // Draw sort arrow: CRect rectArrow = rect; rectArrow.DeflateRect(5, 5);

在CMFCListCtrl中,我通过调用函数SetSortColumn()在标题中添加排序箭头图像

现在的问题是,当显示排序箭头图像时,标题文本不完全可见

如何在显示排序箭头时以编程方式调整/扩展标题的大小


内部代码显示表头控件-5的项目高度用于分拣符号的房间

请参阅CMFCHeaderCtrl::OnDrawItem

    // Draw sort arrow:
    CRect rectArrow = rect;
    rectArrow.DeflateRect(5, 5);
    rectArrow.left = rectArrow.right - rectArrow.Height();
因此,将所有项目放大此大小将有所帮助


这应该行得通。计算使用字体的高度,乘以1.5并将其添加到列的宽度。

解决方案之一-您应该在子类CMFCHeaderCtrl类(列表标题类)中重写OnDrawItem(…)方法要手动绘制,请随意。我建议从一开始就为列指定更大的宽度…尝试调用
SetColumnWidth(n,LVSCW\u AUTOSIZE\u USEHEADER)
。我不确定它是否能正确处理排序图像,因为这可能是由MFC代码绘制的。根据是否显示排序箭头,没有任何代码告诉系统标题项所需的最小大小。绘图代码几乎是高dpi时代之前硬编码的东西,比如
rectArrow.DeflateRect(5,5)
(eek!)。最好是一起避免这种怪兽。我会根据系统指标设置复选框的大小,并添加宽度。或者,查看是否有自动调整大小功能可以自动调整大小。我使用
CGridCtrl
,它会自动调整大小。