C++ MFC / VS2013 edit control 編輯框 逐行顯示 txt ,顯示多行,底部更新
阿新 • • 發佈:2019-01-04
txt逐行讀取並顯示
一. 多行txt, 編輯框顯示成一行
若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
顯示結果:
關鍵: 將
三. 編輯框在底部顯示最新內容 前提:新增編輯框的控制元件變數,本例是,CEdit類: m_Edit_SO2 (由於已經新增過了,所以顯示不成黑色)
法一:
法二:
四:新增滾動條 設定Edit Control控制元件的一些屬性
①設定Edit Control 屬性Multiline為true,表示該控制元件支援多行
②設定Want Return 屬性設定為true,表示該控制元件支援換行輸入
③設定Vertical Scrollbar 屬性為true,表示該控制元件具有垂直滾動條
五. VC(MFC) edit控制元件滾動條自動到達底部的幾種實現
若檔案內容為: 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() { // 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();
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控制元件滾動條自動到達底部的幾種實現