(一) list control控件的建立
(1)新建【MFC】,从【工具箱】中将【list control】控件拖选到DiaLog下;
(2)然后点击【list control】控件,【右击】,【属性】,将【view】设置为【Report】,效果如下:
(3)【右击】,【类向导】,【成员变量】,【添加变量】,【m_list】,如图:
(二)表格显示txt数据
将下面的代码都附加到OnInitDialog()函数下:
(1)添加列表信息
此处添加list control列表的列名,非txt中的数据
m_list.InsertColumn(0,"编号",LVCFMT_CENTER,80);
m_list.InsertColumn(1,"数据1",LVCFMT_CENTER,250);
m_list.InsertColumn(2,"数据2",LVCFMT_CENTER,110);
m_list.InsertColumn(3,"数据3",LVCFMT_CENTER,110);
m_list.InsertColumn(4,"数据4",LVCFMT_CENTER,600);
(2)读取并显示数据
CString szLine = "";//保存每行数据信息
CStdioFile file;//存储打开的文件数据
file.Open("ceshi.txt",CFile::modeRead);//以只读方式打开文件
int i = 0;//读取行数计数器
while( file.ReadString(szLine) )//逐行读取字符串
{
string str = szLine.GetBuffer();
vector v = split(str, "\t"); //分隔符,此处以'\t'作为分隔符,由于MFC中没有封装好的字符串分割函数 split,在下文补充
char cshar[100];
sprintf_s(cshar,"%d",i+1);
m_list.InsertItem(i,"");
m_list.SetItemText(i,0,cshar);
m_list.SetItemText(i,1,v[0].c_str());
m_list.SetItemText(i,2,v[1].c_str());
m_list.SetItemText(i,3,v[2].c_str());
m_list.SetItemText(i,4,v[3].c_str());
i ++;
}
file.Close();//关闭文件
vector split(const string &s, const string &seperator){
vector result;
typedef string::size_type string_size;
string_size i = 0;
while(i != s.size()){
int flag = 0;
while(i != s.size() && flag == 0)
{
flag = 1;
for(string_size x = 0; x < seperator.size(); ++x)
if(s[i] == seperator[x])
{
++i;
flag = 0;
break;
}
}
flag = 0;
string_size j = i;
while(j != s.size() && flag == 0)
{
for(string_size x = 0; x < seperator.size(); ++x)
if(s[j] == seperator[x])
{
flag = 1;
break;
}
if(flag == 0)
++j;
}
if(i != j){
result.push_back(s.substr(i, j-i));
i = j;
}
}
return result;
}
(三)数据格式化
将整个list control控件中的字体整个放大成原来的2倍。
LOGFONT logfont;
CFont *pfont = m_list.GetFont();
pfont->GetLogFont( &logfont );
logfont.lfHeight =logfont.lfHeight * 2; //这里可以修改字体的高比例
logfont.lfWidth = logfont.lfWidth * 2; //这里可以修改字体的宽比例
static CFont font;
font1.CreateFontIndirect(&logfont);
m_list.SetFont(&font);
font.Detach();
(四)超链接(点击信息,打开数据所在位置)
首先,选择【list control】,然后【右击】,【类向导】,【命令】,【对象ID】选择你设置的【List control的ID】,【消息】选择【NM_CLICK】,选择【添加处理程序】,【确定】
在生成的点击事件函数下,添加如下代码:
DWORD dwPos = GetMessagePos();
CPoint point( LOWORD(dwPos), HIWORD(dwPos) );
m_list.ScreenToClient(&point);
LVHITTESTINFO lvinfo;
lvinfo.pt = point;
lvinfo.flags = LVHT_ABOVE;
int nItem = m_list.SubItemHitTest(&lvinfo);
if(nItem != -1)
{
CString strtemp;
CString strText = m_list.GetItemText(lvinfo.iItem,lvinfo.iSubItem);//用以获取列表中的数据;行 lvinfo.iItem;列 lvinfo.iSubItem;
ShellExecute(NULL, _T("open"), strText, NULL, NULL, SW_SHOW);//打开数据中显示的链接
}