mfc list tip
时间: 2023-10-26 09:06:32 浏览: 90
MFC 中的列表控件是一种常用的控件,主要用于显示和编辑列表数据。以下是一些 MFC 列表控件的提示:
1. 添加列表控件到对话框或视图中:在资源编辑器中选择“插入 ActiveX 控件”命令,然后选择“Microsoft List Control”控件。
2. 设置列表控件的样式和属性:通过控件属性对话框或代码设置控件的样式和属性,如行高、列宽、表头、多选等。
3. 填充列表控件的数据:通过代码添加行、列和单元格,或者使用数据源绑定来自动填充列表控件。
4. 处理列表控件的事件:在类的消息映射中添加相应的处理函数来处理列表控件的事件,如单击、双击、选择改变等。
5. 使用列表控件的编辑功能:设置列表控件的样式为“可编辑”,然后在响应编辑事件时保存修改后的数据。
6. 使用列表控件的排序功能:设置列表控件的样式为“可排序”,然后在响应排序事件时重新排列列表数据。
7. 使用列表控件的过滤功能:设置列表控件的样式为“可过滤”,然后在响应过滤事件时根据用户输入筛选列表数据。
相关问题
MFC ListCtrl 固定列宽?
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_FIXEDWIDTH);
```
其中,LVS_EX_FIXEDWIDTH 表示启用固定列宽。
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, 100); //100为列宽值,可以根据需要修改
}
}
```
这里设置列宽为 100,可以根据需要修改。注意,当启用了固定列宽后,所有列的宽度都必须相等,否则会出现显示异常的情况。
MFC ListCtrl 为什么无法固定列宽?
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 参数自适应列宽,并且保证列宽不小于列标题的宽度。
阅读全文