MFC ListCtrl 为什么无法固定列宽?
时间: 2023-09-03 09:05:58 浏览: 144
mfc_ListView/ListCtrl 实现点击表头排序与固定列宽
5星 · 资源好评率100%
MFC ListCtrl 的列宽可以通过设置 ListCtrl 的风格样式实现固定列宽,具体做法如下:
1.在资源编辑器中,打开 ListCtrl 的属性对话框,将风格样式设置为 Report。
2.在代码中,设置 ListCtrl 的扩展风格,使其支持固定列宽。具体代码如下:
```c++
m_listCtrl.SetExtendedStyle(m_listCtrl.GetExtendedStyle() | LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES | LVS_EX_HEADERDRAGDROP | LVS_EX_ONECLICKACTIVATE | LVS_EX_DOUBLEBUFFER | LVS_EX_UNDERLINEHOT | LVS_EX_CHECKBOXES | LVS_EX_FLATSB | LVS_EX_TRACKSELECT | LVS_EX_INFOTIP);
```
其中,LVS_EX_GRIDLINES 和 LVS_EX_HEADERDRAGDROP 分别表示显示网格线和支持拖拽调整列宽。
3.在 ListCtrl 的 OnInitialUpdate 函数中,设置列宽。具体代码如下:
```c++
CHeaderCtrl* pHeaderCtrl = m_listCtrl.GetHeaderCtrl();
if (pHeaderCtrl != NULL)
{
int nColCount = pHeaderCtrl->GetItemCount();
for (int i = 0; i < nColCount; ++i)
{
m_listCtrl.SetColumnWidth(i, LVSCW_AUTOSIZE_USEHEADER);
}
}
```
这里使用 LVSCW_AUTOSIZE_USEHEADER 参数自适应列宽,并且保证列宽不小于列标题的宽度。
阅读全文