基於對話框的C++源代碼編輯器製作過程(七)——添加保存功能
在“CppEditorDlg.h”中添加下面的代碼
void GetRange(int start, int end, char* text);void SaveFile(CArchive& ar);
在“CppEditorDlg.cpp”中添加下面的代碼
這是GetRange函數
void CCppEditorDlg::GetRange(int start, int end, char * text){TEXTRANGE tr;tr.chrg.cpMin = start;tr.chrg.cpMax = end;tr.lpstrText = (text);m_pScintillaWnd->SendMessage(EM_GETTEXTRANGE, 0, reinterpret_cast<LPARAM>(&tr));}
這是SaveFile函數
const int blockSize = 128 * 1024;void CCppEditorDlg::SaveFile(CArchive & ar){ASSERT_VALID(this);int nDocLength = m_pScintillaWnd->SendMessage(SCI_GETLENGTH);char data[blockSize + 1];int lengthDoc = m_pScintillaWnd->SendMessage(SCI_GETLENGTH);for (int i = 0; i < lengthDoc; i += blockSize) {int grabSize = lengthDoc - i;if (grabSize > blockSize)grabSize = blockSize;GetRange(i, i + grabSize, data);ar.Write(data, grabSize);}ar.Flush();m_pScintillaWnd->SendMessage(SCI_SETSAVEPOINT);}
如果報了下圖的錯誤,選擇“項目”——》“屬性”,彈出屬性窗口,將“字符集”改爲“使用多字節字符集”
爲“CCppEditorDlg”添加“OnSaveFile”函數,打開“類嚮導”,在“命令”裏找到ID爲“ID_SAVEFILE”的命令,添加處理程序。
在OnSaveFile函數中添加下面的代碼
void CCppEditorDlg::OnSavefile(){// TODO: 在此添加命令處理程序代碼CFileDialog fDlg(FALSE);if (IDOK == fDlg.DoModal()){CFile File(fDlg.GetPathName(), CFile::modeCreate | CFile::modeWrite);CArchive ar(&File, CArchive::store);SaveFile(ar);ar.Close();File.Close();}}
這樣保存功能就實現了。
(未完待續)