| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1503 人关注过本帖
标题:请教一下,关于CListCtrl
取消只看楼主 加入收藏
umbrellandy
Rank: 1
等 级:新手上路
帖 子:133
专家分:0
注 册:2006-7-21
收藏
 问题点数:0 回复次数:9 
请教一下,关于CListCtrl

程序中需要CListCtrl控件,但是对于它非常陌生,手头也没有详细的资料,网上有很多关于它的应用的例子,但是还是弄不清一些函数,自己试着编了些代码,可是总提示有错.下面是我编的代码,编译链接都能过,就是执行的时候出错:
1,控件在对话框中,初始化函数
BOOL CExmDlg::OnInitDialog()
{
CDialog::OnInitDialog();

m_ExmList.InsertColumn(0,"序号",LVCFMT_LEFT,80);
m_ExmList.InsertColumn(1,"操作内",LVCFMT_LEFT,80);

m_ExmList.InsertItem(0,"主数据");/////加上这行执行时就出错
m_ExmList.SetItemText(0,1,"子数据");///加上就出错


return 1;

}
2,对话框调用
void CCListExm1View::OnDraw(CDC* pDC)
{
CCListExm1Doc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
// TODO: add draw code for native data here

CExmDlg dlg;
dlg.DoModal();
}
其它地方就没什么改动了,还请高手们帮忙看看,谢谢...

搜索更多相关主题的帖子: CListCtrl ExmList LEFT 对话框 
2006-07-22 17:46
umbrellandy
Rank: 1
等 级:新手上路
帖 子:133
专家分:0
注 册:2006-7-21
收藏
得分:0 
谢谢版主

生活充满阳光,快乐无处不在
2006-07-24 20:06
umbrellandy
Rank: 1
等 级:新手上路
帖 子:133
专家分:0
注 册:2006-7-21
收藏
得分:0 
重新试了一下,还是不行,把自己添加的代码都删了然后重新写的,还是原来的毛病

生活充满阳光,快乐无处不在
2006-07-25 11:24
umbrellandy
Rank: 1
等 级:新手上路
帖 子:133
专家分:0
注 册:2006-7-21
收藏
得分:0 
以下是引用myajax95在2006-7-25 11:39:44的发言:
或者是不是把list control的属性里选了owner draw fixed了?

就是这个毛病了,改了以后就没问题了,版主好厉害
还想问一下,这类控件可以动态添加项吗?刚才试了试,如果在创建了对话框以后再添加项也执行不了,如果想动态添加项的话,是不是也要修改一些属性或者设置呢?


生活充满阳光,快乐无处不在
2006-07-25 12:00
umbrellandy
Rank: 1
等 级:新手上路
帖 子:133
专家分:0
注 册:2006-7-21
收藏
得分:0 

或许刚刚没说清楚吧,在上面的例子中,添加行和列都是在初始化函数中实现的,这样控件里的各行各列就是固定不变的了.比如说我想程序实现一个功能:提示每天的行程安排.如果按照刚才我所说的那就要针对每天的安排都设计一个对话框,然后加上不同的初始化函数,似乎有点麻烦,所以我想能不能把"添加行"从初始化函数中拿出来用专门的函数负责.当用户选择"查看周一的行程",控件里就添加周一的内容,选择周二的就添加周二的,这样就不用设计那么多对话框了.不知道这次说清楚了没有...
刚才我试了试在创建对话框后添加行,执行时有错误...


生活充满阳光,快乐无处不在
2006-07-25 13:40
umbrellandy
Rank: 1
等 级:新手上路
帖 子:133
专家分:0
注 册:2006-7-21
收藏
得分:0 

生活充满阳光,快乐无处不在
2006-07-25 14:54
umbrellandy
Rank: 1
等 级:新手上路
帖 子:133
专家分:0
注 册:2006-7-21
收藏
得分:0 

这样写错在哪呢?
BOOL CExmDlg::OnInitDialog()
{
CDialog::OnInitDialog();

m_ExmList.InsertColumn(0,"序号",LVCFMT_LEFT,80);
m_ExmList.InsertColumn(1,"事件",LVCFMT_LEFT,80);
m_ExmList.SetExtendedStyle ( LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES );
return 1;

}
void CMainFrame::OnMENUITEMDlg()
{
CExmDlg dlg;

dlg.m_ExmList.InsertItem(0,"1");
dlg.m_ExmList.SetItemText(0,1,"起床,吃早点");
dlg.m_ExmList.InsertItem(1,"2");
dlg.m_ExmList.SetItemText(1,1,"上班");

dlg.DoModal();
}


生活充满阳光,快乐无处不在
2006-07-25 15:16
umbrellandy
Rank: 1
等 级:新手上路
帖 子:133
专家分:0
注 册:2006-7-21
收藏
得分:0 
以下是引用myajax95在2006-7-25 15:32:48的发言:
第一个好像没问题,第二个声明了dlg之后不能直接insert,因为这时window还没有实体话,需要在Create之后才能insertitem。比较简单的办法是把数据留在CMainFrame里,把MainFrame的指针传给dlg。
CExmDlg dlg(this);
这样在dlg 的initdialog里就可以顺着this把“起床”,“上班”都找到了,然后insertitem。


没看明白,this指针me木用过...


生活充满阳光,快乐无处不在
2006-07-25 15:48
umbrellandy
Rank: 1
等 级:新手上路
帖 子:133
专家分:0
注 册:2006-7-21
收藏
得分:0 

我想还是找本书仔细品品吧...

[此贴子已经被作者于2006-7-28 20:04:48编辑过]


生活充满阳光,快乐无处不在
2006-07-25 16:12
umbrellandy
Rank: 1
等 级:新手上路
帖 子:133
专家分:0
注 册:2006-7-21
收藏
得分:0 
刚刚咨询到一个新方法,再dlg中封装一个专门用于添加项的函数,然后通过改变参数就可以实现了,不过原理和最初的似乎是一样的...

[此贴子已经被作者于2006-7-26 19:46:38编辑过]



生活充满阳光,快乐无处不在
2006-07-26 19:32
快速回复:请教一下,关于CListCtrl
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.032865 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved