• 全部
  • VC综合技术
  • 互联网技术
  • MFC AppLauncher
  • .NET 技术
  • 界面
  • 进程
  • 算法
  • 硬件/系统
  • 数据库
  • VC++技术资源

怎样用自己的CMyListCtrl取代CListView中的列表?

shyworm 2001-10-08 05:27:31
过去好像有人问过,不过答案却不胜了了。我再问一次。

目前我做的是对话框程序,添加一个CMyListCtrl控件很容易,不过我想转变成
SDI或者MDI程序,在CListView中显示数据。请做过的朋友多指教。

我不想再做一个CMyListView啊!能重用最好。
...全文
209 点赞 收藏 18
写回复
18 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
shyworm 2001-10-11
直接派生一个CMyListView,需要做很多代码迁移工作,结果是好的,过程比较复杂。
而且我的CMyListCtrl是经过两次继承得来的,更麻烦!

谢谢大家的讨论,我给大家分了!
回复
kingzai 2001-10-10
Sorry,上面是文本编辑器的代码,不过道理是差不多的
回复
kingzai 2001-10-10
没错呀,我想就是要这样,先重新建立一个CView的派生类CMyView,再在上面覆盖一层CMyListCtrl,这和文本编辑器中CRichEditCtrl在CRichEditView中使用的原理是一样的。
我的代码如下:
int CTextEditView::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CView::OnCreate(lpCreateStruct) == -1)
return -1;

// TODO: Add your specialized creation code here

// m_pTextEditCtrl = new CTextEditCtrl();

CTextEditCtrl& ctrEdit=((CTextEditDoc*)GetDocument())->m_TextEditCtrl;
ctrEdit.Create(WS_CHILD|WS_VISIBLE|ES_MULTILINE|ES_AUTOHSCROLL
| ES_AUTOVSCROLL |ES_WANTRETURN |WS_VSCROLL | WS_HSCROLL ,CRect(10,10,100,200), this, 1110);
// m_pTextEditCtrl->ShowWindow(SW_SHOWMAXIMIZED );
// m_pTextEditCtrl->SubclassDlgItem(IDC_RICHEDIT1, this);
//得到内部扩展命令//
CMainFrame*pMainFrm=(CMainFrame*) AfxGetMainWnd();
CCommDoc*pDoc=(CCommDoc*)pMainFrm->m_pwndCommTreeView->GetDocument();
ctrEdit.Initialize();//初始化
ctrEdit.SetCaseSensitive(TRUE);//设置是否需要区分大小写
ctrEdit.SetStringQuotes(_T("\'"));//设置引用
ctrEdit.SetSLComment(_T('/'));//设置注释符号
ctrEdit.AddKeywords(szKeywords);//加入关键字
ctrEdit.AddCommands((LPCTSTR)szbuf);//szCommand);//加入内部和扩展命令
ctrEdit.LimitText();
return 0;
}
然后再重新绘制一遍
void CTextEditView::FlushFlag(CDC &dc)
{
CRect rt;
CRect rcEdit;
CBrush br(COLOR_BLANK);
CTextEditDoc* pDoc=(CTextEditDoc*)GetDocument();
CTextEditCtrl& ctrEdit=((CTextEditDoc*)GetDocument())->m_TextEditCtrl;

ctrEdit.GetRect(rcEdit);
GetClientRect(rt);
rt.right=LEFT_BLANK;
dc.FillRect(&rt,&br);
}
回复
shyworm 2001-10-10
up
回复
kingzai 2001-10-10
楼上的方法我也想过,但是比较难实现
回复
xj_h 2001-10-10
不如直接派生一个CMyListView呢,和ListCtrl类似的代码,简单,当然需要同时修改两个地方
回复
shyworm 2001-10-09
up
回复
shyworm 2001-10-09
我已经明白了,xj_h说的对,这样是不能实现的。

在www.codeguru.com对这个问题有清楚的讨论,最好的办法是从CView继承一个CMyView,
然后把CMyListCtrl,加进去。只是具体程序我还有点头疼!

请各位继续讨论,我会加分谢谢大家!
回复
shyworm 2001-10-09
xj_j请说详细点好吗?
回复
kingzai 2001-10-09
TO xj_h.高见,佩服.
回复
dou_ya 2001-10-09
我也遇到这样的问题!
我有现成的ListCtrl 可以实现点击标题排序等特性,但是CListView 没有该特性,实现起来也比较复杂,能不能在程序中简单的将CListView中的ListCtrl替换为我自己的ListCtrl,尽量少的代码和程序变动,而实现功能的扩充????
回复
xj_h 2001-10-09
这样写没用的CMyListCtrl重载的函数不能调用,我认为你的想法不太可能实现
上面写的是派生类顺序,CListCtrl封装了Windows SysListView32控件,CListView的GetListCtrl()函数实际上是强制转换this指针,到ListCtrl,全部函数都是通过向window handle发消息实现的,所以可以强制转换

sigh
发现我说不清楚,你去查MSDN和看源代码吧
回复
kingzai 2001-10-09
上面的错误可能没有包括头文件MyListCtrl.h,应该是没有问题的
回复
xj_h 2001-10-08
好像不太可能吧
CWnd -> CView -> CCtrlView -> CListView
CWnd -> CListCtrl
回复
shyworm 2001-10-08
出现如下错误信息:
error C2440: 'initializing' : cannot convert from 'class CListCtrl' to 'class CMyListCtrl &'
A reference that is not to 'const' cannot be bound to a non-lvalue
回复
shyworm 2001-10-08
谢谢kingzai!
不用CMyListView,直接在CListView中用可以吗?
回复
kingzai 2001-10-08
照用!
int CXListView::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CListView::OnCreate(lpCreateStruct) == -1)
return -1;

// TODO: Add your specialized creation code here
LONG lStyle;
CMyListCtrl &list=GetListCtrl();


lStyle=GetWindowLong(list.GetSafeHwnd(), GWL_STYLE);
lStyle&=~(LVS_TYPEMASK);
lStyle|=LVS_REPORT ;

SetWindowLong(list.GetSafeHwnd(), GWL_STYLE, lStyle);
list.SetExtendedStyle(LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES);
list.InsertColumn(0,"全局变量名",LVCFMT_LEFT,200);
list.InsertColumn(1,"全局变量值",LVCFMT_LEFT,300);
list.InsertColumn(2,"全局变量ID",LVCFMT_LEFT,200);

return 0;
}
回复
kingzai 2001-10-08
没问题,照用.
在CMyListView的OnCreate(LPCREATESTRUCT lpCreateStruct)

CMyListCtrl &list=GetListCtrl();
lStyle=GetWindowLong(list.GetSafeHwnd(), GWL_STYLE);
lStyle&=~(LVS_TYPEMASK);
lStyle|=LVS_REPORT ;
SetWindowLong(list.GetSafeHwnd(), GWL_STYLE, lStyle);
list.SetExtendedStyle(LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES);
list.InsertColumn(0,"全局变量名",LVCFMT_LEFT,200);
list.InsertColumn(1,"全局变量值",LVCFMT_LEFT,300);
list.InsertColumn(2,"全局变量ID",LVCFMT_LEFT,200);

回复
相关推荐
VC/MFC Q&A 200409
问】如何判定剪贴板有没有文本数据?  答】 COleDataObject dataObject; dataObject.AttachClipboard(); if(dataObject.IsDataAvailable(CF_TEXT)) { .....//有文本数据 } 问】如何得到ComboBox的Edit...
VC/MFC Q&A 200409铪
问】如何判定剪贴板有没有文本数据? 答】COleDataObject dataObject;dataObject.AttachClipboard();if(dataObject.IsDataAvailable(CF_TEXT)){ .....//有文本数据}问】如何得到ComboBox的Edit句柄?答】CE
关于MFC的各种技巧回答
问】如何判定剪贴板有没有文本数据? 答】 COleDataObject dataObject; dataObject.AttachClipboard(); if(dataObject.IsDataAvailable(CF_TEXT)) { .....//有文本数据 } 问】如何得到ComboBox的Edit句柄...
转=vc常见问题收集整理1。。
laiyiling(【陌生人 V2.0】) 收集整理 问】如何判定剪贴板有没有文本数据? 答】 COleDataObject dataObject; dataObject.AttachClipboard(); if(dataObject.IsDataAvailable(CF_TEXT)) { .......
VC/MFC 问答 200409
问】如何判定剪贴板有没有文本数据? 答】COleDataObject dataObject;dataObject.AttachClipboard();if(dataObject.IsDataAvailable(CF_TEXT)){ .....//有文本数据}问】如何得到ComboBox的Edit句柄?答】
信息安全等级保护管理办法(公通字[2007]43号)
信息安全等级保护管理办法(公通字[2007]43号)
PPT模板下载
PPT模板下载我只是想要点积分啊 
vue-devtools chrome 插件
chrome(谷歌浏览器)vue代码调试插件, 已打包。解压后,通过chrome扩展程序加载即可使用。 使用方法: 1、chrome浏览器输入地址“chrome://extensions/”进入扩展程序页面 2、勾选开发者模式 3、点击“加载已解压的扩展程序...”按钮,选择解压后的chrome文件夹,即可添加成功。 4、添加完vue-devtools扩展程序之后,我们在调试vue应用的时候,ch rome开发者工具中会看一个vue的一栏,点击之后就可以看见当前页面vue对象的一些信息
《UML面向对象需求分析与建模教程》 邹盛荣 主编 电子版 2016.01 .doc
PPT已在CSDN均可免费下载 《UML面向对象需求分析与建模教程》 邹盛荣 主编 电子版 2016.01 .doc 当当网上可购买纸质书: http://product.dangdang.com/23766413.html
STM32F407 / F103 PCF8575模块 控制16个I/O口 IIC通信
本例程为STM32F407控制PCF8575模块的16个I/O口输出,本例程基于正点原子STM32F407 IIC例程修改,本例程中使用PCF8575控制16个继电器。
比较两张图片差异
比较两张图片差异,代码收集于网上,码收集于网上
c#图片文字-字母-数字自动识别-深入代码-非常好
c#图片文字-字母-数字自动识别-深入代码-非常好
rtl8188eu_USB_linux.tar.gz
TP-LINK TL-WN725N V2 Linux 驱动安装
vs2013配置Qt5.7制作简单的音乐播放器
在VS2013配置Qt5.7制作的简单的音乐播放器,具有以下功能: 1.播放歌曲 2.添加歌曲 3.控制音量 4.换肤 5.本地搜索歌曲
24个带后台的小程序源码
24个带有后台的小程序源码下载,供大家交流学习(后台语言多种)
CListControl设置颜色
CListControl类派生,设置单元格颜色,丰富功能
SSIM 指标说明 文章
介绍 SSIM 图像评价指标和由来,比较一般的图像质量评价标准,比较ssim 和尖峰信噪比的差异,等等,是英文资料
Linux系统管理员/网络管理员(PDF版)
两本非常好的Linux系统学习的书 系统管理主要介绍Linux系统的结构、管理、命令等 网络管理主要从网络协议角度出发阐述Linux的网络功能
STM32F103中文数据手册
这个里面包含了STM32F103的各种型号的数据手册,方面理解
QRegExp的详细解析
引言 正则表达式(regular expression)就是用一个“字符串”来描述一个特征,然后去验证另一个“字符串”是否符合这个特征。比如 表达式“ab+” 描述的特征是“一个 'a' 和 任意个 'b' ”,那么 'ab', 'abb', 'abbbbbbbbbb' 都符合这个特征。 正则表达式可以用来:(1)验证字符串是否符合指定特征,比如验证是否是合法的邮件地址。(2)用来查找字符串,从一个长的文本中查找符合指定特征的字符串,比查找固定字符串更加灵活方便。(3)用来替换,比普通的替换更强大。
WPF中用于嵌入其他进程窗口的自定义控件(AppContainer)
WPF中用于嵌入其他进程窗口的自定义控件(AppContainer) 具体见博文:http://blog.csdn.net/zzzwwwppp11199988899/article/details/78131292
MSP430_RTC模块学习总结
这是自己在学习MSP430时,对RTC模块的总结,希望可以帮助刚入门者
CIET-2019-0504 数据中心运维管理人才标准.pdf
数据中心运维管理,人才标准,欢迎查看共同学习。
《高效能人士的七个习惯》(英文版).pdf
《高效能人士的七个习惯》(英文版).pdf很不错的一本书~~~~~~~~~~~
精通C语言指针
指针被誉为C语言的精髓、C本质上是加了一层语法糖的汇编,引进当时先进的函数,保留了汇编强大的地址直接访问功能 —— 指针,使其高效灵活。本课程是黄强老师对于指针的一次专题讲解,相信能给大家带来收获! a:0:{}
朴素贝叶斯算法做文本分类-代码
https://blog.csdn.net/zzZ_CMing/article/details/89478436 朴素贝叶斯算法做文本分类,用的是谭松波酒店语料。
FANUC的3210密码破解软件
FANUC 3210 密码破解软件,读取SRAM备份文件,不需要注册,完全免费。
OpenGL ES2.0基础
初级学习OpenGL ES2.0的课程,从无到有,从进本的函数讲起,每一课时都附带一个例子程序。深入浅出的讲解可编程管线技术,令人费解的文理,以及混合技术,各种优化技术:顶点缓冲区,索引缓冲区,帧缓冲区,介绍精灵的使用,并使用shader制作粒子特效。 掌握OpenGL ES2.0可编程管线,以及OpenGLES2.0的特性,带领初学者入门。
winform常用控件
主要包含内容: 第一讲 课程简介 第二讲 Windows窗体-创建和介绍 第三讲 Windows窗体-属性 第四讲 Windows窗体-方法和事件 第五讲 Windows窗体-MDI窗体和子窗体 第六讲 控件的相关操作 第七讲 Label控件显示世界你好 第八讲Button控件 第九讲TextBox控件 第十讲RichTextBox控件 第十一讲ComboBox控件 等 学会winform常用控件基本使用
自己动手从0到1写嵌入式操作系统
这不是rtos源码分析的课程,而是为初级的同学设计,从基础原理讲师,一步步不断迭代设计rtos的课程! 用不到【2000行代码,汇编代码仅18行】(不含注释)实现一个精巧的可以运行在ARM Cortex-M内核芯片上的RTOS! 该RTOS功能与ucos类似,具体实现不同。学习之后,再去学习ucos之类的系统将没有什么问题。 1、系统地掌握RTOS的工作原理及其应用; 2、用更短的时间、更少的精力,学习RTOS相关知识; 3、设计出一个具备自己特色的RTOS。将其用作毕业设计、找工作的敲门砖; 4、提升技术水平,为升职加薪跳槽提供资本。
发帖
VC/MFC
创建于2007-09-28

1.5w+

社区成员

VC/MFC相关问题讨论
申请成为版主
帖子事件
创建了帖子
2001-10-08 05:27
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……