在视图上创建ListCtrl的做法
作者:朱金灿
来源: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();
}
}
效果图如下:
在视图上创建ListCtrl的做法的更多相关文章
- SqlServer在视图上创建索引
在视图上创建索引需要三个条件: 一.视图必须绑定到架构. 要做到这点,在 CREATE VIEW 语句中,必须加上 WITH SCHEMABINDING,如果是使用企业管理器,则在设计界面的空白处点击 ...
- SqlServer视图的创建与使用
SqlServer系列之视图的创建与使用: 什么是视图? 视图的概述 在数据查询中,可以看到数据表设计过程中,考虑到数据的冗余度低.数据一致性等问题,通常对数据表的设计要满足范式的要求,因此也会造成一 ...
- ASP.NET Core 中文文档 第二章 指南(1)用 Visual Studio Code 在 macOS 上创建首个 ASP.NET Core 应用程序
原文:Your First ASP.NET Core Application on a Mac Using Visual Studio Code 作者:Daniel Roth.Steve Smith ...
- IntelliJ IDEA上创建maven Spring MVC项目
IntelliJ IDEA上创建Maven Spring MVC项目 各软件版本 利用maven骨架建立一个webapp 建立相应的目录 配置Maven和SpringMVC 配置Maven的pom.x ...
- oracle 物化视图及创建索引
物化视图是一种特殊的物理表,“物化”(Materialized)视图是相对普通视图而言的.普通视图是虚拟表,应用的局限性大,任何对视图的查询,Oracle都实际上转换为视图SQL语句的查询.这样对整体 ...
- Oracle物化视图的创建及使用
oracle物化视图 一.oracle物化视图基本概念 物化视图首先需要创建物化视图日志, oracle依据用户创建的物化视图日志来创建物化视图日志表, 物化视图日志表的名称为mlog$_后面跟 ...
- Oracle物化视图的创建及使用(一
Oracle物化视图的创建及使用 http://blog.csdn.net/tegwy/article/details/8935058 先看简单创建语句: create materialized ...
- Mysql视图的创建及使用
视图理解: 视图又叫虚表.同真实的表一样,视图包含一系列带有名称的列和行数据.但是,视图并不在数据库中以存储的数据值集形式存在.行和列数据来自由定义视图的查询所引用的表,并且在引用视图时动态生成. 视 ...
- window 上创建 .gitignore文件
由于 git默认不上传空文件夹,如果需要上传空文件夹,那么需要这样上传空文件,官方给出这样的做法~~ (需要创建.gitignore文件) 在linux 上比较好操作了,这里说下在window 上 创 ...
随机推荐
- Hadoop ecosystem 生态圈
Cascading: hadoop上面的workflow Sqoop(发音:skup)是一款开源的工具,主要用于在Hadoop(Hive)与传统的数据库(mysql.postgresql...)间进行 ...
- 在设置了android:parentActivityName后,点击子Activity返回键,父Activity总会调用OnDestroy()的解决方式
近期查了非常久这个事情.分享给大家, 原理非常easy,一个Activity在manifet里声明了android:parentActivityName:这时候通过Activity左上角的返回butt ...
- JS实现时钟效果
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- 最新GitHub账号注册(详细图解)
说明:该篇博客是博主一字一码编写的,实属不易,请尊重原创,谢谢大家! 一.简介 GitHub是一个面向开源及私有软件项目的托管平台,因为只支持git 作为唯一的版本库格式进行托管,故名gitHub. ...
- SimpleDateFormat的使用问题
今天对过去的代码进行重构,因为使用静态方法调用的原因,使用了一个静态的SimpleDateFormat,结果FindBug报错了,查看了一下,说是使用了静态的SimpleDateFormat对象. S ...
- AndroidActivity跳转动画,让你的APP瞬间绚丽起来
我们都知道绚丽的APP总会给用户耳目一新的感觉,为了抓住用户更大网络公司使出浑身解数让自己的产品更绚丽,而绚丽最简单的效果就是Activity跳转效果,不仅能够让用户看起来舒服,并且实现起来也特别简单 ...
- javascript面对对象编程 之继承
上一篇博客中为大家介绍了javascript面向对象编程原则的封装,今天为大家介绍继承.在javascript中没有类的概念,全部不能像c#.java语言那样.直接的用类去继承类.比方如今有比方.如今 ...
- HDU1392:Surround the Trees(凸包问题)
Surround the Trees Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Other ...
- 19、opencv和v4l2的关系
分析如下: v4L2是针对uvc免驱usb设备的编程框架,而opencv是一种跨平台计算机视觉库,opencv不仅支持v4l2框架,还支持windows.os等操作系统上的摄像头框架 cvCreate ...
- 【u230】回文词
Time Limit: 1 second Memory Limit: 128 MB [问题描述] CR喜欢研究回文词,有天他发现一篇文章,里面有很多回文数,这使他来了兴趣.他决定找出所有长度在n个字节 ...