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");
}
运行程序后,代码能够正确显示出对话框,但是列表控件不能显示数据,请问这是什么原因? 展开
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");
}
运行程序后,代码能够正确显示出对话框,但是列表控件不能显示数据,请问这是什么原因? 展开
3个回答
展开全部
应该是你直接在对话框里加入列表控件,却又使用m_nList.Create()来创建一个新的listctrl产生的问题,就是说你创建了两个listctrl一个是你用控件工具栏拉出来的另一个是create出来的,而你把数据放在了create出来的控件里,正如楼上说的 CRect(0,0,0,0)没有显示区域当然看不到了。你在程序里看的只是你画的另一个控件而已,你没有给数据也就没有显示咯。解决方案有两种,一种是去掉资源编辑器上画的列表控件,检查一下m_nList和在对话框上的列表控件是不是绑定在一起的,是的话也去掉,给你创建的控件设定区域大小;一种是把资源编辑器上的列表控件绑定给m_nList对象,去掉create()语句。
追问
刚才调试了一下,确实是由于CRect没有设置好的原因造成的,那么如何把资源编辑器上的列表控件绑定给m_nList对象呢?
展开全部
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的时候 它的区域大小 CRect(0,0,0,0) 肯定不行啊 这不是啥都没有么 设置好大小 但是注意不要超出Dlg的范围即可
更多追问追答
追问
这个和区域大小好像没有关系,我在使用“基于对话框模式”建立的项目时,直接在主对话框里加入列表控件,还是使用这段代码就可以正确显示,所以会不会和列表控件没有激活有关系呢?
追答
是能显示list控件 但是不显示数据对么 ?
我刚刚调试成功了
按照你的方法 单步调试了一下 发现list控件的句柄为空 表示list对象是创建不成功的 这里具体原因不是很了解 主要是你这样做的逻辑可能不对 list是对话框的子窗口 而你写在了CMainFram类里面 可能存在消息传输的问题
我把它写在对话框类里就能正常运行了 你试试
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询