MFC单文档应用CListView视图类问题
大家好,我是MFC初学者,目前想设计一个这样的程序:通过菜单栏选项弹出一个对话框,在对话框内输入一个学生的姓名学号以及成绩等信息,确认后在主窗口使用列表方式显示。程序的大...
大家好,我是MFC初学者,目前想设计一个这样的程序:通过菜单栏选项弹出一个对话框,在对话框内输入一个学生的姓名学号以及成绩等信息,确认后在主窗口使用列表方式显示。
程序的大致框架是这样的,使用CListView类作为视图的基类,在视图的OnInitialUpdate函数中完成了列表项的初始化工作,并插入了一些列表项。用以输入数据的对话框也创建好了。
目前遇到的问题是,在对话框的确认按钮消息映射中,怎么样如何才能够在主窗口中插入一个列表项?是通过获取视图类的指针?然后使用InsertItem();函数么?视图类是否有实例化的指针?
以下是初始化列表视图的程序段:
void CMyCFile2View::OnInitialUpdate()
{
CListView::OnInitialUpdate();
m_ImageList.Create(32,32,ILC_COLOR8|ILC_MASK,1,1);
m_ImageListSmall.Create(16,16,ILC_COLOR8|ILC_MASK,1,1);
CListCtrl& m_ListCtrl = GetListCtrl();
m_ListCtrl.SetImageList(&m_ImageList,LVSIL_NORMAL);
m_ListCtrl.SetImageList(&m_ImageListSmall,LVSIL_SMALL);
LV_COLUMN listCol;
char* const arCols[6] = {"序号","姓名","学号","成绩1","成绩2","成绩3"};
listCol.mask = LVCF_FMT|LVCF_WIDTH|LVCF_TEXT|LVCF_SUBITEM;
// 添加表头
for(int nCol=0;nCol<6;nCol++)
{
listCol.iSubItem = nCol;
listCol.pszText = arCols[nCol];
listCol.fmt = LVCFMT_LEFT;
m_ListCtrl.InsertColumn(nCol,&listCol);
}
// 以下添加列表内容
int nIndex,nItem;
CString strDisplay;
for(nItem=0;nItem<10;nItem++)
{
strDisplay.Format("%d",nItem);
nIndex = m_ListCtrl.InsertItem(nItem,strDisplay);
m_ListCtrl.SetItemText(nIndex,1,"张三");
m_ListCtrl.SetItemText(nIndex,2,"D301");
m_ListCtrl.SetItemText(nIndex,3,"0");
m_ListCtrl.SetItemText(nIndex,4,"D3115");
m_ListCtrl.SetItemText(nIndex,5,"0");
}
//nItem++;
// 以上添加列表内容
SetCtrlStyle(m_ListCtrl.GetSafeHwnd(),LVS_REPORT); // 设置为报表方式
m_ListCtrl.SetExtendedStyle(LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES);
m_ListCtrl.SetColumnWidth(0,LVSCW_AUTOSIZE);
m_ListCtrl.SetColumnWidth(1,200);
m_ListCtrl.SetColumnWidth(2,100);
m_ListCtrl.SetColumnWidth(3,100);
m_ListCtrl.SetColumnWidth(4,100);
m_ListCtrl.SetColumnWidth(5,100);
// TODO: 调用 GetListCtrl() 直接访问 ListView 的列表控件,
// 从而可以用项填充 ListView。
} 展开
程序的大致框架是这样的,使用CListView类作为视图的基类,在视图的OnInitialUpdate函数中完成了列表项的初始化工作,并插入了一些列表项。用以输入数据的对话框也创建好了。
目前遇到的问题是,在对话框的确认按钮消息映射中,怎么样如何才能够在主窗口中插入一个列表项?是通过获取视图类的指针?然后使用InsertItem();函数么?视图类是否有实例化的指针?
以下是初始化列表视图的程序段:
void CMyCFile2View::OnInitialUpdate()
{
CListView::OnInitialUpdate();
m_ImageList.Create(32,32,ILC_COLOR8|ILC_MASK,1,1);
m_ImageListSmall.Create(16,16,ILC_COLOR8|ILC_MASK,1,1);
CListCtrl& m_ListCtrl = GetListCtrl();
m_ListCtrl.SetImageList(&m_ImageList,LVSIL_NORMAL);
m_ListCtrl.SetImageList(&m_ImageListSmall,LVSIL_SMALL);
LV_COLUMN listCol;
char* const arCols[6] = {"序号","姓名","学号","成绩1","成绩2","成绩3"};
listCol.mask = LVCF_FMT|LVCF_WIDTH|LVCF_TEXT|LVCF_SUBITEM;
// 添加表头
for(int nCol=0;nCol<6;nCol++)
{
listCol.iSubItem = nCol;
listCol.pszText = arCols[nCol];
listCol.fmt = LVCFMT_LEFT;
m_ListCtrl.InsertColumn(nCol,&listCol);
}
// 以下添加列表内容
int nIndex,nItem;
CString strDisplay;
for(nItem=0;nItem<10;nItem++)
{
strDisplay.Format("%d",nItem);
nIndex = m_ListCtrl.InsertItem(nItem,strDisplay);
m_ListCtrl.SetItemText(nIndex,1,"张三");
m_ListCtrl.SetItemText(nIndex,2,"D301");
m_ListCtrl.SetItemText(nIndex,3,"0");
m_ListCtrl.SetItemText(nIndex,4,"D3115");
m_ListCtrl.SetItemText(nIndex,5,"0");
}
//nItem++;
// 以上添加列表内容
SetCtrlStyle(m_ListCtrl.GetSafeHwnd(),LVS_REPORT); // 设置为报表方式
m_ListCtrl.SetExtendedStyle(LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES);
m_ListCtrl.SetColumnWidth(0,LVSCW_AUTOSIZE);
m_ListCtrl.SetColumnWidth(1,200);
m_ListCtrl.SetColumnWidth(2,100);
m_ListCtrl.SetColumnWidth(3,100);
m_ListCtrl.SetColumnWidth(4,100);
m_ListCtrl.SetColumnWidth(5,100);
// TODO: 调用 GetListCtrl() 直接访问 ListView 的列表控件,
// 从而可以用项填充 ListView。
} 展开
1个回答
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询