基於單文檔的記事本開發 .

來源:互聯網
上載者:User

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,再運行,一個象模象樣的編輯器產生了。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.