作者:朱金灿

来源:http://blog.csdn.net/clever101

今天介绍下如何在一个视图上动态创建一个ListCtrl。

1.新建一个MFC的单文档工程,这里暂定名字为ListDemo。

2.在视图类上定义一个CListCtrl变量和保存各列宽度的数组

CListCtrl  m_List;
static int m_nColWidths[];// 用于保存列宽度

3.响应视图类的WM_CREATE和WM_SIZE两个消息,具体代码如下:

int CListDemoView::m_nColWidths[5] = {5,20,20,15,5};	// column width

void CListDemoView::InitListCtrl()
{ // set column width according to window rect
CRect rect;
m_List.GetWindowRect(&rect); int w = rect.Width() - 2; TCHAR * lpszHeaders[] = { _T("序号"),
_T("姓名"),
_T("学校"),
_T("班别"),
_T("年龄"),
NULL };
int i;
int total_cx = 0;
LV_COLUMN lvcolumn;
memset(&lvcolumn, 0, sizeof(lvcolumn)); w = w - ::GetSystemMetrics(SM_CXVSCROLL); // width of vertical scroll bar // add columns
for (i = 0; ; i++)
{
if (lpszHeaders[i] == NULL)
break; lvcolumn.mask = LVCF_FMT | LVCF_SUBITEM | LVCF_TEXT | LVCF_WIDTH;
lvcolumn.fmt = LVCFMT_LEFT;
lvcolumn.pszText = lpszHeaders[i];
lvcolumn.iSubItem = i;
lvcolumn.cx = (lpszHeaders[i+1] == NULL) ? w - total_cx - 2 : (w * m_nColWidths[i]) / 64;
total_cx += lvcolumn.cx;
m_List.InsertColumn(i, &lvcolumn);
}
// 插入一行
CString str = _T("");
m_List.InsertItem(0,str);
} // CListDemoView 消息处理程序
#define IDC_LIST_DIVISION 2000 int CListDemoView::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CView::OnCreate(lpCreateStruct) == -1)
return -1; // 定义窗口风格
DWORD dwStyle = LVS_REPORT | LVS_SINGLESEL | LVS_SHOWSELALWAYS |
WS_CHILD | WS_VISIBLE | WS_GROUP | WS_TABSTOP; CRect rect;
GetClientRect(&rect);
// 动态创建
VERIFY(m_List.CreateEx(WS_EX_CLIENTEDGE,dwStyle,rect,this,IDC_LIST_DIVISION));
// 设置字体
CFont *pFont = GetFont();
if (pFont)
m_List.SetFont(pFont);
// 设置扩展风格
m_List.SetExtendedStyle(LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES);
// 初始化列表
InitListCtrl(); return 0;
} void CListDemoView::OnSize(UINT nType, int cx, int cy)
{
CView::OnSize(nType, cx, cy); if (::IsWindow(m_List.m_hWnd))
{
m_List.LockWindowUpdate(); m_List.MoveWindow(0, 0, cx, cy); CRect rect;
GetClientRect(&rect); int w = cx - 2 - ::GetSystemMetrics(SM_CXVSCROLL);
int total_cx = 0;
int nColNum = 5; //调整列的宽度
for (int i = 0; i < nColNum; i++)
{
int colwidth = (i == 4) ? w - total_cx - 2 : (w * m_nColWidths[i]) / 64;
total_cx += colwidth;
m_List.SetColumnWidth(i,colwidth-2);
}
m_List.UnlockWindowUpdate();
}
}

效果图如下:

示例工程源码下载

最新文章

  1. linux 命令之comm
  2. 第23章 SEH结构化异常处理(3)_终止处理程序
  3. 【ES5】hideProperty
  4. scala学习笔记(7):函数(1)
  5. little&#39;s law(律特法则)
  6. linux编辑器 vi的使用
  7. 介绍两个Eclipse插件: Implementors &amp; Call Hierarchy
  8. Shell脚本——DHCP自动部署
  9. 异常:Unknown lifecycle phase &quot;mvn&quot;. You must specify a valid lifecycle
  10. IDEA 201809 Jrebel安装破解
  11. Python3的基础
  12. PAT A1103
  13. Ubuntu18.04版本设置root账户
  14. 简述DDOS攻击的工作原理
  15. bzoj 1452: [JSOI2009]Count (二维树状数组)
  16. 饮冰三年-人工智能-linux-09 服务
  17. JavaScript中十种一步拷贝数组的方法
  18. java代码实现highchart与数据库数据结合完整案例分析(一)---饼状图
  19. java 附件上传、下载前后端代码
  20. C/C++ -- Gui编程 -- Qt库的使用 -- 对话框QDialog

热门文章

  1. 单位转换 inch mm mil
  2. unmapping error
  3. centos7.0查看IP
  4. 【例题 6-12 UVA - 572 】Oil Deposits
  5. xml 标准字符过滤
  6. 10.2、android输入系统_必备Linux编程知识_双向通信(scoketpair)
  7. PHP 分布式集群中session共享问题以及session有效期的设置
  8. POJ 1511 Invitation Cards (ZOJ 2008) 使用优先队列的dijkstra
  9. 23、V4L2应用编写及各个ioctl涉及结构体说明分析
  10. client、server端编程