1. 列表视图的视图风格 :
LVS_ICON; LVS_SMALLICON; LVS_LIST; LVS_REPORT;
修改视图风格有三种方法:
1. 在属性对话框里面修改;
2. 用ModifyStyle() 修改; ModifyStyle(LVS_TYPEMASK, uiViewStyle);
3. 重载PreCreateWindow 函数并修改cs.style 结构
2. 获取列表视图列大小 GetColumnWidth(iCurrCol);// 获取列大小
和设置列的大小
SetColumnWidth(int nCol,int cx); //cx 可以用一下两个常量之一
1. LVSCW_AUTOSIZE; // 根据列中最宽的文本设置列
2. LVSCW_AUTOSIZE_USEHEADER; // 列的大小足够显示列标题文本
3. 禁止或允许列表视图重绘 SetRedraw(FALSE);// 在重定列表视图大小时停止绘制
4. 给列表视图添加列 InsertColumn(), 列的对齐方式有以下几种
LVCFMT_LEFT; LVCFMT_RIGHT; LVCFMT_CENTER;
5. 插入列表视图项:InsertItem() 和SetItemText();
6. 创建和关联CImageList 对象:
m_imageLarge.Create(IDB_BITMAP, 20, 0, RGB(255,255,255));
listCtrl.SetImageList(&m_imageLarge, LVSIL_NORMAL);
// small icon image list
m_imageSmall.Create(IDB_BITMAP, 20, 0, RGB(255,255,255));
listCtrl.SetImageList(&m_imageSmall, LVSIL_SMALL);
#pragma once
//CMyListCtrl.h 定义文件
struct COLUMNINFO {
// 插入列表视图时候的数据结构
LPTSTR lptstr; // 列名
UINT uiFormat; // 列显示格式
int iLen; // 列长度
};
// CMyListCtrl
class CMyListCtrl : public CListCtrl
{
DECLARE_DYNAMIC(CMyListCtrl)
public :
CMyListCtrl();
virtual ~CMyListCtrl();
protected :
DECLARE_MESSAGE_MAP()
public :
void InitColumn(COLUMNINFO* columninfo, int iSize);
void SizeAllColumns(void );
void SetView(UINT uiViewStyle);
};
inline void CMyListCtrl::SetView(UINT uiViewStyle)
{
ModifyStyle(LVS_TYPEMASK, uiViewStyle);
// 设置列表视图的风格, 有LVS_ICON;LVS_SMALLICON;LVS_LIST;LVS_REPORT 四种;
}
// MyListCtrl.cpp : 实现文件
//
#include "stdafx.h"
#include "TreeCtrl.h"
#include "MyListCtrl.h"
#include "./mylistctrl.h"
// CMyListCtrl
IMPLEMENT_DYNAMIC(CMyListCtrl, CListCtrl)
CMyListCtrl::CMyListCtrl()
{
}
CMyListCtrl::~CMyListCtrl()
{
}
BEGIN_MESSAGE_MAP(CMyListCtrl, CListCtrl)
END_MESSAGE_MAP()
// CMyListCtrl 消息处理程序
void CMyListCtrl::InitColumn(COLUMNINFO* columninfo, int iSize)
{
for (int i=0;i<iSize;++i)
{
InsertColumn(i,columninfo[i].lptstr,
columninfo[i].uiFormat,columninfo[i].iLen);
}
}
void CMyListCtrl::SizeAllColumns(void )
// 调整树视图
{
CHeaderCtrl*pHead=GetHeaderCtrl();
// 获取列头
ASSERT(pHead);
if (pHead)
{
SetRedraw(FALSE); // 在重定列表视图大小时停止绘制
for (int iCurrCol=0;iCurrCol<pHead->GetItemCount();++iCurrCol)
{
SetColumnWidth(iCurrCol,LVSCW_AUTOSIZE);
//LVSCW_AUTOSIZE 根据列中最大的文本设置列大小
int nCurrWith=GetColumnWidth(iCurrCol);// 获取列大小
SetColumnWidth(iCurrCol,LVSCW_AUTOSIZE_USEHEADER);
//LVSCW_AUTOSIZE_USEHEADER 根据列标题大小设置列大小
int nColHdrWidth=GetColumnWidth(iCurrCol);
SetColumnWidth(iCurrCol,max(nColHdrWidth,nCurrWith));
}
SetRedraw(); // 让其可以重新绘制
Invalidate();
}
}