![fc程序開發(fā)報告_第1頁](http://file2.renrendoc.com/fileroot_temp3/2021-11/20/a3871c53-bbc0-4a7f-a46d-6f8603228aec/a3871c53-bbc0-4a7f-a46d-6f8603228aec1.gif)
![fc程序開發(fā)報告_第2頁](http://file2.renrendoc.com/fileroot_temp3/2021-11/20/a3871c53-bbc0-4a7f-a46d-6f8603228aec/a3871c53-bbc0-4a7f-a46d-6f8603228aec2.gif)
![fc程序開發(fā)報告_第3頁](http://file2.renrendoc.com/fileroot_temp3/2021-11/20/a3871c53-bbc0-4a7f-a46d-6f8603228aec/a3871c53-bbc0-4a7f-a46d-6f8603228aec3.gif)
![fc程序開發(fā)報告_第4頁](http://file2.renrendoc.com/fileroot_temp3/2021-11/20/a3871c53-bbc0-4a7f-a46d-6f8603228aec/a3871c53-bbc0-4a7f-a46d-6f8603228aec4.gif)
![fc程序開發(fā)報告_第5頁](http://file2.renrendoc.com/fileroot_temp3/2021-11/20/a3871c53-bbc0-4a7f-a46d-6f8603228aec/a3871c53-bbc0-4a7f-a46d-6f8603228aec5.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
1、 Windows程序開發(fā)實踐報告專業(yè): 學(xué)生姓名: 學(xué) 號: 指導(dǎo)教師: 完成時間: 目錄任務(wù)一11. 實踐目的及任務(wù)描述12. 對消息循環(huán)機制的理解13. 學(xué)到了哪些知識1任務(wù)二21. 任務(wù)描述22. MFC消息映射的方法23. MFC的優(yōu)點24. 自己的計算器程序設(shè)計35. 開發(fā)過程中遇到了哪些困難,如何解決36. 關(guān)鍵代碼介紹37. 代碼運行狀況58. 收獲5任務(wù)三61. 任務(wù)描述62. 自己程序的特點及關(guān)鍵代碼簡紹61) 文本字符串的管理方式62) 改變文本時的窗口重繪63) 編輯時自動換行的處理74) 編輯時退格的處理83. 程序使用及功能介紹84. 實踐過程中遇到了那些問題,解決方
2、式,有那些收獲10任務(wù)四101. 任務(wù)描述102. 模塊設(shè)計及封裝(給出靜態(tài)關(guān)系圖)113. 設(shè)計的優(yōu)、缺點114. 本人程序風(fēng)格簡紹115. 運行情況及程序使用方法116. 實踐過程中遇到哪些困難,解決方式,有什么啟示14總結(jié)151. 收獲152. 存在的不足153. 對自己的要求15任務(wù)一1. 實踐目的及任務(wù)描述 目的:充分理解Windows的消息循環(huán)機制,了解Windows的API函數(shù)族的分類及大致功能,并在此基礎(chǔ)上了解基本W(wǎng)indows API方式開發(fā)的窗口程序的基本過程。了解并掌握如下事實:任何框架開發(fā)環(huán)境歸根結(jié)底都是對Windows API函數(shù)的封裝與調(diào)用!在利用一個框架環(huán)境開發(fā)W
3、indows程序的過程中,應(yīng)該明白所使用的框架模塊調(diào)用了Windows API中的那些功能函數(shù)。任務(wù)描述:用visual C+開發(fā)一個Win32窗口程序,并實現(xiàn)如下功能:l 實現(xiàn)菜單功能;l 點擊某兩個菜單可在主窗口中顯示或清除文字(文字內(nèi)容不做要求);l 點擊某個菜單可彈出一個自定義的對話框(對話框中的元素不做要求),單擊對話框中的“確定”或“取消”按鈕,可結(jié)束對話框。2. 對消息循環(huán)機制的理解Windows是一個多進程的圖形窗口操作系統(tǒng),Windows應(yīng)用程序與DOS應(yīng)用程序有很大的區(qū)別。DOS應(yīng)用程序采用順序執(zhí)行過程,而Windows是一個基于事件的消息(Message)驅(qū)動系統(tǒng)。Win
4、dows應(yīng)用程序是按照“事件消息處理”非順序的機制運行。當(dāng)有某個事件(如單擊鼠標(biāo)、鍵盤輸入和執(zhí)行菜單命令等)發(fā)生時,Windows會根據(jù)具體的事件產(chǎn)生對應(yīng)的消息,并發(fā)送到指定應(yīng)用程序的消息隊列;應(yīng)用程序從消息隊列中取出消息,并根據(jù)不同的消息進行不同的處理。3. 學(xué)到了哪些知識l 了解了Windows應(yīng)用程序的運行機制,理解了Windows的消息循環(huán)機制;l 了解了基本W(wǎng)indows API方式開發(fā)的窗口程序的基本過程;l 了解了Windows的程序框架,如_tWinMain函數(shù)是程序入口函數(shù),相當(dāng)于c/c+中的main函數(shù),在win32環(huán)境下為WinMain函數(shù);掌握了一些常用API函數(shù),例如
5、:CheckMenuItem,DrawText,InvalidateRect,GetDlgItemText等。任務(wù)二1. 任務(wù)描述用MFC開發(fā)一個計算器程序:l 對話框類型的程序;l 能夠?qū)崿F(xiàn)浮點數(shù)值的加減乘除運算;l 界面由一個編輯框和若干按鈕組成,編輯框負責(zé)表達按鈕輸入及計算的結(jié)果,按鈕負責(zé)輸入數(shù)字、加減乘除以及等于等動作的輸入;l 程序的核心功能由標(biāo)準(zhǔn)C+方式實現(xiàn),并通過MFC框架代碼調(diào)用其功能;l 程序中的變量及函數(shù)要規(guī)范命名,并加以適當(dāng)?shù)淖⑨尅?. MFC消息映射的方法MFC消息映射機制包括一組消息映射宏。一條消息映射宏把一個Windows消息和其消息處理函數(shù)聯(lián)結(jié)起來。在類的實現(xiàn)源文
6、件中用BEGIN_MESSAGE_MAP()和END_MESSAGE_MAP()宏來定義消息映射。在類定義的結(jié)尾用DECLARE_MESSAGE_MAP()宏來聲明使用消息映射。 一個基本消息映射結(jié)構(gòu)如下所示:BEGIN_MESSAGE_MAP(theclass, baseclass)/AFX_MSG_MAP(theclass)ON_ . . . . . . / MFC預(yù)定義的消息映射宏ON_MESSAGE(message , memberFxn) / 用戶自定義的消息映射宏. . . . . . /AFX_MSG_MAPEND_MESSAGE_MAP() MFC約定:全局函數(shù)以“Afx”為前
7、綴,全局變量以“afx”為前綴。例如,通過調(diào)用:AfxMessageBox("Some Message");可直接在屏幕上彈出消息對話框。 MFC通過巧妙的宏定義把消息調(diào)用的過程封裝起來,使用戶能夠通過ClassWizard方便的使用和處理Windowsde各種消息。3. MFC的優(yōu)點MFC是微軟為了實現(xiàn)在windows平臺下應(yīng)用程序的快速開發(fā)而開發(fā)的針對windows平臺的功能強大類庫。MFC封裝了Win32下的API而形成各種MFC類以實現(xiàn)其快速的開發(fā)。MFC的優(yōu)點很多,第一,MFC封裝了以前各種底層API,提高了編程效率,簡化了編程的過程,是編程人員可以脫離非常底層的
8、編程工作;第二,使用可以進行面向?qū)ο缶幊痰念惖木幊檀媪艘郧癢in32下使用的面向過程的編程的函數(shù)的編程,增加了程序的可維護性;第三,MFC在建立類庫的時候?qū)︻愔泻瘮?shù)的命名與之前Win32體系下的函數(shù)的命名相似,形參表也相似,使用方式也相似,可以比較快的由Win32體系下轉(zhuǎn)換到MFC體系下的編程;另外,雖然是對Win32函數(shù)的高度封裝,但是仍然具有較高的效率,與Win32程序相比效率相差不大。4. 自己的計算器程序設(shè)計 對于這次計算器的設(shè)計,我覺得主要的難點不是算法的問題,應(yīng)為加減乘除四則運算對于我們來說確實不在話下。關(guān)鍵的問題是數(shù)據(jù)轉(zhuǎn)化,和對于計算器使用處理發(fā)面的一些細節(jié)設(shè)計。對于界面設(shè)計,
9、用MFC的對話框,在對話框中添加按鈕和文本框控件,通過添加按鈕點擊事件將數(shù)據(jù)添加進去。這樣一來,就面臨這數(shù)據(jù)轉(zhuǎn)化問題,所以我將添加進來的數(shù)據(jù)用CString存儲,在用 CStoD函數(shù)轉(zhuǎn)化為double類型,再傳入Operate類(封裝算法)進行計算,并返回double型計算結(jié)果,最后將計算結(jié)果轉(zhuǎn)換為CString類型輸出到對話框文本框中,提供給用戶使用。5. 開發(fā)過程中遇到了哪些困難,如何解決 在本次的開發(fā)過程中,遇到了一些困難,多數(shù)是事件處理上的問題:(1)用戶連續(xù)幾次點擊運算符號按鈕(如“+”),文本框里已有的數(shù)字就會消失。解決方法是在符號按鈕的處理事件里每執(zhí)行完運算將第二個數(shù)據(jù)變?yōu)榭?,?/p>
10、在判斷是否可以進行運算的函數(shù)JudgeOperat里數(shù)據(jù)為空就不在執(zhí)行,這樣就解決了這個問題。(2)輸入小數(shù)點“.”時,可能小數(shù)點之前沒有數(shù)字或者是已經(jīng)有小數(shù)點存在了,此時就不能在添加小數(shù)點。解決方法是在響應(yīng)小數(shù)點事件的控件里加入判斷即可。(3)連續(xù)計算的問題,就是可以連著做加減乘除運算,在一次運算完返回的數(shù)據(jù)上直接進行第二次運算。解決方法是在處理完后返回值存入第一個數(shù)據(jù)中,這樣再輸入第二個數(shù)據(jù)就行。6. 關(guān)鍵代碼介紹 /數(shù)據(jù)轉(zhuǎn)化函數(shù):void CTask2Dlg:CStoD(CString str1,CString str2)this->num1=atof(str1);this->
11、;num2=atof(str2);/判斷數(shù)據(jù),進行處理void CTask2Dlg:JudgeOperat()if(this->Operations!=0&&(Msgnumber1!=""|Msgnumber2!="")if(this->Operations=1)CStoD(Msgnumber1,Msgnumber2);num1=Myoperate.Add(num1,num2);Msgnumber1.Format("%g",num1);else if(this->Operations=2)CStoD(
12、Msgnumber1,Msgnumber2);num1=Myoperate.Clear(num1,num2);Msgnumber1.Format("%g",num1);else if(this->Operations=3)if(Msgnumber1!="")CStoD(Msgnumber1,Msgnumber2);num1=Myoperate.Mul(num1,num2);Msgnumber1.Format("%g",num1); elseMsgnumber1=Msgnumber2;else if(this->Operat
13、ions=4)if(num1!=0)if(Msgnumber1!="")CStoD(Msgnumber1,Msgnumber2);num1=Myoperate.Div(num1,num2);Msgnumber1.Format("%g",num1);elseMsgnumber1=Msgnumber2;elseMsgnumber1="除數(shù)不能為零!"SetDlgItemText(IDC_MSG,Msgnumber1);7. 代碼運行狀況程序運行穩(wěn)定,實現(xiàn)了預(yù)定的所有功能。計算結(jié)果準(zhǔn)確,所有邏輯預(yù)算均可實現(xiàn)。8. 收獲l 熟悉了一些API函
14、數(shù),如:GetDlgItemText和一些字符串操作函數(shù);l 熟悉了界面設(shè)計的方法,了解了許多控件的使用方法;l 了解了如何添加并編寫鍵盤響應(yīng)函數(shù)。任務(wù)三1. 任務(wù)描述用MFC開發(fā)一個單文檔文本查看程序:(1) 不能用MFC的CRichEditView或其它標(biāo)準(zhǔn)控件實現(xiàn),用Textout等API實現(xiàn)文本繪制功能;(2) 能夠打開、保存.txt格式的文本文件;(3) 能夠控制文本的大小、顏色、字體等,并實現(xiàn)相應(yīng)的控制界面(對話框方式),設(shè)置好后,當(dāng)前顯示的文本均按相應(yīng)屬性顯示。(4) (高階內(nèi)容)實現(xiàn)文本的編輯、查找、替換功能。2. 自己程序的特點及關(guān)鍵代碼簡紹1) 文本字符串的管理方式文本查看
15、器最重要的就是對字符串的處理與管理,所以我在這里的提一下自己文本查看器的字符串管理方式。使用 vector<CString> 類型來存儲字符串,每一行是一個CString。打開txt類型的文本文檔時,用getline方法每次讀取一行存儲到CString中,并push_back到vector中。用CString類型的 m_sTEXT 變量來存儲光標(biāo)所在行的字符串。這樣的存儲方式使得字符串存取方便,十分有利于管理,但缺點是只能編輯光標(biāo)所在行,不能實現(xiàn)任意一行的編輯。并且沒有實現(xiàn)文本隨窗口的改變而自動換行,這一點還有待自己進一步的研究與實現(xiàn)。2) 改變文本時的窗口重繪通過貼圖方式對窗口進
16、行重繪,編寫了一個myDrawTxt()函數(shù)將存儲的字符串一行行繪到bitmap上,再直接貼圖到窗口中。myDrawTxt()函數(shù)在OnDraw函數(shù)中調(diào)用。void CMyNotePadView:myDrawTxt()HideCaret();CClientDC dc(this);CRect rect;GetClientRect(&rect);CDC memDC;CBitmap memBit;memDC.CreateCompatibleDC(&dc);memBit.CreateCompatibleBitmap(&dc,rect.Width() , rect.Height(
17、) );memDC.SelectObject(&memBit);memDC.FillSolidRect(&rect,RGB(255,255,255);int index =0;TEXTMETRIC text;memDC.SelectObject(&m_font);memDC.SetTextColor(m_color);memDC.GetTextMetrics(&text);AddLine();this->m_nLine=this->m_sTEXT.GetLength();for(auto it = m_vFILE.begin(); it!= m_vF
18、ILE.end(); it+)memDC.TextOutA(0,index*text.tmHeight,*it);index+;dc.BitBlt(0,0,rect.Width(),rect.Height(),&memDC,0,0,SRCCOPY);POINT pt;pt.x = m_nLine * text.tmAveCharWidth;pt.y = m_nRow * text.tmHeight;CreateSolidCaret(text.tmAveCharWidth/8,text.tmHeight);SetCaretPos(pt);ShowCaret();3) 編輯時自動換行的處理
19、響應(yīng)OnChar函數(shù),當(dāng)鍵盤鍵入回車時,增加一行。而編輯時超出窗口范圍的時候,可以通過判斷窗口屏幕寬與當(dāng)前行字符串寬度自動換行。關(guān)節(jié)代碼為: if(rect.Width() <= dc.GetTextExtent(m_sTEXT + t).cx)m_nLine = 1;m_nRow +=1;AddLine();m_sTEXT = t;其中rect.Width()是窗口的寬度,dc.GetTextExtent(m_sTEXT + t).cx是當(dāng)前行字符串的寬度。4) 編輯時退格的處理 在文本編輯時,英文字符與漢語字符大小不同,一個漢字占兩個字節(jié),而一個英文字符占一個字節(jié),所以這樣在退格時就
20、會出現(xiàn)一些問題。當(dāng)刪除漢字是,要敲擊兩次回格鍵才能刪除一個漢字,而且到了行首時在敲擊回格鍵程序就會發(fā)生異常,并不能直接推到上一行。對于這些問題我做了一些處理,關(guān)鍵代碼為: case VK_BACK:clr = dc.SetTextColor(dc.GetBkColor();dc.TextOutA(0,m_nRow*text.tmHeight,m_sTEXT);if(m_nLine=0&&m_nRow=0)break;if(m_nLine=0&&m_nRow!=0)-m_nRow;this->clearLine();else if(m_sTEXTm_sTEX
21、T.GetLength()-1<0|m_sTEXTm_sTEXT.GetLength()-1>127)m_sTEXT= m_sTEXT.Left(m_sTEXT.GetLength()-2);m_nLine -=2;elsem_sTEXT= m_sTEXT.Left(m_sTEXT.GetLength()-1);m_nLine -=1;dc.SetTextColor(clr);break;3. 程序使用及功能介紹 (1)程序運行時的界面 (2)程序讀取文件后界面 (3)改變字體及顏色 (4)可以進行文本替換與查找 (5)可以實現(xiàn)文件的新建,保存和另存為4. 實踐過程中遇到了那些問題
22、,解決方式,有那些收獲遇到的困難和解決方式:(1) 如何判斷輸入的是漢字以及漢字的處理,解決方案:漢字使用兩個字節(jié)進行存儲,兩個字節(jié)的大小應(yīng)大于127,當(dāng)獲得輸入時,假如其數(shù)值的大小大于127則為組成漢字的字節(jié)。(2) 在界面重繪時,比如說改變字體,發(fā)現(xiàn)大小字體重疊了。解決方案:采用貼圖式,將改變后的文本重新貼到才窗口上。這樣就不出現(xiàn)重疊問題了。收獲:通過這次實踐,我掌握了許多MFC中API函數(shù),更加了解并掌握了MFC消息息處理機制,并且學(xué)會了自己建立消息映射。任務(wù)四1. 任務(wù)描述 用MFC開發(fā)一個用鼠標(biāo)在屏幕上繪圖的單文檔程序:1. 通過鼠標(biāo)左鍵的點擊在視圖中繪制不同的圖形,可繪制的圖形包括
23、折線、多邊形,并且折線的線寬、顏色以及線形都是可以改變的,多邊形的填充方式也可以定制;2. (高階內(nèi)容)繪制的圖形可以以保存為矢量(矢量格式自定義)文件,并且可以在程序中再次打開,矢量數(shù)據(jù)的線寬、線形、顏色以及填充模式都要保存在矢量數(shù)據(jù)文件中,重新打開的矢量數(shù)據(jù)文件應(yīng)該是可以再次編輯、修改的。2. 模塊設(shè)計及封裝(給出靜態(tài)關(guān)系圖) CPaintObject對各種繪圖圖形進行封裝,在CMyPaintBoardView類和CMyPaintBoardDoc類里生成對象。3. 設(shè)計的優(yōu)、缺點 在有了任務(wù)三的基礎(chǔ)后,在任務(wù)四的設(shè)計上就感覺靈巧了許多。 優(yōu)點:實現(xiàn)了基本的繪圖功能,在文件存儲上嘗試使用自己
24、自定的文件數(shù)據(jù)格式,有益于防止文件修改。 缺點:在功能上比較簡陋,只能實現(xiàn)簡單的繪圖工作,在窗口重繪上采用貼圖方式,雖然方便但程序運算量大,不方便大規(guī)模繪圖。4. 本人程序風(fēng)格簡紹為了方便各種繪圖工具的選擇上,我建了一個CPaintObject類。該類包括繪圖圖形(如 直線、橢圓、多邊形等)的基本屬性,即將每個圖形抽象為一個對象,對象包括圖形的類型(直線、矩形.)、線寬、線條顏色、填充顏色、位置點等。有了每個對象后,我用一個vector存儲所有圖形對象的指針。這樣的存儲方式非常方便存取數(shù)據(jù)。用一enum來存儲各種圖形,這樣在繪圖時方便了對象的選擇。5. 運行情況及程序使用方法(1)主界面(2) 菜單欄及工具欄 (3) 可以設(shè)置圖形的線寬,線條顏色及填充顏色(4) 繪出的效果圖(5)也可以把圖像保存成文件下次再打開修改。6. 實踐過程中遇到哪些困難,解決方式,有什么啟示l 在繪圖時,出現(xiàn)黑屏。比如我畫直線,左擊下去拖動,這是窗口工作部分變黑,直到鼠標(biāo)松開,窗口恢復(fù)正常。幾次調(diào)試后發(fā)現(xiàn)時貼圖有問題,繪圖將圖像放入虛擬DC所以窗口就變黑了。我在繪圖之前先將當(dāng)前的圖貼一次問題就解決了。l 存儲數(shù)據(jù)圖形對象時,剛開始存
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年中國當(dāng)歸行業(yè)發(fā)展趨勢預(yù)測及投資戰(zhàn)略咨詢報告
- 2025年高精度高速切紙機行業(yè)深度研究分析報告
- 會展運營合同范本
- 加盟合同范本格式
- 勞動合同范本 計時
- 包清工安全合同范本
- 化妝品代理項目合同范例
- 2025年度數(shù)據(jù)中心撤場及信息安全保障協(xié)議
- 2025年度消防設(shè)施設(shè)備銷售、安裝及售后服務(wù)合同
- 財產(chǎn)租賃合同范本
- 陜2018TJ 040建筑節(jié)能與結(jié)構(gòu)一體化 復(fù)合免拆保溫模板構(gòu)造圖集
- DZ/T 0430-2023 固體礦產(chǎn)資源儲量核實報告編寫規(guī)范(正式版)
- (高清版)WST 442-2024 臨床實驗室生物安全指南
- 歷史時間軸全
- 2019譯林版高中英語全七冊單詞總表
- 高速行業(yè)網(wǎng)絡(luò)安全與維護
- 2024年能源電力行業(yè)數(shù)字化轉(zhuǎn)型解決方案
- (2024年)房地產(chǎn)銷售人員心態(tài)培訓(xùn)
- 康復(fù)科院感年度工作計劃
- T-BJCC 1003-2024 首店、首發(fā)活動、首發(fā)中心界定標(biāo)準(zhǔn)
- 《海洋自然保護區(qū)》課件
評論
0/150
提交評論