在MFC单文档应用程序中删除列表视图的列

MFC教程 以下是我从其他网站中学的内容,后有相应的网站学习链接地址,可供学习 1.选择菜单项File->New->Project,弹出“New Project”对话框。  2.左侧面板中Installed Templated的Visual C++下选择MFC,中间窗口中选择MFC Application,然后在下面的Name编辑框中键入工程名称,本例取名“Addition”,在Location编辑框 阅读详情

1、对话框中的列表视图控件       

         在写一些数据库程序的时候经常会用到网格报表类型的列表视图控件。这个控件对于对话框程序来说和使用其它控件并没有多大区别。首先将其View属性设置为Report类型;然后为其关联一个CListCtrl控件类型的成员变量;最后在初始化对话框函数中设置其扩展类型为网格类型,并为其添加列。

        但是,对于一个具有一定灵活性的程序来说,往往最初的列表视图控件列并不是一成不变的。我们通常将其封装到不同的函数中,在不同的命令下调用不同的布局函数,然后以不同的列表视图来呈现数据。例如,用户单击“患者信息”的时候,列表视图要以对应患者信息的列来呈现数据;当用户单击“诊疗信息”的时候,列表视图要以对应诊疗信息的列来呈现最近的诊疗情况。

        上面两个操作是在一个程序界面下完成的。这就遇到了一个问题:每当我们在列表视图中切换布局的时候,原先已有的列应该怎样处理?查看MSDN中CListCtrl的成员,可以找到CListCtrl::DeleteColumn()成员函数。在该函数下面的Example中,MSDN提供了一个删除所有列的代码。该代码如下所示。

int nColumnCount = m_myListCtrl.GetHeaderCtrl()->GetItemCount();

// Delete all of the columns.
for (int i=0; i < nColumnCount; i++)
{
   m_myListCtrl.DeleteColumn(0);
}


        该代码是显而易见的,首先得到列表视图的列数,然后循环删除各列。要注意,在删除列之前,首先要调用DeleteAllItems()函数删除列表视图中的所有元素。

2、单文档中的列表视图

        在对话框程序中固然可以使用列表视图控件,对于文档程序来说当然也能使用,只需在创建程序最后一步将View类的基类改为CFormView即可。但是,我们通常使用CListView作为将要使用列表视图单文档程序的基类。这样,我们就可以吧视图窗口当做列表视图来使用。

        利用向导创建好程序后。我们可以在CXXXView::OnInitialUpdate()函数中对视图窗口进行初始化,插入列,并且设置一些扩展类型。一般代码如下所示。

	CListCtrl& listCtrl = GetListCtrl();

	listCtrl.ModifyStyle(0, LVS_REPORT);
	listCtrl.SetExtendedStyle(LVS_EX_GRIDLINES | LVS_EX_FULLROWSELECT);	// 设置扩展类型为网格和全选类型
	
	listCtrl.InsertColumn(0, _T("姓名"), LVCFMT_CENTER, 100);
	listCtrl.InsertColumn(1, _T("性别"), LVCFMT_CENTER, 100);

 

3、单文档程序中删除列表视图中的列

        这才是我写这篇文章的重点。如果你想做一个程序,这个程序在工具栏里面有几个按钮,你单击不同的按钮,列表视图中的布局会改变并列出相应的数据。首先,你得把不同的布局封装到不同的函数中;然后,在不同的按钮消息响应函数中调用不同的布局函数。就像第一条中讲的那样,首先得删除原先的列。当然你找到了MSDN中那个CListCtrl::DeleteColumn()方法,并且看到了它下面提供的例子。但是,如果你不加修饰的用了那段代码,你的程序会得到一个内存不能为read。

        原因是在调用GetItemCount()上出了问题。意思就是问题处在得到列表视图列数上。是不是在文档程序中就不能得到列表视图的列数了呢?当然不是,可以利用::SendMessage()函数发送LVM_GETITEMCOUNT消息来得到列数,代码如下所示。

	CListCtrl& m_myListCtrl = GetListCtrl();
	HWND hList = ListView_GetHeader(m_myListCtrl);	// 首先利用该宏得到视图表头句柄
	int nColumnCount = ::SendMessage(hList, HDM_GETITEMCOUNT, 0, 0);

        如果得到了视图的列数nColumnCount,调用第1小节中那段for循环就可以完成删除列的操作。要注意,在删除列之前,首先要调用DeleteAllItems()函数删除列表视图中的所有元素。

        不过即使没有得到列数也是可以完成删除列的。可以利用DeleteColumn()方法返回值得特性,利用一个while语句完成所有列的删除。该函数调用成功返回非0,调用失败返回0值。意思就是如果有列就返回非0,如果删除完了就返回0。代码如下所示,ClearList()函数是笔者自己写的删除文档视图列表中列的函数。

void CXXXView::ClearList()
{
	CListCtrl& m_myListCtrl = GetListCtrl();

	m_myListCtrl.DeleteAllItems();
	// Delete all of the columns.
	while (m_myListCtrl.DeleteColumn(0));
}


 

mfc单文档分割视图与列表框的读入 mfc单文档分割视图,支持文件的批量读入和输出,以列表框的形式输出, 立即下载

相关推荐

为何LPDDR4支持on-die ECC,但是DDR4却不支持呢?

DRAM的ECC,目前的编码方式都是128bit data,产生8bit parity或者ECC code. 而且必须要128bit才行。这8bit的ECC code是要被写入到DRAM内存里面的,从而read的时候,可以读取这8bit ECC code来判定read data是否有错,如果是SBF,就可以纠错了,如果是double bit,大部分时候是可以detect到错误,即所谓的SEC(Single Error Correct) + DED(Double Error Detect).

一个DRAM从业者的告白 1556

利用MFC向导生成单文档应用程序框架

HelloWorld 点击文件(File)->新建(New)->项目(Project)。弹出新建项目(New Project)

qq_36314864的博客 759

Moodle平台题库建设技术

Moodle平台题库建设技术简述1新的改变1功能快捷键1合理的创建标题,有助于目录的生成1如何改变文本的样式1插入链接与图片1如何插入一段漂亮的代码片1生成一个适合你的列表1创建一个表格1设定内容居中、居左、居右1SmartyPants1创建一个自定义列表1如何创建一个注脚注释也是必不可少的1KaTeX数学公式1新的甘特图功能,丰富你的文章1UML 图表1FLowchart流程图1导出与导入导出1...

lxf78的博客 4534

MFC单文档中显示本地某路径中的所有文件

刚开始学MFC,记录一下学习过程中遇到的问题:作业要求 显示本地某一个文件夹下的文件列表,类似资源管理器。运行结果如图一所示。 图一 运行结果图实现步骤 创建单文档类 在View类中的OnCreate中利用CListCtrl进行文件列表显示 利用CFileFind获取指定路径下的所有文件列表 设置View类中的OnSize() ,显示列表 具体实现1.在View类中创建两个成员变量分别为:

木头人151的博客 799

医药行业SAP序列号管理深度解析:如何满足GMP合规要求

本文深度解析了医药行业如何利用SAP序列号管理构建满足GMP合规要求的数字化追溯体系。文章详细阐述了SAP序列号在实现从生产到患者全流程“一物一码”精准追溯中的核心作用,并探讨了其与质量管理、冷链监控等系统的关键集成配置,为医药企业应对严格监管、保障产品质量与安全提供了切实可行的技术方案。

backprop5master的博客 655

【rPPG】基于多光谱摄像头的非接触式睡眠血氧监测系统(传统建模方法解析)

本文深入解析了基于多光谱摄像头的非接触式睡眠血氧监测系统,重点探讨了rPPG技术的原理、硬件设计及传统建模方法。通过多光谱摄像头捕捉皮肤微弱光学变化,实现医疗级精度的心率和血氧监测,特别适合长期睡眠监测场景。文章详细介绍了摄像头选型、照明系统设计以及PBV模型等核心技术,并对比了与传统传感器的性能差异。

weixin_30300225的博客 562

MFC单文档中创建多视图

基本步骤如下: 1.首先创建一个MFC单文档应用程序。 2.添加4个MFC类TopLView、BottomLView、TopRView、BottomRView,基类为CView。 3.添加一个MFC类CControlForm,基类为CFormView,对话框ID默认。 4.创建一个切分类,如MySplitter,基类为CSplitterWnd(默认基类选项中无此类,自己添加

nishiwodeangel的专栏 1367

大疆OcuSync系统背后的黑科技:跳频扩频技术如何让你的无人机飞得更稳

本文深入解析了大疆OcuSync系统如何运用跳频扩频技术等先进无线通信方案,显著提升无人机在复杂环境下的飞行稳定性。系统通过跳频扩频与直接序列扩频技术协同工作,结合双频智能切换与多天线MIMO,有效对抗信号干扰与多径效应,确保控制指令与高清图传的可靠、低延迟传输,为用户带来更安心、更流畅的飞行体验。

ol7890123的博客 628

单文档和多文档(一)

1.单文档和多文档的概念 VC的MFC库支持三种不同的应用程序 1)单文档界面(SDI) 2)多文档界面(MDI) 3)基于对话框的应用程序 SDI的应用程序只有一个窗口,比如记事本,MDI的应用程序每次可以读写多个文件或文档,可同时对多个文档进行操作,可以有多个子窗口,比如word。使用appwizard创建单文档和多文档界面的应用程序的过程几乎是一样的。 两者的区别在于: 1)在创建SDI界面...

l93919861的博客 2290

【Reality Capture 】01:Reality Capture1.5中文版安装教程(附安装包下载)

本文详细介绍了Reality Capture 1.5中文版的安装步骤。首先,下载并解压Reality Capture v1.4.0汉化版安装包,运行EpicInstaller并更改安装路径。接着,启动Epic Games Launcher,登录或注册账号后下载并安装软件。安装完成后,进入主界面并设置中文语言。此外,还提供了中文补丁的拷贝方法,将ui.xml和RealityCapture_CHS.exe文件分别放置到指定目录,并运行RealityCapture_CHS.exe以完成汉化。最后,文章提供了Rea

智慧空间实验室 1749

数字电视中的 Closed Caption (CC) 字幕标准协议

本文将详细介绍 DVB中的 CC 字幕标准协议,包括数据结构格式、字段定义、字段占用比特数以及字段用途。此外,本文还将举例说明如何从 TS 传输流中解析 CC 字幕信息,并组织打包到电视节目中进行显示。

以实战经验介绍行业知识 670

1、MFC应用程序框架

MFC基本框架与实现流程

qingttqing的博客 1748

从零开始玩转边缘 AI:Jetson Nano 深度学习环境搭建与 YOLOv5 部署指南

Jetson Nano是NVIDIA推出的嵌入式AI开发板,凭借其强大的GPU计算能力和完善的软件生态系统,成为边缘AI部署的理想平台。本教程源于作者团队参加2024中国机器人大赛暨RoboCup机器人世界杯中国赛机器人先进视觉3D识别赛道的实战经验,是一份经过验证的环境部署指南。

LXY_LOVE36的博客 234

VS2010/MFC编程入门之四十(文档、视图和框架:各对象之间的关系)

VS2010/MFC编程入门之四十(文档、视图和框架:各对象之间的关系)分类标签: 编程入门  VS2010  VC++  MFC  -        前面一节中鸡啄米进行了文档、视图和框架的概述,本节主要讲解文档、视图、框架结构中各对象之间的关系。        各个对象之间的关系        文档、视图、框架结构中涉及到的对象主要有:应用程序对象、文档模板对象、文档对象、视图对象和框架

asdjy123的专栏 1383

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

MFC使用createview分割视图窗口

1.csplitterwnd 类   提供分离窗口的功能,是一个窗口包含多个方格。      类成员   CSplitterWnd类成员   构造 CSplitterWnd 构造一个CSplitterWnd对象   Create 创建一个动态的分隔器窗口并将它与一个CSplitterWnd对象连接   CreateStatic 创建一个静态的分隔器窗口并将它与一个CSplitte

gzhwdk的专栏 2577

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

Ogre学习笔记(三)OgreMFC 单文档分割窗口

本文地址:http://blog.youkuaiyun.com/simplezju/article/details/7907163    版权所有:simplezju,  转载请注明出处。       使用方法:利用CSplitterWnd 对建立好的单文档应用程序分割窗口,目的:将窗口分成左一右二,三个窗口矩形 提示:用CSplitterWnd类来切分窗口,调用成员函数Crea

simplezju的学习笔记 1023

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

MFC 单文档应用程序 CListView 以管理系统为例

CListView中内置了CListCtrl,所以对CListView的操作实际上就是对内置CListCtrl的操作。为对话框创建类 右击对话框-》添加类(CAddDlg和CModifyDlg)给edit控件添加关联变量 右击对应的文本编辑框-》添加变量。添加两个对话框分别用来添加学生信息,修改学生信息。的ID修改为ID_BTN_MODIFY。修改 ID_EDIT_MODIFY。删除 ID_EDIT_DELETE。的ID修改为ID_BTN_ADD。添加 ID_EDIT_ADD。读取 ID_OP_READ。

m0_72895175的博客 643

MFC---工程文件的组成结构(MFC应用程序框架)

在上一讲中为大家演示了如何利用应用程序向导创建单文档应用程序框架。这一节将以上一讲中生成应用程序HelloWorld的文件结构为例,讲解VS2010应用程序工程中文件的组成结构。用应用程序向导生成框架程序后,我们可以在之前设置的Location下看到以解决方案名命名的文件夹,此文件夹中包含了几个文件和一个以工程名命名的子文件夹,这个子文件夹中又包含了若干个文件和一个res文件夹,创建工程时的选项不同,工程文件夹下的文件可能也会有所不同。

Frank---7的博客 1531

MFC 创建单文档生成的相应文件

1.解决方案相关文件        解决方案相关文件包括解决方案文件夹下的.sdf文件、.sln文件、.suo文件和ipch文件夹。        .sdf文件和ipch目录一般占用空间比较大,几十兆甚至上百兆,与智能提示、错误提示、代码恢复和团队本地仓库等相关。如果你觉得不需要则可以设置不生成它们,方法是点击菜单栏Tools->Options,弹出Options对话框,选择左侧面板中Text

醉浪漫的博客 1577

VS2010-MFC(文档、视图和框架:各对象之间的关系)

转自:http://www.jizhuomi.com/software/223.html 前面一节进行了文档、视图和框架的概述,本节主要讲解文档、视图、框架结构中各对象之间的关系。 各个对象之间的关系 文档、视图、框架结构中涉及到的对象主要有:应用程序对象、文档模板对象、文档对象、视图对象和框架窗口对象等。根据上一节的概述,大家对它们...

dgc70876的博客 186

MFC的单文档视图结构(摘录)

文档        文档对象用于管理和维护数据,包括保存数据、取出数据以及修改数据等操作,在数据被修改以后,文档可以通知其对应的所有视图更新显示。    视图        视图对象将文档中的数据可视化,负责从文档对象中取出数据显示给用户,并接受用户的输入和编辑,将数据的改变反映给文档对象。视图充当了文档和用户之间媒介的角色。    框架        一个文档可能有

qqqren的博客 2425

VC2008中如何为MFC应用程序添加和删除消息响应函数

最近重温《MFC Windows应用程序设计》第二版这本书,里面的代码全部是使用VC6.0写的,我Win7下安装的是VS2008开发环境。在学习到为单文档框架的CView子类添加消息响应函数时犯难了,因为好久没用过VS2008了,之前在学校用的VC6.0和工作中Linux下C语言比较多。于是上网搜了一下,找到优快云博主kivcare这篇博客:Vc2008中如何为视图类添加消息响应

ccf19881030的专栏 1万+

MFC 多视图之间的通信

之前以为单文档多视图通信,尤其是视图中又包含对话框等等控件的时候,就非得通过文档类做中介,或者只能由视图传给属于自己的对话框控件,实际上只要两行代码就可以在工程的任意地方获取任意视图的指针! 单文档多视图之间的通信 http://topic.youkuaiyun.com/u/20091002/12/44e64420-3c37-4632-b120-674ac31dbf9e.html> http://www

aaahuanian的专栏 5362
上一篇: 使用UNICODE字符集时候TCHAR和char赋值时的不同
下一篇: UVA 120 - Stacks of Flapjacks
zcube
博客等级 码龄17年 170粉丝 120原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值