MFC创建单文档项目,非模式对话框中的列表控件不能显示数据,请问是怎么回事?

在VC6.0项目中,我在非模式对话框中加入了一个列表控件,用来显示数据,但是列表控件在成功插入行和数据之后,却没有办法显示出来,我的制作过程如下:1、建立一个单文档模式的... 在VC6.0项目中,我在非模式对话框中加入了一个列表控件,用来显示数据,但是列表控件在成功插入行和数据之后,却没有办法显示出来,我的制作过程如下:
1、建立一个单文档模式的MFC应用程序,取名EEE,在资源中插入一个DialongBar,在DialongBar中加入列表控件,将列表控件样式设为“报告”。
2、在菜单栏里添加一个菜单,起名为“打开”,设置ID为ID_OPEN_DIALOG,通过“建立类向导”在CMainFrame中添加菜单的“COMMAND”响应事件:OnOpenDialog()。
3、在CMainFrame.h里添加两个对象: CDialogBar m_nDlgBar;//非模式对话框
CListCtrl m_nList;//列表控件
4、在OnOpenDialog()中添的代码如下:
void CMainFrame::OnOpenDialog()
{
// 创建非模式对话框,并在屏幕上显示出来
if (!m_nDlgBar.Create(this,IDD_DIALOGBAR,CBRS_LEFT|CBRS_TOOLTIPS|CBRS_FLYBY,AFX_IDW_CONTROLBAR_FIRST))
{
TRACE0("Failed to create status bar\n");
}
m_nDlgBar.SetWindowText(_T(" 学生成绩单"));
m_nDlgBar.EnableDocking(FALSE);
//EnableDocking(FALSE);
FloatControlBar(&m_nDlgBar,CPoint(100,100));
// 创建列表控件,在列表控件中加入列和行,并显示数据
if (!m_nList.Create(WS_CHILD|WS_VISIBLE|TVS_HASLINES|TVS_HASBUTTONS|TVS_LINESATROOT,CRect(0,0,0,0),&m_nDlgBar,IDC_LIST1))
{
TRACE0("Failed to create status bar\n");
}
/* m_nList.SetColumns();*/
m_nList.InsertColumn(0,"学生姓名",LVCFMT_LEFT,80);
m_nList.InsertColumn(1,"语文",LVCFMT_LEFT,80);
m_nList.InsertColumn(2,"数学",LVCFMT_LEFT,80);

m_nList.InsertItem(0,"");
m_nList.SetItemText(0,0,"王平");
m_nList.SetItemText(0,1,"98");
m_nList.SetItemText(0,2,"99");

m_nList.InsertItem(1,"");
m_nList.SetItemText(1,0,"张红");
m_nList.SetItemText(1,1,"98");
m_nList.SetItemText(1,2,"99");

m_nList.InsertItem(2,"");
m_nList.SetItemText(2,0,"刘亮");
m_nList.SetItemText(2,1,"98");
m_nList.SetItemText(2,2,"99");
}

运行程序后,代码能够正确显示出对话框,但是列表控件不能显示数据,请问这是什么原因?
展开
 我来答
spacife
2012-01-14 · TA获得超过108个赞
知道小有建树答主
回答量:64
采纳率:0%
帮助的人:91.6万
展开全部
应该是你直接在对话框里加入列表控件,却又使用m_nList.Create()来创建一个新的listctrl产生的问题,就是说你创建了两个listctrl一个是你用控件工具栏拉出来的另一个是create出来的,而你把数据放在了create出来的控件里,正如楼上说的 CRect(0,0,0,0)没有显示区域当然看不到了。你在程序里看的只是你画的另一个控件而已,你没有给数据也就没有显示咯。解决方案有两种,一种是去掉资源编辑器上画的列表控件,检查一下m_nList和在对话框上的列表控件是不是绑定在一起的,是的话也去掉,给你创建的控件设定区域大小;一种是把资源编辑器上的列表控件绑定给m_nList对象,去掉create()语句。
追问
刚才调试了一下,确实是由于CRect没有设置好的原因造成的,那么如何把资源编辑器上的列表控件绑定给m_nList对象呢?
百度网友9422e23cc
2012-01-14 · 超过29用户采纳过TA的回答
知道答主
回答量:100
采纳率:0%
帮助的人:86.9万
展开全部
if (!m_nList.Create(WS_CHILD|WS_VISIBLE|TVS_HASLINES|TVS_HASBUTTONS|TVS_LINESATROOT,CRect(0,0,0,0),&m_nDlgBar,IDC_LIST1))

你创建list的时候 它的区域大小 CRect(0,0,0,0) 肯定不行啊 这不是啥都没有么 设置好大小 但是注意不要超出Dlg的范围即可
更多追问追答
追问
这个和区域大小好像没有关系,我在使用“基于对话框模式”建立的项目时,直接在主对话框里加入列表控件,还是使用这段代码就可以正确显示,所以会不会和列表控件没有激活有关系呢?
追答
是能显示list控件  但是不显示数据对么 ?
我刚刚调试成功了
按照你的方法 单步调试了一下 发现list控件的句柄为空 表示list对象是创建不成功的 这里具体原因不是很了解 主要是你这样做的逻辑可能不对 list是对话框的子窗口 而你写在了CMainFram类里面 可能存在消息传输的问题
我把它写在对话框类里就能正常运行了 你试试
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
135006819
2012-01-13
知道答主
回答量:9
采纳率:0%
帮助的人:1.4万
展开全部
学习学习,遇到过
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式