版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、<p><b> 目錄</b></p><p> 問題描述-------------------------------------------------------------------------2</p><p> 1、基本要求----------------------------------------------------------
2、------------2</p><p> 2、提高要求----------------------------------------------------------------------2</p><p> 二、需求分析-------------------------------------------------------------------------2<
3、/p><p> 三、概要設(shè)計(jì)-------------------------------------------------------------------------3</p><p> 四、詳細(xì)設(shè)計(jì)-------------------------------------------------------------------------5</p><p&
4、gt; 1、文件操作----------------------------------------------------------------------5</p><p> 編輯操作----------------------------------------------------------------------10</p><p> 工具操作------------
5、----------------------------------------------------------19</p><p> 關(guān)于操作----------------------------------------------------------------------20</p><p> 五、編碼與調(diào)試分析-----------------------------
6、-----------------------------------20</p><p> 六、使用說明-------------------------------------------------------------------------22</p><p> 七、測(cè)試結(jié)果--------------------------------------------------
7、-----------------------22</p><p> 八、自學(xué)知識(shí)-------------------------------------------------------------------------26</p><p> 九、課程設(shè)計(jì)心得體會(huì)----------------------------------------------------------
8、---27</p><p><b> 一、問題的描述</b></p><p> 設(shè)計(jì)并編寫一個(gè)小型文本編輯器,使其具有通常文本編輯器(如Vi、Edlin)應(yīng)具備的基本功能。 </p><p> 1.基本要求:編輯器應(yīng)具備對(duì)文本文件的打開、保存、新建、查找、插人、刪除、修改、字符串替換、統(tǒng)計(jì)字?jǐn)?shù),統(tǒng)計(jì)行數(shù)等功能,對(duì)于超過一屏的長(zhǎng)文件,應(yīng)能夠
9、分頁顯示。設(shè)計(jì)用戶接口命令,實(shí)現(xiàn)對(duì)文本的編輯。</p><p> 2.提高要求:可以支持“* ”、“? ”等通配符,支持復(fù)制、粘貼等功能,支持多文檔同時(shí)編輯。設(shè)計(jì)用戶接口命令,實(shí)現(xiàn)對(duì)文本的編輯。</p><p><b> 二、需求分析</b></p><p> 文本編輯器的基本功能:</p><p> 該文本編輯
10、器是用windows編寫的一個(gè)程序,運(yùn)行后彈出文本編輯器的主界面,由鍵盤輸入或以打開的方式輸入或顯示文本文件內(nèi)容。其中程序的編輯項(xiàng)可對(duì)當(dāng)前的文本進(jìn)行撤銷、刪除、剪切、復(fù)制、粘貼、在文本里顯示當(dāng)前時(shí)間、全選、清除、查找、替換、統(tǒng)計(jì)等功能。程序的文件項(xiàng)可以對(duì)電腦上txt,c++等格式文件的打開、對(duì)當(dāng)前文本的保存和另存、對(duì)當(dāng)前文本的的新建以及退出文本編輯系統(tǒng)。程序的工具項(xiàng)為背景音樂,為用戶提供了優(yōu)美動(dòng)聽的音樂,僅在用戶編輯疲憊乏力的時(shí)候盡情的
11、享用。最后在程序的幫助項(xiàng)有對(duì)該小型文本編輯器的關(guān)于,用來介紹該程序,還有訪問鏈接百度,訪問114網(wǎng)頁大全,為用戶提供查找資料等功能服務(wù)。</p><p><b> 輸入形式:</b></p><p> ①直接在文本編輯框中輸入文本內(nèi)容;</p><p> ?、谝源蜷_的方式打開并在文本框中顯示電腦的上文本。</p><p&
12、gt;<b> 輸出形式:</b></p><p> ①對(duì)編輯框中尚無文本內(nèi)容時(shí)進(jìn)行查找、替換、統(tǒng)計(jì)等,程序會(huì)彈出一個(gè)提示尚無文本信息的小對(duì)話框,需輸入文本后再進(jìn)行以上操作。</p><p> ?、趯?duì)編輯框中已有文本內(nèi)容后進(jìn)行查找、替換、統(tǒng)計(jì)操作,程序?qū)棾雠c之對(duì)應(yīng)的對(duì)話框,根據(jù)所彈出的對(duì)話框的按鍵要求進(jìn)行之后的操作就可以。保存文件,另存為等功能都異曲同工,撤銷、
13、刪除、剪切、復(fù)制、 粘貼、等就直接在主文本編輯框中操作,直接在其顯示操作后的文本信 息。</p><p> 測(cè)試數(shù)據(jù)要求:任意一文本文件。</p><p><b> 概要設(shè)計(jì)</b></p><p><b> 抽象數(shù)據(jù)類型:</b></p><p> 直接運(yùn)用windows中的的窗口類,通
14、過消息響應(yīng),調(diào)用API函數(shù)實(shí)現(xiàn)有關(guān)對(duì)話框的操作功能,以及自己定義一個(gè)僅含有成員函數(shù)的普通類對(duì)文本字符進(jìn)行查找、替換、統(tǒng)計(jì)的輔助操作,對(duì)主對(duì)話框和副對(duì)話框中函數(shù)的回調(diào)和參數(shù)的回顯功能。</p><p><b> 主程序流程圖</b></p><p> ?。?)模塊調(diào)用關(guān)系:</p><p> 該文本編輯器函數(shù)括:WINAPI Main_Pro
15、c(), WINAPI Change_Proc(), WINAPI Find_Proc(), WINAPI Total_Proc(), Main_OnInitDialog(); Change _OnInitDialog(); Find_OnInitDialog(); Total_ OnInitDialog(); Main_OnCommand(); Change_ OnCommand(); Find_ OnCommand(); T
16、otal_ OnCommand(),Main_OnClose(),Change_ Main_OnClose(); Find__OnClose(); Total _OnClose(); Main_OnSize(), TCHAR * temp(),D_change()等函數(shù);其中每個(gè)對(duì)話框?qū)?yīng)一組函數(shù)例如主對(duì)話框包括WINAPI Main_Proc(), Main_OnInitDialog(),Main_OnCommand(),Main
17、_OnClose()函數(shù),Main_Proc()函數(shù)通過消息響應(yīng)調(diào)用M</p><p> 其函數(shù)調(diào)用關(guān)系如下:</p><p><b> 四、詳細(xì)設(shè)計(jì)</b></p><p><b> 〔1〕、文件操作:</b></p><p> 1、文件的新建的實(shí)現(xiàn):</p><p&g
18、t; int ret=MessageBox(NULL,TEXT("是否把更改保存到新建的文本文檔!!!"),TEXT("溫馨提示"),MB_YESNO | MB_ICONQUESTION);</p><p> if(ret==IDYES) //根據(jù)選擇如果保存</p><p><b> {</b></p>
19、<p> OPENFILENAME ofn; //文件對(duì)象</p><p> char szFile[MAX_PATH]; //文件的大小,最大</p><p> ZeroMemory(&ofn,sizeof(ofn)); //文件的初始化</p><p> ofn.lStructSize = sizeof(ofn);</p>
20、;<p> ofn.lpstrFile = szFile;</p><p> ofn.lpstrFile[0] = TEXT('\0');</p><p> ofn.nMaxFile = sizeof(szFile);</p><p> ofn.lpstrFilter = TEXT("ALL\0*.*\0Text\0*
21、.TXT\0C++\0*.cpp\0"); //保存的文件類型</p><p> ofn.nFilterIndex = 1;</p><p> ofn.lpstrFileTitle = NULL;</p><p> ofn.nMaxFileTitle = 0;</p><p> ofn.lpstrInitialDir =
22、NULL;</p><p> ofn.hwndOwner = hwnd;</p><p> ofn.Flags = OFN_EXPLORER |OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST;</p><p> ofn.lpstrTitle=TEXT("保存");</p><p> if
23、 (GetSaveFileName(&ofn)) </p><p><b> {</b></p><p><b> FILE *fp;</b></p><p> fp=fopen(szFile,"w"); //打開文件</p><p> if(fp==NULL)
24、</p><p><b> {</b></p><p> MessageBox(NULL,TEXT("文件無法保存"),TEXT("嗚嗚"),MB_OK);</p><p><b> }</b></p><p> TCHAR str[10000];&l
25、t;/p><p> TCHAR end[10000];</p><p> memset(end,0,10000);</p><p> GetDlgItemText(hwnd,IDC_EDIT1,str,sizeof(str));</p><p> fputs(str,fp);</p><p> fclose(fp
26、);</p><p><b> }</b></p><p> SetDlgItemText(hwnd,IDC_EDIT1,"");</p><p><b> }</b></p><p><b> else</b></p><p&g
27、t;<b> {</b></p><p> SetDlgItemText(hwnd,IDC_EDIT1,"");</p><p><b> }</b></p><p> 2、文件打開的實(shí)現(xiàn):</p><p> case ID_MENUITEMOPEN: /
28、/文本的打開</p><p><b> {</b></p><p> OPENFILENAME ofn;</p><p> char szFile[MAX_PATH]; //保存路徑變量</p><p> ZeroMemory(&ofn,sizeof(ofn));</p><p&g
29、t; 在這里我們使用ZeroMemory“函數(shù)”,ZeroMemory其實(shí)并不是函數(shù),看一下ZeroMemory的定義:</p><p> ofn.lStructSize = sizeof(ofn);</p><p> ofn.lpstrFile = szFile; </p><p> //szFile是一個(gè)字符數(shù)組,那么szFile這個(gè)名字就代表這個(gè)字
30、符數(shù)組的首地址</p><p> 這是一個(gè)指針的應(yīng)用,把接收選擇文件名的數(shù)組的地址傳遞到GetOpenFileName函數(shù)中。 ofn.lpstrFile[0] = TEXT('\0');</p><p> ofn.lpstrFile[0] = TEXT('\0');效果等價(jià)于ZeroMemory(szFile,sizeof(szFile
31、)/sizeof(char));</p><p> ofn.nMaxFile = sizeof(szFile);</p><p> ofn.lpstrFilter = TEXT("ALL\0*.*\0Text\0*.txt\0");</p><p><b> 文件過濾器</b></p><p>
32、; *.*就表示所有文件*.txt就表示所有文本文件abc*.*就表示所有以abc開頭的文件abc*.txt就表示所有以abc開頭的文本文件(txt) </p><p> ofn.lpstrFilter = TEXT("ALL\0*.*\0Text\0*.TXT\0");用“\0”分割出幾個(gè)段,每?jī)啥问且唤M過濾器,每組的第一個(gè)段代表過濾器的顯示的值,而第二段表示真正的過濾器<
33、/p><p> ofn.nFilterIndex = 1; //選擇一個(gè)過濾器</p><p> ofn.lpstrFileTitle = NULL;</p><p> windows的一個(gè)慣例:結(jié)構(gòu)體的指針類型別名一般是LP+結(jié)構(gòu)體的名字GetOpenFileName(&ofn)而不是GetOpenFileName(ofn),因?yàn)镚etOpenFil
34、eName函數(shù)要的是OPENFILENAME的指針(8)只要用戶還沒關(guān)閉對(duì)話框,那么GetOpenFileName函數(shù)是停住的,同步模式的PlaySound以及getchar、scanf是一樣的。用戶關(guān)閉對(duì)話框,GetOpenFileName函數(shù)返回,返回值是BOOL,等于TRUE表示用戶選擇了文件,如果等于FALSE就表示用戶選擇了【取消】按鈕</p><p> ofn.nMaxFileTitle = 0
35、;</p><p> ofn.lpstrInitialDir = NULL;</p><p> ofn.hwndOwner = hwnd;</p><p> ofn.Flags = OFN_EXPLORER |OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST;</p><p> if(GetOpenFileN
36、ame(&ofn)) </p><p><b> {</b></p><p><b> FILE *fp;</b></p><p> fp=fopen(szFile,"r");</p><p> if(fp==NULL)</p><p>&
37、lt;b> {</b></p><p> MessageBox(NULL,TEXT("文件打開錯(cuò)誤!"),TEXT("記事本"),MB_OK);</p><p><b> }</b></p><p> TCHAR line[256];</p><p>
38、TCHAR end[10000];</p><p> memset(line,0,256);</p><p> memset(end,0,256);</p><p> while(!feof(fp))</p><p><b> {</b></p><p> fgets(line,size
39、of(line),fp);</p><p> lstrcat(end,line);</p><p> int w=strlen(end);</p><p> end[w-1]='\0';</p><p> lstrcat(end,"\r\n");</p><p><b&
40、gt; }</b></p><p> SetDlgItemText(hwnd,IDC_RICHEDIT1,end);</p><p> fclose(fp); //關(guān)閉文件</p><p><b> }</b></p><p><b> break;</b></p&
41、gt;<p><b> }</b></p><p><b> break;</b></p><p> 3、文件保存的實(shí)現(xiàn):</p><p> case ID_MENUITEMSAVE: //文本的保存</p><p><b> {</b>
42、</p><p> OPENFILENAME ofnb;</p><p> char bcFile[MAX_PATH];</p><p> ZeroMemory(&ofnb,sizeof(ofnb));</p><p> ofnb.lStructSize = sizeof(ofnb);</p><p>
43、 ofnb.lpstrFile = bcFile;</p><p> ofnb.lpstrFile[0] = TEXT('\0');</p><p> ofnb.nMaxFile = sizeof(bcFile);</p><p> ofnb.lpstrFilter = TEXT("ALL\0*.*\0Text\0*.txt\0&q
44、uot;);</p><p> ofnb.nFilterIndex = 1;</p><p> ofnb.lpstrFileTitle = NULL;</p><p> ofnb.nMaxFileTitle = 0;</p><p> ofnb.lpstrInitialDir = NULL;</p><p>
45、 ofnb.hwndOwner = hwnd;</p><p> ofnb.Flags = OFN_EXPLORER |OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST|OFN_OVERWRITEPROMPT;</p><p> if (GetSaveFileName(&ofnb))</p><p><b> {&l
46、t;/b></p><p> FILE * fp = fopen (".txt","w"); //保存所有文件都為txt格式</p><p> TCHAR baoc [100000]; //保存的最大容量為100000</p><p> GetDlgItemText(hwnd,IDC_RICHEDIT1,
47、baoc,sizeof(baoc));</p><p> fputs(baoc,fp);</p><p> fclose(fp);</p><p><b> }</b></p><p><b> }</b></p><p><b> break;</
48、b></p><p> 退出文本編輯器的實(shí)現(xiàn):</p><p> int ret=MessageBox(NULL,TEXT("是否把更改保存到新建的文本文檔!!!"),TEXT("溫馨提示"),MB_YESNO | MB_ICONQUESTION);</p><p> if(ret==IDYES)</p>
49、;<p><b> {</b></p><p> OPENFILENAME ofn;</p><p> char szFile[MAX_PATH];</p><p> ZeroMemory(&ofn,sizeof(ofn));</p><p> ofn.lStructSize = size
50、of(ofn);</p><p> ofn.lpstrFile = szFile;</p><p> ofn.lpstrFile[0] = TEXT('\0');</p><p> ofn.nMaxFile = sizeof(szFile);</p><p> ofn.lpstrFilter = TEXT("
51、ALL\0*.*\0Text\0*.TXT\0C++\0*.cpp\0");</p><p> ofn.nFilterIndex = 1;</p><p> ofn.lpstrFileTitle = NULL;</p><p> ofn.nMaxFileTitle = 0;</p><p> ofn.lpstrInitial
52、Dir = NULL;</p><p> ofn.hwndOwner = hwnd;</p><p> ofn.Flags = OFN_EXPLORER |OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST;</p><p> ofn.lpstrTitle=TEXT("保存");</p><p&g
53、t; if (GetSaveFileName(&ofn)) </p><p><b> {</b></p><p><b> FILE *fp;</b></p><p> fp=fopen(szFile,"w");</p><p> if(fp==NULL)&l
54、t;/p><p><b> {</b></p><p> MessageBox(NULL,TEXT("文件無法保存"),TEXT("嗚嗚"),MB_OK);</p><p><b> }</b></p><p> TCHAR str[10000];<
55、/p><p> TCHAR end[10000];</p><p> memset(end,0,10000);</p><p> GetDlgItemText(hwnd,IDC_EDIT1,str,sizeof(str));</p><p> fputs(str,fp);</p><p> fclose(fp);
56、</p><p><b> }</b></p><p> MessageBox(NULL,TEXT("文件保存成功!放心關(guān)閉!!!"),TEXT("嘻嘻"),MB_OK);</p><p><b> }</b></p><p> EndDialog(h
57、wnd, 0);</p><p><b> 〔2〕、編輯操作:</b></p><p><b> 1、剪切的實(shí)現(xiàn):</b></p><p> case ID_MENUITEMCUT: //剪切</p><p> {SendDlgItemMessage(hwnd,IDC_RICHEDI
58、T1,WM_CUT,0,0);</p><p> //傳遞對(duì)話框中的內(nèi)容首先獲取RichEdit中的內(nèi)容,WM_CUT,傳遞要進(jìn)行操作的內(nèi)容,0,0為兩個(gè)WPARAM和LPARAM是約定的消息參數(shù)類型。</p><p><b> break;</b></p><p><b> }</b></p><
59、;p><b> 2、復(fù)制的實(shí)現(xiàn):</b></p><p> case ID_MENUITEMCOPY: //復(fù)制</p><p> {SendDlgItemMessage(hwnd,IDC_RICHEDIT1,WM_COPY,0,0);</p><p> //傳遞對(duì)話框中的內(nèi)容首先獲取RichEdit中的內(nèi)容,WM_CO
60、PY,,傳遞要進(jìn)行操作的內(nèi)容,0,0為兩個(gè)WPARAM和LPARAM是約定的消息參數(shù)類型。</p><p><b> break;</b></p><p><b> }</b></p><p><b> 3、粘貼的實(shí)現(xiàn):</b></p><p> case ID_MEN
61、UITEMPASTE: //粘貼</p><p> { SendDlgItemMessage(hwnd,IDC_RICHEDIT1,WM_PASTE,0,0);</p><p><b> break;</b></p><p><b> }</b></p><p><b>
62、 4、清除的實(shí)現(xiàn):</b></p><p> case ID_MENUITEMEMPTY: //清除</p><p><b> {</b></p><p> SetDlgItemText(hwnd,IDC_RICHEDIT1,"");</p><p><b> br
63、eak;</b></p><p><b> }</b></p><p><b> 5、撤銷的實(shí)現(xiàn):</b></p><p> case ID_MENUITEMUNDO: //“撤銷”菜單</p><p><b> {</b></p>
64、<p> SendDlgItemMessage(hwnd,IDC_RICHEDIT1, EM_UNDO, 0, 0);</p><p><b> break;</b></p><p><b> }</b></p><p><b> 6、刪除的實(shí)現(xiàn):</b></p>
65、<p> case ID_MENUITEMDELETE: //刪除</p><p><b> {</b></p><p> SendMessage(GetDlgItem(hwnd, IDC_RICHEDIT1), WM_CLEAR, 0, 0);</p><p><b> }</b></p&
66、gt;<p><b> break;</b></p><p><b> 7、全選的實(shí)現(xiàn):</b></p><p> case ID_MENUITEMSELECTALL: //全選</p><p><b> {</b></p><p> SendMes
67、sage(GetDlgItem(hwnd, IDC_RICHEDIT1), EM_SETSEL, 0, -1);</p><p><b> }</b></p><p><b> break;</b></p><p> 8、系統(tǒng)時(shí)間的實(shí)現(xiàn):</p><p> VOID CALLBACK MyT
68、imerFun(HWND hwnd, UINT message, UINT iTimerID, DWORD dwTime)</p><p><b> { </b></p><p> SYSTEMTIME strLocal; //當(dāng)前時(shí)間</p><p> GetLocalTime(&strLocal);</p>
69、<p> TCHAR str[256];</p><p> wsprintf(str,"%04d-%02d-%02d %02d:%02d:%02d",strLocal.wYear,strLocal.wMonth,</p><p> strLocal.wDay,strLocal.wHour,strLocal.wMinute,strLocal.wSeco
70、nd);</p><p> SetDlgItemText(hwnd,IDC_EDIT2,str);</p><p><b> }</b></p><p> 9、查找功能的實(shí)現(xiàn):</p><p> int count=0;</p><p> int Line_count=1;</p&
71、gt;<p> int Row_count=1;</p><p> int num=0;</p><p> int flag=0;</p><p> TCHAR str1[256];</p><p> TCHAR temp1[5000];</p><p> TCHAR temp2[5000];
72、</p><p> memset(temp1,0,5000);</p><p> memset(temp2,0,5000);</p><p> memset(str1,0,256);</p><p> GetDlgItemText(hwnd,IDC_EDIT_FINDWORD,str1,sizeof(str1));</p>
73、<p> if(strlen(str1)==0)</p><p><b> {</b></p><p> MessageBox(NULL,TEXT("查找的內(nèi)容為空,請(qǐng)輸入內(nèi)容后再查找!!!"),TEXT("嗚嗚"),MB_OK);</p><p><b> }</b
74、></p><p><b> else</b></p><p><b> {</b></p><p><b> int i=0;</b></p><p><b> int j=0;</b></p><p> whil
75、e(str2[i]!='\0' )</p><p><b> {</b></p><p> if((str2[i]=='\n') || (Row_count==63))</p><p><b> {</b></p><p> Line_count++;<
76、/p><p> Row_count=0;</p><p><b> }</b></p><p> if(str2[i]==str1[j])</p><p> { </p><p><b> i++;</b></p><p>
77、;<b> j++;</b></p><p> Row_count++;</p><p> if(str1[j]=='\0')</p><p><b> {</b></p><p><b> j=0;</b></p><p>&
78、lt;b> count++;</b></p><p> wsprintf(temp2,"<%i>你要尋找的內(nèi)容在第:%i 行,第:%i 列至第:%i 列!!!",count,Line_count,(Row_count-strlen(str1)),(Row_count-1));</p><p> strcat(temp1,temp2);
79、</p><p> strcat(temp1,"\r\n"); </p><p><b> flag=1;</b></p><p><b> }</b></p><p><b> }</b></p><p><b>
80、 else</b></p><p><b> {</b></p><p><b> i=i-j+1;</b></p><p><b> j=0;</b></p><p> Row_count++; </p><p><b&
81、gt; }</b></p><p> if(str2[i]=='\0' && flag==1)</p><p><b> {</b></p><p> SetDlgItemText(hwnd,IDC_EDIT2,temp1);</p><p> MessageBox(
82、NULL,temp1,TEXT("嘿嘿"),MB_OK);</p><p><b> }</b></p><p> if(str2[i]=='\0' && flag==0)</p><p><b> { </b></p><p> Mess
83、ageBox(NULL,TEXT("沒有你想要找的內(nèi)容,請(qǐng)重新輸入查找的內(nèi)容"),TEXT("嗚嗚"),MB_OK);</p><p><b> break;</b></p><p><b> }</b></p><p><b> } </b><
84、/p><p><b> }</b></p><p><b> } </b></p><p><b> break;</b></p><p> 通過簡(jiǎn)單的字符串比配算法實(shí)現(xiàn)其功能。</p><p> 9、替換功能的實(shí)現(xiàn):</p><
85、;p> TCHAR *change::D_change(TCHAR S[], TCHAR T1[] ,TCHAR T2[]) //替換功能的主算法</p><p><b> {</b></p><p><b> int i=0;</b></p><p><b> int j=0;</b>
86、;</p><p><b> int k=0;</b></p><p><b> int l=0;</b></p><p> TCHAR *S1;</p><p> while((S[i]!='\0'))</p><p><b> {<
87、;/b></p><p> if(S[i]==T1[j])</p><p><b> {</b></p><p><b> i++;</b></p><p><b> j++;</b></p><p><b> count1=i
88、;</b></p><p><b> }</b></p><p><b> else</b></p><p><b> {</b></p><p><b> i=i-j+1;</b></p><p><b&
89、gt; j=0;</b></p><p><b> count1=i;</b></p><p><b> }</b></p><p> if(T1[j]=='\0')</p><p><b> {</b></p><p&
90、gt;<b> i=i-j;</b></p><p> if(strlen(T1)==strlen(T2))</p><p><b> {</b></p><p> int num1=strlen(T1);</p><p> for(k=i;k<i+num1;k++)</p&g
91、t;<p><b> {</b></p><p> S[k]=T2[l];</p><p><b> l++;</b></p><p><b> }</b></p><p><b> j=0;</b></p><
92、p><b> l=0;</b></p><p><b> }</b></p><p> else if(strlen(T1)>strlen(T2))</p><p><b> {</b></p><p> int num2=strlen(T1)-strle
93、n(T2);</p><p> int lengthT2=strlen(T2);</p><p> for(k=i;k<strlen(S)-num2;k++)</p><p><b> {</b></p><p> S[k]=S[k+num2];</p><p><b>
94、 }</b></p><p> for(k=(strlen(S)-num2);k<=strlen(S);k++)</p><p><b> {</b></p><p> S[k]='\0';</p><p><b> } </b></p>&l
95、t;p> for(k=i;k<(i+lengthT2);k++)</p><p><b> {</b></p><p> S[k]=T2[l];</p><p><b> l++;</b></p><p><b> }</b></p><
96、;p><b> j=0;</b></p><p><b> l=0;</b></p><p><b> }</b></p><p> else if(strlen(T1)<strlen(T2))</p><p><b> {</b>&
97、lt;/p><p> int num3=strlen(T2)-strlen(T1);</p><p> S1=new TCHAR[strlen(S)+num3];</p><p> for(int k=0;k<i;k++)</p><p><b> {</b></p><p> S1[
98、k]=S[k];</p><p><b> }</b></p><p> for(int k2=i;k2<strlen(T2)+i;k2++)</p><p><b> {</b></p><p> S1[k2]=T2[k2-i];</p><p><b&
99、gt; }</b></p><p> for(int k3=i+strlen(T1);k3<strlen(S);k3++)</p><p><b> {</b></p><p> S1[k3+num3]=S[k3];</p><p><b> }</b></p>
100、;<p> S1[k3+num3]='\0';</p><p> if(S[i]=='\0')</p><p><b> {</b></p><p> return S1;</p><p><b> }</b></p><p
101、><b> else</b></p><p><b> {</b></p><p> strcpy(S,S1);</p><p><b> j=0;</b></p><p><b> }</b></p><p>&l
102、t;b> }</b></p><p><b> }</b></p><p><b> }</b></p><p><b> return S;</b></p><p><b> }</b></p><p>
103、; 也通過字符算的比配,一一找到后,一一替換,最后返回替換后的文本內(nèi)容;</p><p> 9、統(tǒng)計(jì)功能的實(shí)現(xiàn):</p><p> void Total_OnCommand(HWND hwnd, int id, HWND hwndCtl, UINT codeNotify)</p><p><b> {</b></p>&
104、lt;p> int Line_count=1;</p><p> int Row_count=0;</p><p> int Total_count=0;</p><p> int English_count=0;</p><p> int math_count=0;</p><p> int oth
105、er_count=0;</p><p> int space_count=0;</p><p> int punct_count=0;</p><p> TCHAR temp1[256];</p><p> TCHAR temp2[256];</p><p> memset(temp1,0,256);<
106、/p><p> memset(temp2,0,256);</p><p><b> int i=0;</b></p><p> while(total2[i]!='\0')</p><p><b> {</b></p><p> if((total2[i
107、]!=' ') && (total2[i]!='\r') && (total2[i]!='\n'))</p><p><b> {</b></p><p> Total_count++;</p><p><b> }</b></p&
108、gt;<p> if((total2[i]>='a' && total2[i]<='z') || (total2[i]>='A' && total2[i]<='Z'))</p><p><b> {</b></p><p> En
109、glish_count++;</p><p><b> }</b></p><p> if(total2[i]>='0' && total2[i]<='9')</p><p><b> {</b></p><p> math_cou
110、nt++;</p><p><b> }</b></p><p> if(total2[i]==33 || total2[i]==34 || total2[i]==39 || total2[i]==44 || total2[i]==46 || total2[i]==58 || total2[i]==59 || total2[i]==63)</p>
111、<p><b> {</b></p><p> punct_count++;</p><p><b> }</b></p><p> if(total2[i]==' ')</p><p><b> {</b></p><p
112、> space_count++;</p><p><b> }</b></p><p> if((total2[i]=='\n') || (Row_count==62))</p><p><b> {</b></p><p> Line_count++;</p&
113、gt;<p> Row_count=0;</p><p><b> }</b></p><p><b> else</b></p><p><b> {</b></p><p> Row_count++; </p><p>&
114、lt;b> }</b></p><p><b> i++;</b></p><p><b> }</b></p><p> other_count=Total_count-English_count-math_count-punct_count;</p><p> wsp
115、rintf(temp2,"<1>文本的行數(shù)為:%i !",Line_count-1);</p><p> strcat(temp1,temp2);</p><p> strcat(temp1,"\r\n");</p><p> memset(temp2,0,256);</p><p>
116、 wsprintf(temp2,"<2>文本的總字符數(shù)為:%i !",Total_count);</p><p> strcat(temp1,temp2);</p><p> strcat(temp1,"\r\n");</p><p> memset(temp2,0,256);</p><
117、;p> wsprintf(temp2,"<3>文本的英文字符數(shù)為:%i !",English_count);</p><p> strcat(temp1,temp2);</p><p> strcat(temp1,"\r\n");</p><p> memset(temp2,0,256);</p
118、><p> wsprintf(temp2,"<4>文本的數(shù)字字符數(shù)為:%i !",math_count);</p><p> strcat(temp1,temp2);</p><p> strcat(temp1,"\r\n");</p><p> memset(temp2,0,256);
119、</p><p> wsprintf(temp2,"<5>文本的空格數(shù)為:%i !",space_count);</p><p> strcat(temp1,temp2);</p><p> strcat(temp1,"\r\n");</p><p> memset(temp2,0,
120、256);</p><p> wsprintf(temp2,"<6>文本的標(biāo)點(diǎn)符號(hào)數(shù)為:%i !",punct_count);</p><p> strcat(temp1,temp2);</p><p> strcat(temp1,"\r\n");</p><p> memset(t
121、emp2,0,256);</p><p> wsprintf(temp2,"<7>文本的其它字符數(shù)為:%i !",other_count);</p><p> strcat(temp1,temp2);</p><p> strcat(temp1,"\r\n");</p><p> m
122、emset(temp2,0,256);</p><p> SetDlgItemText(hwnd,IDC_EDIT1,temp1);</p><p><b> }</b></p><p> 通過傳參,把文本信息傳到副對(duì)話框中。然后對(duì)文本進(jìn)行各項(xiàng)簡(jiǎn)單的統(tǒng)計(jì)</p><p><b> 〔3〕、工具操作:&l
123、t;/b></p><p><b> 北京音樂的實(shí)現(xiàn):</b></p><p> case ID_MENU_MUSIC:</p><p><b> {</b></p><p> TCHAR shortPath[MAX_PATH];</p><p> GetSh
124、ortPathName("C:\\Documents and Settings\\user\\桌面\\edit\\鄧紫棋 - 寂寞星球的玫瑰.mp3",shortPath,sizeof(shortPath)); //獲取音樂的途徑</p><p> TCHAR cmd[MAX_PATH+10];</p><p> wsprintf(cmd,"play %
125、s",shortPath);</p><p> mciSendString(cmd," ",0,NULL);</p><p> int ret = MessageBox(NULL,TEXT("你當(dāng)前正在享受音樂!!!是否要退出"),TEXT("嘻嘻"),MB_YESNO | MB_ICONQUESTION);<
126、/p><p> if(ret==IDYES)</p><p><b> {</b></p><p> MessageBox(NULL,TEXT("還好聽吧!歡迎再欣賞!再見!!!"),TEXT("嘿嘿"),MB_OK);</p><p> mciSendString("
127、;CLOSE cmd"," ",0,NULL);</p><p><b> break;</b></p><p><b> }</b></p><p><b> else</b></p><p><b> {</b>&
128、lt;/p><p><b> break;</b></p><p><b> }</b></p><p><b> break;</b></p><p><b> }</b></p><p> 主要是通過mciSendStri
129、ng()API函數(shù)的使用。</p><p><b> 〔4〕、關(guān)于操作:</b></p><p> 1、關(guān)于對(duì)話框的彈出實(shí)現(xiàn):</p><p> case ID_MENU_ABOUT:</p><p><b> {</b></p><p> HINSTANCE hI
130、nstance=(HINSTANCE)GetWindowLong(hwnd,GWL_HINSTANCE);</p><p> DialogBox(hInstance, MAKEINTRESOURCE(IDD_ABOUT), NULL, Main_Proc);</p><p><b> break;</b></p><p><b>
131、 }</b></p><p> 用DialogBox()函數(shù)實(shí)現(xiàn)對(duì)話框的彈出。</p><p><b> 2、訪問百度實(shí)現(xiàn):</b></p><p> case IDM_BAIDU: //訪問百度網(wǎng)</p><p><b> {</b></p><p
132、> ShellExecute(hwnd,TEXT("open"),TEXT("www.baidu.com"),NULL,NULL,SW_SHOWNORMAL);</p><p><b> break;</b></p><p><b> }</b></p><p> 3、
133、訪問114實(shí)現(xiàn):</p><p> case IDM_GOOGLE:</p><p><b> {</b></p><p> ShellExecute(hwnd,TEXT("open"),TEXT("www.114la.com"),NULL,NULL,SW_SHOWNORMAL);</p>
134、;<p><b> break;</b></p><p><b> }</b></p><p> 都是ShellExecute()函數(shù)的使用。</p><p><b> 五、編碼與調(diào)試分析</b></p><p> 1.確定好語言后,設(shè)計(jì)主界面,參考wi
135、ndows自帶的記事本開始設(shè)計(jì),需要實(shí)現(xiàn)的各個(gè)功能現(xiàn)在主界面的下拉菜單中顯示,還有時(shí)間的顯示框的設(shè)計(jì),關(guān)于對(duì)話框的設(shè)計(jì),替換對(duì)話框的設(shè)計(jì),查找對(duì)話框的設(shè)計(jì),以及統(tǒng)計(jì)對(duì)話框的設(shè)計(jì)。接下來開始一一實(shí)現(xiàn)其功能。</p><p> 2.編碼與調(diào)試過程中遇到的問題及解決辦法:</p><p> 【問題一】在打開文本文件時(shí)只能讀取一行。</p><p> 開始時(shí)用fget
136、s(line,sizeof(line),fp)讀取文件時(shí),只能讀取到一行,在文件沒結(jié)束的前提下,如果讀取下一行的話,顯示的時(shí)候下一行將會(huì)把上一行覆蓋掉了,最后一行為空了,結(jié)果什么也沒有顯示出來。后來查了一下資料,通過lstrcat(end,line); int w=strlen(end); end[w-1]='\0';lstrcat(end,"\r\n");把從文件中讀出來的文本先一起連起來,存在字符
137、數(shù)組中,然后再一起輸出。</p><p> 【問題二】在副對(duì)話框把參數(shù)回調(diào)到主對(duì)話框中時(shí)出現(xiàn)問題。</p><p> 如果在替換功能函數(shù)完成后如何將替換對(duì)話框中通過傳參改變后,存放在字符數(shù)組里的文本內(nèi)容傳到主對(duì)話框中,并將其顯示出來。后來通過回調(diào)函數(shù)返回指針,通過引用都沒能解決問題。最后通過調(diào)試發(fā)現(xiàn)了通過回調(diào)其實(shí)已經(jīng)把信息傳過來了,只是因?yàn)楫?dāng)要替換的字符小于替換字符的長(zhǎng)度時(shí),由于字符指
138、針和字符組數(shù)的互異性,出現(xiàn)了亂碼。結(jié)果通過動(dòng)態(tài)分配適當(dāng)?shù)膬?nèi)存才解決了問題</p><p> 【問題三】如何在對(duì)話框之間傳參的問題</p><p> 以前接觸到windows編程也不多,在對(duì)話框之前如果傳參,如結(jié)構(gòu)體,整型,字符型是遇到了問題,查了資料,最后在如鵬網(wǎng)上c語言也能看大事的的視屏上得知了原來是通過DialogBoxParam(hInstance, MAKEINTRESOURC
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 文本編輯器課程設(shè)計(jì)
- 簡(jiǎn)易文本編輯器課程設(shè)計(jì)報(bào)告
- vb課程設(shè)計(jì)報(bào)告----文本編輯器
- vb課程設(shè)計(jì)報(bào)告---文本編輯器
- java課程設(shè)計(jì)--文本編輯器
- java課程設(shè)計(jì)---文本編輯器
- java課程設(shè)計(jì)---文本編輯器
- vb課程設(shè)計(jì)文本編輯器
- java課程設(shè)計(jì)(文本編輯器)
- c語言課程設(shè)計(jì)--文本編輯器
- c_文本編輯器課程設(shè)計(jì)
- 文本編輯器_java課程設(shè)計(jì)實(shí)驗(yàn)報(bào)告
- visual_basic課程設(shè)計(jì)報(bào)告---文本編輯器
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)--文本編輯器
- 操作系統(tǒng)課程設(shè)計(jì)---文本編輯器
- 微機(jī)原理課程設(shè)計(jì)—簡(jiǎn)易文本編輯器
- java 課程設(shè)計(jì)報(bào)告---用 java 設(shè)計(jì)文本編輯器mytxt
- 文本編輯器
- java課程設(shè)計(jì)報(bào)告-- 文本編輯器的設(shè)計(jì)與實(shí)現(xiàn)
- c_編寫的文本編輯器課程設(shè)計(jì)
評(píng)論
0/150
提交評(píng)論