http://blog.csdn.net/cnki_ok/article/details/7388150
】原來做過一個用對話方塊實現的文字編輯器,其實用MFC模板裡面的單文件範本也可以做,甚至更加方便,適合入門級的愛好者試試,現介紹方法如下:
1,首先建立一個工程,選擇MFCAppWizard(exe),定名字為:textview_1,程式類型選擇單個文檔,其他均預設完成。
2,在系統自動產生的CTextview_1Doc類裡面增加一個控制項,用於文字文件的暫時存放:
class CTextview_1Doc : public CDocument
{
......
public:
CStringArray m_strContent;
}
然後在CTextview_1Doc類的Serialize函數裡面增加開啟、儲存文字檔的程式:
void CTextview_1Doc::Serialize(CArchive& ar)
{
CString str;
if (ar.IsStoring())
{
// TODO: add storing code here
int nLines = (int)m_strContent.GetSize();
for ( int i=0; i<nLines; i++ )
{
str = m_strContent.GetAt( i );
ar.WriteString( str ); // 將字串集合類對象中文本儲存到硬碟
}
}
else
{
// TODO: add loading code here
while ( ar.ReadString( str ) )
{
m_strContent.Add( str ); // 將行文本添加到字串集合類對象中
}
}
}
然後滑鼠在CTextview_1Doc 上點擊右鍵,在快顯功能表裡面選擇:Add Virtual Function,在彈出的視窗中選中DeleteContents,點擊“添加和編輯”按鈕。在產生的程式中添加以下代碼:
void CTextview_1Doc::DeleteContents()
{
// TODO: Add your specialized code here and/or call the base class
m_strContent.RemoveAll(); // 清除集合類對象中的內容
CDocument::DeleteContents();
}
3,在系統自動產生的CTextview_1View類裡面增加一個編輯器的控制項指標成員,用於在介面中產生文字編輯器:
class CTextview_1View : public CView
{
......
public:
CEdit* m_ctrlEdit;
}
該指標成員在類建立時要設定初始化值為NULL,否則運行起來就會出錯,如下:
CTextview_1View::CTextview_1View()
: m_ctrlEdit(NULL) //添加這一行初始化代碼
{
// TODO: add construction code here
}
用第2點介紹的類似步驟,為CTextview_1View類重寫其OnInitialUpdate函數,新增內容如下:
void CTextview_1View::OnInitialUpdate()
{
CView::OnInitialUpdate();
// TODO: Add your specialized code here and/or call the base class
CRect rcClient;
GetClientRect( rcClient ); // 擷取當前視圖的客戶區大小
// if ( m_ctrlEdit ) delete m_ctrlEdit;
m_ctrlEdit = new CEdit();
m_ctrlEdit->Create( ES_MULTILINE | WS_CHILD |WS_VISIBLE
| WS_HSCROLL | ES_AUTOHSCROLL // 自動水平滾動
| WS_VSCROLL | ES_AUTOVSCROLL , // 自動垂直滾動
rcClient, this, 201); // 建立多行編輯控制項
CTextview_1Doc* pDoc = GetDocument(); // 擷取與視圖相關聯的文檔指標
// 以下是將文檔中的m_strContent內容全部賦給str
CString str;
int nLines = (int)pDoc->m_strContent.GetSize();
for ( int i=0; i<nLines; i++ )
{
str = str + pDoc->m_strContent.GetAt( i );
str = str + "\r\n"; // 換行
}
m_ctrlEdit->SetTabStops( 16 ); // 設定Tab符大小
m_ctrlEdit->SetWindowText( str ); // 將文檔內容傳給控制項
}
4,現在運行一下,文字編輯器就做好了。
5,當然,現在的文字編輯器很不好用,因為不能滾動視窗。而且不會隨視窗的大小變化,因此需要增加一些代碼。滑鼠停在CTextview_1View上點擊右鍵,在快顯功能表中選擇:Add WindowMessage Handle,在彈出的視窗中,選擇WM_SIZE訊息,並點擊“Add & Edit”按鈕,在產生的函數中添加以下內容:
void CTextview_1View::OnSize(UINT nType, int cx, intcy)
{
CView::OnSize(nType, cx, cy);
// TODO: Add your message handler code here
CRect rcClient;
GetClientRect( rcClient );
if ( m_ctrlEdit )
m_ctrlEdit->MoveWindow( rcClient ); // 改變編輯控制項視窗大小
}
6,再運行,一個象模象樣的編輯器產生了。