1. 程式人生 > >C++ MFC / VS2013 edit control 編輯框 逐行顯示 txt ,顯示多行,底部更新

C++ MFC / VS2013 edit control 編輯框 逐行顯示 txt ,顯示多行,底部更新

txt逐行讀取並顯示 一. 多行txt, 編輯框顯示成一行
void CFaceTemptureDlg::OnButtonClick_SO2()
{
	// TODO:  在此新增控制元件通知處理程式程式碼
	CString strLine, strTemp, result;
	int row = 0;
	CString filename = L"111.txt";
	CStdioFile file(L"111.txt", CFile::modeRead);

	while (file.ReadString(strLine))
	{
		//char *str = strLine.GetBufferSetLength(strLine.GetLength());
		char *str = (char *)strLine.GetBufferSetLength(strLine.GetLength());
		char *p;
		if (strLine != "")
		{
			result += strLine;
			GetDlgItem(IDC_Edit_SO2)->SetWindowText(result);
			row++;
			
		}
	}
	file.Close();   
   若檔案內容為:         2017/9/2  13:25  45         2017/9/3  14:65  59    讀取結果為:    編輯框顯示一行:2017/9/2  13:25  452017/9/3  14:65  59                               缺陷 讀中文則出現亂碼 能解決此問題的,請留言,非常感謝! 二.多行txt,編輯框顯示多行(原樣顯示)
void CFaceTemptureDlg::OnButtonClick_SO2()
{
	CString strLine, strTemp, result;
	int row = 0;
	CString filename = L"111.txt";
	CStdioFile file(L"111.txt", CFile::modeRead);

	while (file.ReadString(strLine))
	{
		//char *str = strLine.GetBufferSetLength(strLine.GetLength());
		char *str = (char *)strLine.GetBufferSetLength(strLine.GetLength());
		//char *p;
		if (strLine != "")
		{
			result += _T("\r\n") + strLine;
			//result += strLine;
			GetDlgItem(IDC_Edit_SO2)->SetWindowText(result);
			GetDlgItem(IDC_Edit_SO2)->UpdateWindow();
			//result = " ";
			row++;
		}
	}
	file.Close();
}

若txt內容為: 2017/9/2 13:25 45
2017/9/3 14:65 59
2017/9/10 52:69 45 96
2016/9/5 56:3 33
2016/6/5 5:3 06
2019/9/6/10 12:20 11
2019/3/5 10:11 12
2013/45/52 22:2 55
2012/2/1 22:56 23
2012/2/12 12:89 55
2015/1/2 2:23 12
2015/1/2 3:10 70
2015/1/2 4:15 12
2015/1/2 5:16 13
2015/1/3 6:2 15

顯示結果:             
關鍵: 將 
			result += strLine;
改成:
			result += _T("\r\n") + strLine;

三. 編輯框在底部顯示最新內容 前提:新增編輯框的控制元件變數,本例是,CEdit類: m_Edit_SO2   (由於已經新增過了,所以顯示不成黑色)            
法一:
void CFaceTemptureDlg::OnButtonClick_SO2()
{
	// TODO: Add your command handler code here 

	/////////完美,滾動到底部
	CString strLine, strTemp, result;
	int row = 0;
	CString filename = L"111.txt";
	CStdioFile file(L"111.txt", CFile::modeRead);

	while (file.ReadString(strLine))
	{
	char *str = (char *)strLine.GetBufferSetLength(strLine.GetLength());
	if (strLine != "")
	{
	    result += _T("\r\n") + strLine;
	    GetDlgItem(IDC_Edit_SO2)->SetWindowText(result);
	    GetDlgItem(IDC_Edit_SO2)->UpdateWindow();
		m_Edit_SO2.LineScroll(m_Edit_SO2.GetLineCount(), 0);
	    row++;

	}
	}
	file.Close();  
	/////////
}
總結: 1. 區別: 第二部分顯示內容,看到最上面的內容,txt底部的內容在下面但是看不到; 而這次則,上面的內容看不到,底部的內容能看到。(可對比兩張結果圖) 2. 和之前程式碼比添加了:
		m_Edit_SO2.LineScroll(m_Edit_SO2.GetLineCount(), 0);
顯示結果如下:
                        
 法二:  
void CFaceTemptureDlg::OnButtonClick_SO2()
{
	// TODO: Add your command handler code here 

	/////////完美,滾動到底部
	CString strLine, strTemp, result;
	int row = 0;
	CString filename = L"111.txt";
	CStdioFile file(L"111.txt", CFile::modeRead);

	while (file.ReadString(strLine))
	{
	char *str = (char *)strLine.GetBufferSetLength(strLine.GetLength());
	if (strLine != "")
	{
	    result += _T("\r\n") + strLine;
	    GetDlgItem(IDC_Edit_SO2)->SetWindowText(result);
	    GetDlgItem(IDC_Edit_SO2)->UpdateWindow();
		//m_Edit_SO2.LineScroll(m_Edit_SO2.GetLineCount(), 0);
		m_Edit_SO2.SendMessage(WM_VSCROLL, SB_BOTTOM, 0);
	    row++;

	}
	}
	file.Close();  
	/////////
}
添加了:
m_Edit_SO2.SendMessage(WM_VSCROLL, SB_BOTTOM, 0);
結果同上 總結:
		m_Edit_SO2.LineScroll(m_Edit_SO2.GetLineCount(), 0);
		m_Edit_SO2.SendMessage(WM_VSCROLL, SB_BOTTOM, 0);
這兩行程式碼等價(可選擇任意一個)
四:新增滾動條
設定Edit Control控制元件的一些屬性
①設定Edit Control 屬性Multiline為true,表示該控制元件支援多行
②設定Want Return 屬性設定為true,表示該控制元件支援換行輸入
③設定Vertical Scrollbar 屬性為true,表示該控制元件具有垂直滾動條
                                                                          
五. VC(MFC) edit控制元件滾動條自動到達底部的幾種實現