版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、<p> 面向?qū)ο蟪绦蛟O(shè)計(jì)課程設(shè)計(jì)報(bào)告</p><p> ?。?011/2012學(xué)年第二學(xué)期)</p><p> 題目名稱 簡(jiǎn)單文本編輯器的設(shè)計(jì) </p>&
2、lt;p> 系 部 </p><p> 專 業(yè) 計(jì)算機(jī)科學(xué)與技術(shù)
3、 </p><p> 班 級(jí) </p>
4、<p> 學(xué) 生 </p><p> 完成時(shí)間 2012年 6 月 </p><p> 指導(dǎo)老師 </p><p><b> 引 言
5、</b></p><p> 在文本編輯器出現(xiàn)前,人們用打孔機(jī)把計(jì)算機(jī)文字打到穿孔卡片上。文字存放于一個(gè)裝著這樣的薄卡片的盒子里,可以用讀卡器來(lái)閱讀它。</p><p> 第一個(gè)文本編輯器是一種行編輯器,它運(yùn)行在打字機(jī)型的終端上,這種編輯器并不具備在窗口和屏幕中顯示的功能。它包含了一些非常短的命令(為了減少打字量)。其中一個(gè)命令能夠把文件的指定部分通過(guò)打字機(jī)打印出來(lái)。編輯光標(biāo)
6、是想象中的一個(gè)插入點(diǎn),通過(guò)特殊命令,可以把它移動(dòng)到特定內(nèi)容字符串所在的行。隨后,內(nèi)容字符串又被擴(kuò)展成正則表達(dá)式。如果想看到文件的變化,你需要把它打印出來(lái)。相對(duì)于穿孔機(jī)來(lái)說(shuō),人們認(rèn)為這種基于行的文本編輯器具有革命性的進(jìn)步。如果沒(méi)有它,用戶就需要把那些處理文本的命令打成專用的卡片,并在編輯文件時(shí)使用這些卡片。</p><p> 當(dāng)帶有顯示屏的計(jì)算機(jī)終端出現(xiàn)后,基于顯示屏的文本編輯器開(kāi)始流行起來(lái)。最早的全屏編輯器中,
7、有一種叫做O26,它是于1967年為CDC 6000系列機(jī)器的操作控制臺(tái)而作的。另外一個(gè)早期的全屏編輯器是vi。vi誕生于20世紀(jì)70年代,至今,它仍是Unix和Linux的標(biāo)準(zhǔn)編輯器。全屏編輯器對(duì)視頻終端的銷售起到了促進(jìn)的作用。</p><p> 文本編輯器在Windows的應(yīng)用中是一個(gè)非常重要的項(xiàng)目,在過(guò)去十?dāng)?shù)年中,微軟對(duì)windows文本編輯器有多個(gè)版本的升級(jí)改進(jìn),而基于其他的編程環(huán)境的文本編輯器也是多如
8、牛毛,今天我們用MFC可視化編譯環(huán)境做一個(gè)簡(jiǎn)易的文本編輯器。</p><p><b> 目 錄</b></p><p><b> 引 言2</b></p><p> 1.課程設(shè)計(jì)目的和意義4</p><p><b> 2.詳細(xì)設(shè)計(jì)4</b></p>
9、<p><b> 2.1需求描述4</b></p><p> 2.1.1文件4</p><p> 2.1.2編輯4</p><p> 2.1.3應(yīng)用4</p><p> 2.1.4幫助5</p><p> 2.1.5高級(jí)5</p><
10、p><b> 2.2功能描述5</b></p><p> 2.2.1文本編輯區(qū)5</p><p> 2.2.2文件6</p><p> 2.2.3編輯12</p><p> 2.2.4應(yīng)用13</p><p> 2.2.5幫助16</p>&l
11、t;p> 2.2.6高級(jí)17</p><p> 2.2.7菜單欄19</p><p> 2.2.7圖標(biāo)19</p><p> 2.3程序運(yùn)行說(shuō)明19</p><p> 3.課程設(shè)計(jì)總結(jié)19</p><p> 3.1編程日志19</p><p> 3.3測(cè)試報(bào)
12、告20</p><p><b> 4.心得體會(huì)20</b></p><p><b> 5.參考文獻(xiàn)20</b></p><p> 1.課程設(shè)計(jì)目的和意義</p><p> 《面向?qū)ο蟪绦蛟O(shè)計(jì)》課程設(shè)計(jì)是實(shí)踐性教學(xué)環(huán)節(jié)之一,是《面向?qū)ο蟪绦蛟O(shè)計(jì)》課程的輔助教學(xué)課程。該課程設(shè)計(jì)要求學(xué)生綜合
13、運(yùn)用在《面向?qū)ο蟪绦蛟O(shè)計(jì)》課程中學(xué)到的面向?qū)ο蠹夹g(shù)與實(shí)際編程相結(jié)合,獨(dú)立完成一項(xiàng)較為完整、并具有一定實(shí)際功能的課程設(shè)計(jì)任務(wù),同時(shí)加深學(xué)生對(duì)面向?qū)ο蠛虲++編程技術(shù)的理解和掌握,培養(yǎng)實(shí)際的應(yīng)用程序開(kāi)發(fā)能力。在課程設(shè)計(jì)過(guò)程中,使學(xué)生養(yǎng)成良好的程序設(shè)計(jì)風(fēng)格,并掌握C++應(yīng)用程序的設(shè)計(jì)開(kāi)發(fā)過(guò)程和編程方法、測(cè)試方法</p><p><b> 2.詳細(xì)設(shè)計(jì)</b></p><p&g
14、t;<b> 2.1需求描述</b></p><p> 簡(jiǎn)單文本編輯器的設(shè)計(jì)是基于Microsoft Visual Studio 2008開(kāi)發(fā)的一款小型的軟件,主要的設(shè)計(jì)是為了滿足普通用戶對(duì)文本文檔進(jìn)行一般的簡(jiǎn)單操作,通過(guò)MFC可視化編程環(huán)境,直接生成一個(gè)友好的用戶操作界面,通過(guò)這個(gè)窗口,用戶可以對(duì)文本進(jìn)行如下的基本操作。</p><p><b> 2
15、.1.1文件</b></p><p> 新建:創(chuàng)建一篇空白文檔,從“工具欄”或“文件下拉菜單”中創(chuàng)建</p><p> ② 打開(kāi):打開(kāi)文本(.txt)文件,從“工具欄”或“文件下拉菜單”中打開(kāi);或?qū)⑽谋荆?txt)文件拖入程序界面打開(kāi)或應(yīng)用程序圖標(biāo)上打開(kāi);或右鍵單擊文本文件,在“打開(kāi)方式”中選擇本程序打開(kāi)</p><p> 保存:保存文檔,從“工
16、具欄”或“文件下拉菜單”中打開(kāi)</p><p> ?、?另存為:保存文件副本,在不同位置或以不同文件名保存文檔,從“工具欄”或“文件下拉菜單”中另存</p><p><b> 2.1.2編輯</b></p><p> ?、?撤銷:撤銷前一步所進(jìn)行的操作,從“編輯下拉菜單”或“右鍵菜單”中撤銷</p><p> 刪除
17、:刪除當(dāng)前選定字符(串),從“編輯下拉菜單”或“右鍵菜單”中刪除</p><p> 剪切:復(fù)制并刪除選定字符(串),從“編輯下拉菜單”或“右鍵菜單”中剪切</p><p> 復(fù)制:復(fù)制選定字符(串),“編輯下拉菜單”或“右鍵菜單”中復(fù)制</p><p> 粘貼:對(duì)粘貼內(nèi)容進(jìn)行粘貼,從“編輯下拉菜單”或“右鍵菜單”中粘貼</p><p>
18、 全選:對(duì)文本編輯框中文本全部選定,從“編輯下拉菜單”或“右鍵菜單”中全</p><p><b> 2.1.3應(yīng)用</b></p><p> ① 查找/替換:輸入查找內(nèi)容(和替換內(nèi)容),可從光標(biāo)位置逐個(gè)查找(或替換)相應(yīng)內(nèi)容,也可一次性全部替換掉相應(yīng)內(nèi)容,從“工具欄”或“應(yīng)用下拉菜單”中執(zhí)行</p><p> ?、?字體設(shè)置:設(shè)置字體、
19、字形及字的大小,從“工具欄”或“應(yīng)用下拉菜單”中設(shè)置字體</p><p> ?、?統(tǒng)計(jì)字符串:統(tǒng)計(jì)用戶輸入的字符串出現(xiàn)次數(shù),從“工具欄”或“應(yīng)用下拉菜單”中執(zhí)行</p><p> ?、?統(tǒng)計(jì)字?jǐn)?shù):統(tǒng)計(jì)所有字符數(shù)、中文字符數(shù)、英文字符數(shù)、數(shù)字字符數(shù)和空格數(shù),從“工具欄”或“應(yīng)用下拉菜單”中啟動(dòng)</p><p><b> 2.1.4幫助</b&g
20、t;</p><p> ?、?關(guān)于EasyTXT:顯示關(guān)于本程序的信息,從“幫助下拉菜單”中啟動(dòng)</p><p> ?、?幫助:顯示程序幫助文檔,包括程序功能、使用、簡(jiǎn)要說(shuō)明等各種信息,從“工具欄”或“幫助下拉菜單”中啟動(dòng)</p><p><b> 2.1.5高級(jí)</b></p><p> ?、訇P(guān)聯(lián)注冊(cè):向注冊(cè)表
21、添加SLW文件關(guān)聯(lián),改變文本(.txt)文件圖標(biāo),并使文本(.txt)文件可單擊右鍵后選擇用本程序打開(kāi)(部分功能重啟或注銷后方能生效)</p><p> ②還原注冊(cè):取消注冊(cè),文本(.txt)文件還原為默認(rèn)圖標(biāo),不能右鍵打開(kāi)(部分功能重啟或注銷后方能生效)</p><p><b> 2.2功能描述</b></p><p> 2.2.1文
22、本編輯區(qū)</p><p> 本程序的編譯框架為MFC,功能的實(shí)現(xiàn)使用的是模塊化的編程方式進(jìn)行,由于使用的是MFC可視化編程,所以其中的很多過(guò)程使用的是相關(guān)的系統(tǒng)自帶函數(shù)實(shí)現(xiàn)的,其中整個(gè)編輯器的編輯區(qū)使用的是MFC自動(dòng)生成的文本框,但是這個(gè)文本框沒(méi)有插入符,不能實(shí)現(xiàn)文字編輯功能,所以需要在程序的CEasyTXTView中插入一些特定的文本編輯函數(shù),如插入符函數(shù)cwnd::createsolidcreat,這個(gè)函數(shù)
23、默認(rèn)的為隱藏,所以在后面需要showcreate()才能正常顯示,而整個(gè)編輯器的操作編輯部分使用的是一個(gè)獨(dú)立的*.CPP進(jìn)行控制的,代碼中使用的是圖形至于文本輸入的下方并設(shè)置為透明,在下面的文本編輯區(qū)下層有一張寫有內(nèi)容的圖片作為裝飾,換行等動(dòng)作惠濟(jì)路插入符位置并按照坐標(biāo)進(jìn)行繪制,文本框的大小改變等會(huì)導(dǎo)致文本編輯區(qū)的重繪,所以在改變文本框時(shí)必須調(diào)用函數(shù)對(duì)文本框中的內(nèi)容進(jìn)行保存,相關(guān)代碼如下所示:</p><p>
24、 BOOL CBmpEdit::OnEraseBkgnd(CDC* pDC) </p><p><b> {</b></p><p> CDC memDC;</p><p> memDC.CreateCompatibleDC(pDC);//創(chuàng)建內(nèi)存設(shè)備上下文</p><p> memDC.SelectObject
25、(&m_Bitmap);//將位圖選入設(shè)備上下文</p><p> BITMAP m_Bmp; //聲明位圖控件</p><p> m_Bitmap.GetBitmap(&m_Bmp); //獲得位圖信息</p><p> int x = m_Bmp.bmWidth; //獲取圖片寬度</p><p> int y =
26、 m_Bmp.bmHeight;//獲取圖片高度</p><p> CRect rect; //聲明矩形區(qū)域?qū)ο?lt;/p><p> GetClientRect(rect); //獲取編輯區(qū)大小矩形框</p><p> pDC->StretchBlt(0,0,rect.Width(),rect.Height(),&memDC,0,0,x,y,SR
27、CCOPY); //伸展鋪上圖片</p><p> memDC.DeleteDC();//釋放內(nèi)存設(shè)備上下文</p><p> return TRUE;//return CEdit::OnEraseBkgnd(pDC);</p><p><b> }</b></p><p> void CBmpEdit::On
28、Change() </p><p><b> {</b></p><p> Invalidate();//刷新用戶界面</p><p><b> }</b></p><p> HBRUSH CBmpEdit::CtlColor(CDC* pDC, UINT nCtlColor) </
29、p><p><b> {</b></p><p> pDC->SetBkMode(TRANSPARENT); //設(shè)置文字背景透明</p><p> return NULL;</p><p><b> }</b></p><p> void CBmpEdit::O
30、nVScroll(UINT nSBCode, UINT nPos, CScrollBar * pScrollBar) </p><p><b> {</b></p><p> CEdit::OnVScroll(nSBCode, nPos, pScrollBar);//判斷滾動(dòng)條是否滑動(dòng)</p><p> Invalidate();//
31、刷新用戶界面</p><p><b> }</b></p><p> void CBmpEdit::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags) </p><p><b> {</b></p><p> int n1,n2;</p&g
32、t;<p> n1 = GetScrollPos (SB_VERT);</p><p> CEdit::OnKeyDown(nChar, nRepCnt, nFlags);</p><p> n2 = GetScrollPos (SB_VERT);</p><p> if (n1 != n2)//判斷滾動(dòng)條是否滑動(dòng)</p>&l
33、t;p><b> {</b></p><p> Invalidate();//刷新用戶界面</p><p><b> }</b></p><p><b> }</b></p><p> BOOL CBmpEdit::OnMouseWheel(UINT nFla
34、gs, short zDelta, CPoint pt) </p><p><b> {</b></p><p> BOOL editS = CEdit::OnMouseWheel(nFlags, zDelta, pt);</p><p> Invalidate();//刷新用戶界面</p><p> retu
35、rn editS;</p><p><b> }</b></p><p><b> 2.2.2文件</b></p><p><b> 新建</b></p><p> 新建菜單使用的是MFC自帶的系統(tǒng)函數(shù)中的FILE等函數(shù)指令在massagebox的功能實(shí)現(xiàn)模塊,其中在
36、新建文檔的時(shí)候需要對(duì)文本的編輯區(qū)進(jìn)行判斷,對(duì)文本框中存在的文本進(jìn)行存檔,而新建的文檔就是對(duì)文本編輯區(qū)進(jìn)行重繪,對(duì)原有的內(nèi)容進(jìn)行存儲(chǔ)和銷毀,詳細(xì)代碼如下所示:</p><p> void CEasyTXTDlg::OnMenuNew()</p><p> {//新建前對(duì)現(xiàn)有文本的的處理</p><p> isModified = m_Edit.GetModify
37、();//獲取文本修改標(biāo)記</p><p> CString string;</p><p> m_Edit.GetWindowText(string);</p><p> if (isNew && string.IsEmpty())//若是新建文本且文本無(wú)內(nèi)容內(nèi)容</p><p><b> {</b&
38、gt;</p><p><b> ;</b></p><p><b> }</b></p><p> else if(isModified) //如果文本已被修改,分情況討論</p><p><b> {</b></p><p> int Ch
39、oice = MessageBox("當(dāng)前文本已被修改,想保存嗎?","系統(tǒng)提示",</p><p> MB_YESNO|MB_ICONQUESTION); //彈出消息對(duì)話框詢問(wèn)</p><p> if(Choice==IDYES) //選擇“是”</p><p><b> {</b></p
40、><p> OnMenuSave();//調(diào)用保存函數(shù)保存文件</p><p><b> }</b></p><p><b> }//新建</b></p><p> m_Edit.SetSel(0, -1); //全部選中文本內(nèi)容</p><p> m_Edit.Cle
41、ar();//將所有文本刪除</p><p> isNew = TRUE; //標(biāo)記為新建文本</p><p> m_Edit.SetModify(FALSE); //文本修改標(biāo)記設(shè)為未修改</p><p><b> }</b></p><p><b> 打開(kāi)</b></p>
42、<p> 菜單欄的打開(kāi)使用的拖入和圖標(biāo)打開(kāi),其中使用了MFC中自帶的打開(kāi)對(duì)話框,這樣的使用和拖入的使用均是使用了自帶的函數(shù),其中重點(diǎn)是在運(yùn)行的過(guò)程中對(duì)絕對(duì)路徑的獲取以及特定格式文件的打開(kāi)和提取,對(duì)不正確的格式進(jìn)行massagebox的消息盒子提醒,詳細(xì)代碼如下:</p><p> void CEasyTXTDlg::OnDropFiles(HDROP hDropInfo) </p>
43、;<p><b> { </b></p><p> char *lpszFileName=new char[512]; </p><p> int nFileCount,i; nFileCount=::DragQueryFile (hDropInfo,0xFFFFFFFF,NULL,512); </p><p> for
44、(i=0;i<nFileCount;i++)</p><p><b> { </b></p><p> UINT nChars=::DragQueryFile (hDropInfo,i,&lpszFileName[0],512); </p><p> CString str(&lpszFileName[0],nCha
45、rs); //獲得文件路徑//打開(kāi)前對(duì)現(xiàn)有文本的的處理</p><p> isModified = m_Edit.GetModify();//獲取文本修改標(biāo)記</p><p> CString string;</p><p> m_Edit.GetWindowText(string);</p><p> if (isNew &
46、& string.IsEmpty())//若是新建文本且文本無(wú)內(nèi)容內(nèi)容</p><p><b> {</b></p><p><b> ;</b></p><p><b> }</b></p><p> else if(isModified) //如果文本已被修
47、改,分情況討論</p><p><b> {</b></p><p> int Choice = MessageBox("當(dāng)前文本已被修改,想保存嗎?","系統(tǒng)提示",</p><p> MB_YESNO|MB_ICONQUESTION); //彈出消息對(duì)話框詢問(wèn)</p><p&
48、gt; if(Choice==IDYES) //選擇“是”</p><p><b> {</b></p><p> OnMenuSave();//調(diào)用保存函數(shù)保存文件</p><p><b> }</b></p><p><b> }</b></p>&
49、lt;p> CString strText="";</p><p> SavePath = str;</p><p> int n = SavePath.ReverseFind('.'); </p><p> CString stl = SavePath.Right(SavePath.GetLength() -
50、n - 1);</p><p> if (stl == "txt" || stl == "TXT" || stl == "c" || stl == "C" || stl == "cpp" || stl == "CPP"</p><p> || stl == "
51、;h" || stl == "H" || stl == "xml" || stl == "XML" || stl == "html" || stl == "HTML")</p><p><b> {</b></p><p> CFile file(str,
52、CFile::modeReadWrite); //以讀與寫方式打開(kāi)文件//拖入打開(kāi)</p><p> m_Edit.SetSel(0, -1); //全部選中文本內(nèi)容</p><p> m_Edit.Clear();//將所有文本刪除</p><p> char read[50000];</p><p> file.Read(rea
53、d,50000); //讀取文件內(nèi)容</p><p> for(unsigned i=0;i<file.GetLength();i++)</p><p><b> {</b></p><p> strText += read[i]; //把文件內(nèi)容賦值給CString變量</p><p><b>
54、 }</b></p><p> file.Close();//關(guān)閉文件</p><p> m_Edit.SetWindowText(strText);</p><p> isNew = FALSE; //標(biāo)記為打開(kāi)文本</p><p> m_Edit.SetModify(FALSE); //文本修改標(biāo)記設(shè)為修改<
55、/p><p><b> }</b></p><p><b> else</b></p><p><b> {</b></p><p> MessageBox ("不支持的文件類型!","打開(kāi)錯(cuò)誤");</p><p
56、><b> }</b></p><p><b> } </b></p><p> ::DragFinish (hDropInfo); //釋放內(nèi)存</p><p><b> i=0;</b></p><p> delete []lpszFileName; <
57、;/p><p><b> }</b></p><p> void CEasyTXTDlg::OpenFile()</p><p><b> {</b></p><p> CString strCmdLine = GetCommandLine();</p><p> in
58、t totalLen = strCmdLine.GetLength();</p><p> int i = 0;</p><p> int index = 0;//循環(huán)統(tǒng)計(jì)字符個(gè)數(shù)</p><p> for (i = 0,index = 0; i < 3; i++,index ++)</p><p><b> {<
59、;/b></p><p> index = strCmdLine.Find("\"", index); //查找字符串</p><p><b> }</b></p><p> if (index != 0)</p><p><b> {</b></p
60、><p> for (i = index;i < totalLen - 1;i ++)</p><p> SavePath += strCmdLine.GetAt(i);</p><p> int n = SavePath.ReverseFind('.'); </p><p> CString stl = Sav
61、ePath.Right(SavePath.GetLength() - n - 1);</p><p> if (stl == "txt" || stl == "TXT" || stl == "c" || stl == "C" || stl == "cpp" || stl == "CPP"<
62、;/p><p> || stl == "h" || stl == "H" || stl == "xml" || stl == "XML" || stl == "html" || stl == "HTML")</p><p><b> {</b><
63、;/p><p> CString strText;</p><p> CFile file(SavePath,CFile::modeReadWrite); //以讀與寫方式打開(kāi)文件</p><p> char read[50000];</p><p> file.Read(read,50000); //讀取文件內(nèi)容</p>
64、<p> for(unsigned i=0;i<file.GetLength();i++)</p><p><b> {</b></p><p> strText += read[i];//把文件內(nèi)容賦值給CString變量</p><p><b> }</b></p><p
65、> file.Close();//關(guān)閉文件</p><p> m_Edit.SetWindowText(strText); //在編輯框中顯示文件內(nèi)容</p><p> m_Edit.SetModify(FALSE); //文本修改標(biāo)記設(shè)為未修改</p><p> isNew = FALSE;</p><p> Invalid
66、ate();</p><p><b> }</b></p><p><b> else</b></p><p><b> {</b></p><p> MessageBox ("不支持的文件類型!","打開(kāi)錯(cuò)誤");</p&
67、gt;<p> m_Edit.SetModify(FALSE); //文本修改標(biāo)記設(shè)為未修改</p><p> isNew = TRUE;</p><p><b> }</b></p><p><b> }</b></p><p><b> else</b&g
68、t;</p><p><b> {</b></p><p> m_Edit.SetModify(FALSE); //文本修改標(biāo)記設(shè)為未修改</p><p> isNew = TRUE;</p><p><b> }</b></p><p> m_Edit.SetSe
69、l(0,0);</p><p><b> }</b></p><p><b> 保存</b></p><p> 保存使用的是MFC中自帶的模塊進(jìn)行的,第一次的保存即為另存為,當(dāng)文檔已經(jīng)創(chuàng)建以后,文本的保存就改變?yōu)榘盐谋揪庉媴^(qū)的內(nèi)容重新寫入同一個(gè)絕對(duì)地址的文本文檔中,其中聲明和調(diào)用的詳細(xì)代碼如下:</p>
70、<p> void CEasyTXTDlg::OnMenuSave()</p><p><b> {</b></p><p> if (isNew) //對(duì)新建且未保存的文本調(diào)用“另存為”進(jìn)行保存</p><p><b> {</b></p><p> OnMenuSaveas
71、();//新建文本已保存</p><p><b> }</b></p><p> else//對(duì)打開(kāi)的文件修改后進(jìn)行保存</p><p> { </p><p> CString strText="";</p><p> char write[
72、50000];</p><p> CFile file(_T(SavePath),CFile::modeCreate|CFile::modeReadWrite);//以讀與寫方式創(chuàng)建文件</p><p> m_Edit.GetWindowText(strText); //獲取編輯框中的內(nèi)容</p><p> strcpy(write,strText); /
73、/將編輯框中的內(nèi)容賦值給字符串?dāng)?shù)組</p><p> file.Write(write,strText.GetLength());//把編輯框中的內(nèi)容寫入文件</p><p> file.Close();//關(guān)閉文件</p><p> m_Edit.SetModify(FALSE); //設(shè)置修改標(biāo)記為未修改</p><p><
74、b> }</b></p><p> m_Edit.SetSel(0,0);</p><p><b> }</b></p><p><b> 另存為</b></p><p> 另存為是一種特殊的保存形式,另存為在應(yīng)用的時(shí)候是用戶用過(guò)FILE等函數(shù)尋找一個(gè)絕對(duì)地址并按照現(xiàn)有格
75、式進(jìn)行保存,在今后的另存為命令中,不會(huì)對(duì)相同絕對(duì)地址相同文件名的文件進(jìn)行保存,而是在彈出消息對(duì)話框用戶確認(rèn)覆蓋操作以后才將原有的文件進(jìn)行刪除操作然后把新內(nèi)容的文件生成在用戶選定的絕對(duì)地址下,詳細(xì)代碼如下:</p><p> void CEasyTXTDlg::OnMenuSaveas()</p><p><b> {</b></p><p>
76、; CFileStatus fs; //文件存在狀態(tài)</p><p> CFileDialog dlg(FALSE,NULL,NULL,OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,</p><p> "All Files(*.txt)|*.txt||",AfxGetMainWnd()); //構(gòu)造“文件另存為”對(duì)話框</p
77、><p> CString strPath,strText="";</p><p> char write[50000];</p><p> if(dlg.DoModal() == IDOK) //判斷按下“另存為”</p><p><b> {</b
78、></p><p> strPath = dlg.GetPathName(); //獲取文件另存為路徑</p><p> if(strPath.Right(4) != ".txt")</p><p><b> {</b></p><p> strPa
79、th += ".txt"; //設(shè)置文件擴(kuò)展名為txt</p><p><b> }</b></p><p> if(CFile::GetStatus(_T(strPath),fs))//如果文件存在</p><p><b> { </b>
80、;</p><p> CString info = strPath;</p><p> info += " 已存在。\r\n要替換它嗎?";</p><p> int nChoice = MessageBox (info,"另存為",MB_ICONWARNING|MB_YESNO);//彈出確認(rèn)替換消息</p&g
81、t;<p> if (nChoice == IDYES)//如果確認(rèn)替換</p><p><b> {</b></p><p> SavePath = strPath;//獲取保存新建文本的路徑</p><p> CFile file(_T(strPath),CFile::modeCreat
82、e|CFile::modeWrite);//以只寫方式創(chuàng)建文件</p><p> m_Edit.GetWindowText(strText);//獲取編輯框中的內(nèi)容</p><p> strcpy(write,strText);//將編輯框中的內(nèi)容賦值給字符串?dāng)?shù)組</p><p> file.Write(write,strText.GetLengt
83、h());//把編輯框中的內(nèi)容寫入文件</p><p> file.Close();//關(guān)閉文件</p><p> isNew = FALSE;</p><p> m_Edit.SetModify(FALSE);</p><p><b> }</b></p><p>
84、 else//不替換</p><p><b> {</b></p><p> OnMenuSaveas();//彈出另存對(duì)話框</p><p><b> }</b></p><p><b> }</b></p><p&g
85、t; else//如果文件不存在</p><p><b> {</b></p><p> SavePath = strPath;//獲取保存新建文本的路徑</p><p> CFile file(_T(strPath),CFile::modeCreate|CFile::modeWrite);//以只寫方式創(chuàng)建文件<
86、/p><p> m_Edit.GetWindowText(strText);//獲取編輯框中的內(nèi)容</p><p> strcpy(write,strText);//將編輯框中的內(nèi)容賦值給字符串?dāng)?shù)組</p><p> file.Write(write,strText.GetLength());//把編輯框中的內(nèi)容寫入文件</p>
87、<p> file.Close();</p><p> isNew = FALSE;</p><p> m_Edit.SetModify(FALSE);</p><p> }</p><p><b> }</b></p><p> m_Edit.SetS
88、el(0,0);</p><p> CRect rect (15,80,586,686);</p><p> InvalidateRect(rect);//刷新用戶界面</p><p><b> }</b></p><p><b> 退出</b></p><p&g
89、t; void CEasyTXTDlg::OnClose() </p><p><b> {</b></p><p> isModified = m_Edit.GetModify();//獲取文本修改標(biāo)記</p><p> CString string;</p><p> m_Edit.GetWindowT
90、ext(string);</p><p> if (isNew && string.IsEmpty())//若是新建文本且文本無(wú)內(nèi)容內(nèi)容</p><p><b> {</b></p><p> CDialog::OnClose();//退出程序</p><p><b> }&l
91、t;/b></p><p> else if(isModified)//如果文本已被修改,分情況討論</p><p><b> {</b></p><p> int QuitChoice = MessageBox("當(dāng)前文本已被修改,想保存嗎?","系統(tǒng)提示",</p>&
92、lt;p> MB_YESNOCANCEL|MB_ICONQUESTION);//彈出消息對(duì)話框詢問(wèn)</p><p> if(QuitChoice==IDYES) //選擇“是”</p><p><b> {</b></p><p> OnMenuSave();//調(diào)用保存函數(shù)保存文件</p>
93、;<p> if (isModified = FALSE)</p><p> CDialog::OnClose();//退出程序</p><p><b> }</b></p><p> else if(QuitChoice==IDNO)//選擇“否”</p><p><b>
94、 {</b></p><p> CDialog::OnClose();//退出程序</p><p><b> }</b></p><p><b> else</b></p><p><b> {</b></p><p>
95、return;//選擇“取消”時(shí)不退出</p><p><b> }</b></p><p><b> }</b></p><p><b> else</b></p><p><b> {</b></p><p>
96、; CDialog::OnClose();//如果文本未被修改則直接退出程序</p><p><b> }</b></p><p><b> }</b></p><p><b> 2.2.3編輯</b></p><p><b> 撤銷</b&
97、gt;</p><p> 撤銷命令是系統(tǒng)自帶的函數(shù),使用是調(diào)用OnMenuUndo函數(shù)命令,詳細(xì)代碼如下所示:</p><p> void CEasyTXTDlg::OnMenuUndo()</p><p><b> {</b></p><p> m_Edit.Undo(); //撤銷上一次的編輯框中
98、的操作(單級(jí)撤銷)</p><p><b> }</b></p><p><b> 刪除</b></p><p> 刪除命令調(diào)用的是系統(tǒng)自帶函數(shù),使用的是OnMenuDelete函數(shù)命令,詳細(xì)代碼如下所示:</p><p> void CEasyTXTDlg::OnMenuDelete()&
99、lt;/p><p><b> {</b></p><p> m_Edit.Clear(); //刪除編輯框中當(dāng)前選中的文本</p><p><b> }</b></p><p><b> 剪切</b></p><p> 剪切命令調(diào)用的是系
100、統(tǒng)自帶函數(shù),使用的是OnMenueCut函數(shù)命令,詳細(xì)代碼如下所示:</p><p> void CEasyTXTDlg::OnMenuCut()</p><p><b> {</b></p><p> m_Edit.Cut(); //刪除編輯控件中當(dāng)前選中的文本,并將刪除的文本拷貝到剪貼板中</p><
101、p><b> }</b></p><p><b> 復(fù)制</b></p><p> 復(fù)制命令調(diào)用的是系統(tǒng)自帶函數(shù),使用的是OnMenuCopy函數(shù)命令,詳細(xì)代碼如下所示:</p><p> void CEasyTXTDlg::OnMenuCopy()</p><p><b>
102、 {</b></p><p> m_Edit.Copy(); //將編輯框中的當(dāng)前選中文本拷貝到剪貼板中</p><p><b> }</b></p><p><b> 粘貼</b></p><p> 粘貼命令調(diào)用的是系統(tǒng)自帶函數(shù),使用的是OnMenuPaste函數(shù)
103、命令,詳細(xì)代碼如下所示:</p><p> void CEasyTXTDlg::OnMenuPaste()</p><p><b> {</b></p><p> m_Edit.Paste(); //在當(dāng)前光標(biāo)位置插入剪貼板內(nèi)的文本</p><p><b> }</b></p
104、><p><b> 全選</b></p><p> 全選命令調(diào)用的是系統(tǒng)自帶函數(shù),使用的是OnMenuSelectAll函數(shù)命令,詳細(xì)代碼如下所示:</p><p> void CEasyTXTDlg::OnMenuSelectAll()</p><p><b> {</b></p>
105、<p> m_Edit.SetSel(0, -1);//全部選中文本內(nèi)容</p><p><b> }</b></p><p><b> 2.2.4應(yīng)用</b></p><p><b> 查找/替換</b></p><p> 查找和替換命令使用的是串查
106、詢,按照匹配的媳婦篩選,如果替換,則在替換時(shí)判斷是否為第一次的替換,替換時(shí)將記錄字符串的位置并加以標(biāo)記,按后進(jìn)行替換,詳細(xì)代碼如下所示:</p><p> void CEasyTXTDlg::OnMenuFindReplace()</p><p><b> {</b></p><p> nindex = 0;</p><
107、;p> degree = FALSE;</p><p> index = 0;</p><p> dlg = new CFindReplaceDialog;//聲明“查找/替換”對(duì)話框指針</p><p> dlg->Create(FALSE,NULL);//創(chuàng)建“替換”對(duì)話框</p><p> dlg-
108、>ShowWindow(SW_SHOW);//顯示“替換”對(duì)話框</p><p> long CEasyTXTDlg::OnFindReplace(WPARAM wParam, LPARAM lParam)</p><p><b> {</b></p><p> CString strText,repText;
109、//聲明字符串變量</p><p> strText = dlg->GetFindString();//獲得查找字符串</p><p> CString str;//聲明字符串變量</p><p> m_Edit.GetWindowText(str);//獲得編輯框中是文本</
110、p><p><b> int len;</b></p><p> if(dlg->ReplaceAll())//判斷是否全部替換</p><p><b> {</b></p><p> strText = dlg->GetFindString();
111、//獲得查找字符串</p><p> repText = dlg->GetReplaceString();//獲得替換字符串</p><p> len = repText.GetLength();//獲得替換字符串長(zhǎng)度</p><p> str.Replace(strText,repText);//使用替換字
112、符串替換查找字符串</p><p> m_Edit.SetWindowText(str);//將替換后的字符串顯示在編輯框中</p><p> nindex =0;//設(shè)置查找位置為初始</p><p> m_Edit.SetModify(TRUE); //文本修改標(biāo)記設(shè)為修改</
113、p><p> m_Edit.SetSel(0,-1);</p><p> CRect rect (15,80,586,686);</p><p> InvalidateRect(rect);//刷新界面</p><p><b> }</b></p><p> if(dlg-
114、>ReplaceCurrent())//替換</p><p> find = FALSE;//進(jìn)行替換</p><p><b> else</b></p><p> find = TRUE;//進(jìn)行查找/聲明整型變量</p><p> if(fi
115、nd)//判斷是查找還是替換</p><p><b> {</b></p><p> len = strText.GetLength();//獲得要查找字符串的長(zhǎng)度</p><p><b> }</b></p><p><b> else&
116、lt;/b></p><p><b> {</b></p><p> CString left,right;//聲明字符串變量</p><p> int num = strText.GetLength();//獲得查找字符串的長(zhǎng)度</p><p> int strnum
117、= str.GetLength();//獲得編輯框中文本長(zhǎng)度</p><p> if(!degree)//判斷為第一次替換</p><p> index = str.Find(strText,nindex);//獲得查找字符串在編輯框文本中的位置</p><p> if(index < 0)</p>
118、<p><b> {</b></p><p> nindex = 0;</p><p> degree = FALSE;</p><p><b> return 1;</b></p><p><b> }</b></p><p&g
119、t; left = str.Left(index);//獲得替換字符串左側(cè)的字符串</p><p> right = str.Right(strnum-index-num);//獲得替換字符串右側(cè)的字符串</p><p> repText = dlg->GetReplaceString();//獲得替換字符串</p><p
120、> len = repText.GetLength();//獲得替換字符串長(zhǎng)度</p><p> str = left + repText + right;//組合成新的字符串</p><p> m_Edit.SetWindowText(str);//在編輯框中顯示新的字符串</p><p> m_Edit.Se
121、tModify(TRUE); //文本修改標(biāo)記設(shè)為修改</p><p><b> }</b></p><p> strText = dlg->GetFindString();//獲得查找字符串</p><p> m_Edit.GetWindowText(str);//獲得編
122、輯框中是文本</p><p> index = str.Find (strText,nindex);//獲得查找字符串在編輯框文本中的位置</p><p> m_Edit.SetSel(index,index+strText.GetLength());//選中查找或替換的字符串</p><p> nindex = index+len;
123、//設(shè)置起始查找位置</p><p> if (index >= 0)</p><p><b> {</b></p><p> degree = TRUE;</p><p><b> }</b></p><p><b> else</b
124、></p><p><b> {</b></p><p> degree = FALSE;</p><p> nindex = 0;</p><p><b> }</b></p><p> m_Edit.SetFocus();//編輯框獲得
125、焦點(diǎn)</p><p> CRect rect1 (15,80,586,686);</p><p> InvalidateRect(rect1);//刷新界面</p><p><b> return 0;</b></p><p><b> }</b></p>&
126、lt;p><b> 字體設(shè)置</b></p><p> void CEasyTXTDlg::OnMenuFont()</p><p><b> {</b></p><p> // TODO: Add your control notification handler code here</p>
127、<p> CFont* TempFont = m_Edit.GetFont(); //獲取編輯框當(dāng)前字體</p><p> LOGFONT LogFont;</p><p> TempFont->GetLogFont(&LogFont);//獲取字體信息</p><p> CFontDialog dl
128、g(&LogFont);//初始化字體信息</p><p> if(dlg.DoModal()==IDOK)</p><p><b> {</b></p><p> m_Font.Detach(); //分離字體</p><p> LOGF
129、ONT temp;</p><p> dlg.GetCurrentFont(&temp);//獲取當(dāng)前字體信息</p><p> m_Font.CreateFontIndirect(&temp);//直接創(chuàng)建字體</p><p> m_Edit.SetFont(&m_Font);//設(shè)置字體</p>
130、<p><b> }</b></p><p><b> }</b></p><p><b> 統(tǒng)計(jì)字符串</b></p><p> void CEasyTXTDlg::OnMenuCountString()</p><p><b> {<
131、/b></p><p> CString str;</p><p> m_Edit.GetWindowText(str);//獲取編輯框文本</p><p> CCountStringDlg dlg;//聲明統(tǒng)計(jì)字符串對(duì)話框類對(duì)象</p><p> dlg.SetText(str);</p>
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫(kù)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- c語(yǔ)言課程設(shè)計(jì)--文本編輯器
- c_文本編輯器課程設(shè)計(jì)
- 文本編輯器課程設(shè)計(jì)
- c++課程設(shè)計(jì)--簡(jiǎn)單的行編輯器
- c_編寫的文本編輯器課程設(shè)計(jì)
- 文本編輯器課程設(shè)計(jì)報(bào)告
- java課程設(shè)計(jì)--文本編輯器
- java課程設(shè)計(jì)---文本編輯器
- java課程設(shè)計(jì)---文本編輯器
- vb課程設(shè)計(jì)文本編輯器
- java課程設(shè)計(jì)(文本編輯器)
- vb課程設(shè)計(jì)報(bào)告----文本編輯器
- vb課程設(shè)計(jì)報(bào)告---文本編輯器
- 簡(jiǎn)易文本編輯器課程設(shè)計(jì)報(bào)告
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)--文本編輯器
- 操作系統(tǒng)課程設(shè)計(jì)---文本編輯器
- 微機(jī)原理課程設(shè)計(jì)—簡(jiǎn)易文本編輯器
- visual_basic課程設(shè)計(jì)報(bào)告---文本編輯器
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)---簡(jiǎn)易文本編輯器
- 文本編輯器_java課程設(shè)計(jì)實(shí)驗(yàn)報(bào)告
評(píng)論
0/150
提交評(píng)論