MFC添加list control控件并用表格对txt数据显示、格式化、超链接

(一)    list control控件的建立

(1)新建【MFC】,从【工具箱】中将【list control】控件拖选到DiaLog下;

(2)然后点击【list control】控件,【右击】,【属性】,将【view】设置为【Report】,效果如下:

                     MFC添加list control控件并用表格对txt数据显示、格式化、超链接_第1张图片

(3)【右击】,【类向导】,【成员变量】,【添加变量】,【m_list】,如图:

MFC添加list control控件并用表格对txt数据显示、格式化、超链接_第2张图片

(二)表格显示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);//打开数据中显示的链接
    }

 

 

 

你可能感兴趣的:(C++)