第一篇:MFC個人心得
MFC個人心得
在四周時間里完成一個MFC的一個項目,個人覺得還是比較寬裕的,我們在第一周確立了項目的軟件功能和名稱,我們借鑒手機上RSS軟件的廣泛應(yīng)用,想要通過MFC編寫一個PC端的RSS應(yīng)用,用戶可以通過我們的軟件獲取到各大網(wǎng)站的新聞,科技精選,人文精選等等,總之,就是可以通過我們的軟件得到每天想要獲得資訊消息。
之后我們確定了各小組成員在整個團隊中的分工。想要完成這樣一個RSS軟件的開發(fā),思路還是比較明確的,首先要通過后臺獲取到各大資訊網(wǎng)站的網(wǎng)頁源代碼,再從這些源代碼中間解析出有用的信息,之后將這些信息傳遞給前臺,前臺通過一個友好的界面將信息有條有序的展現(xiàn)給用戶。我的主要工作就是開發(fā)后臺,通過解析HTML代碼獲取各類資訊。由于先前我在Java平臺下對于HTML解析的開發(fā)有一定的經(jīng)驗,所以我著手開始編寫程序是的第一件事就是搜索看是否有已經(jīng)寫好的解析HTML的C++類庫,經(jīng)過我兩天的搜索,我發(fā)現(xiàn)在C++環(huán)境下并沒有比較完好的HTML解析類庫,于是我暫時放棄了尋找現(xiàn)成的HTML解析類庫,通過MFC中的CSting類中的函數(shù)操作來自己編寫HTML解析類庫。我采用DOM型的方式解析HTML,通過兩天時間的編寫基本實現(xiàn)了HTML的解析功能并且獲取了大量網(wǎng)站的有用信息。由
于要求寫在參與MFC項目的心得體會,我就貼上具體的C++代碼了。在編寫程序的過程中,我還是覺得一個優(yōu)秀的程序員在于提升代碼的重用性與可維護性,在理解別人代碼的基礎(chǔ)上使用網(wǎng)上現(xiàn)有代碼是一個比較好的習慣,這樣既能夠了解其他人在編寫程序時的思路理解,開拓自己的編程理念,同時也大量節(jié)省了時間,時間的優(yōu)秀使用在編寫程序的過程中是極其重要的。
另外,在編寫MFC程序的過程中我也著實體驗到了MFC編寫程序的局限性。MFC雖然給開發(fā)者提供了一個現(xiàn)成的框架,著實便利的開發(fā)者的開發(fā)。但同樣也造成了一個巨大的問題,開發(fā)者很難開發(fā)出具有個人特色的軟件,想要重新改寫程序整體的外觀就比較困難,并且C++在編寫程序時需要開發(fā)者自己定義變量的空間開辟和回收,這點上沒有JAVA開發(fā)時來的方便,尤其是C++當中的指針機制,一不注意還是很容易造成程序錯誤的。
最后一點就是一個團隊在一個項目中的重要意義。如果這樣一個軟件完全由我一個人進行開發(fā),可能需要耗費大量時間,但是如果合理地分配給各個組員進行完成,便能取得事半功倍的效果,亦能聽取各方面的意見,是的程序更加的完善。
第二篇:Mfc個人心得體會
Mfc個人心得體會
06a13526
余思遠
時間過得很快,歷時一個月的短學期即將結(jié)束,我們小組的mfc課題也基本完成。雖然只有短短的一個月,但卻帶給我很多。在小組成員的共同努力下,基本解決了計劃中的一個個問題,要實現(xiàn)一個功能并不算復雜的計算器,也沒有想象中那么簡單。
Mfc涉及的概念很多,語法也與以前有些許不同,在c++基礎(chǔ)上新增的內(nèi)容也有許多。從開始編輯一個簡單的界面,通過這段時間的學習,終于感到掌握了些許了,但想更加熟練的使用,也必須付出更多的時間吧。我發(fā)現(xiàn)在編程過程中,并不能只想著眼前所負責的這一塊,許多對許多綜合多方面進行考慮,需要與自己隊友進行配合,作出合理的計劃和安排。
實踐是檢驗真理的唯一標準,這次mfc的實踐活動,讓我學習到了很多知識,彌補了很多漏洞。這個看似簡單對我們來說卻付出了很多時間和精力的程序,讓我體會到了mfc相比與單純的c++的優(yōu)越性。程序編譯過程中的有些困難雖然我們的能力范圍內(nèi)也無法解決,但是在網(wǎng)上資料的參考,讀懂他人資料、相關(guān)程序的基礎(chǔ)上,我們也完成了這個程序。相信這個經(jīng)歷能對以后的編程有很大的幫助。我也從此次課程設(shè)計中體會到了團隊合作的樂趣和力量。在一個團隊中揚長避短,發(fā)揮自己應(yīng)有的作用,能讓我們更加容易地去克服一個又一個難關(guān)。
第三篇:MFC編程實驗個人總結(jié)報告
MFC編程實驗總結(jié)報告
知識總結(jié)+個人心得
2011年暑期MFC編程實驗報告
/ 6
MFC編程實驗個人總結(jié)報告
一、MFC類、函數(shù)等知識小結(jié):
1、SetTimer(1, m_intLevel, NULL);在MFC程序中SetTimer被封裝在CWnd類中,調(diào)用就不用指定窗口句柄了于是SetTimer函數(shù)的原型變?yōu)椋?/p>
UINT SetTimer(UINT nIDEvent,UINT nElapse,void(CALLBACK EXPORT *lpfnTimer)(HWND,UINT ,YINT ,DWORD))
當使用SetTimer函數(shù)的時候,就會生成一個計時器。函數(shù)中nIDEvent指的是計時器的標識,也就是名字。nElapse指的是時間間隔,也就是每隔多長時間觸發(fā)一次事件。第三個參數(shù)是一個回調(diào)函數(shù),在這個函數(shù)里,放入你想要做的事情的代碼,你可以將它設(shè)定為NULL,也就是使用系統(tǒng)默認的回調(diào)函數(shù),系統(tǒng)默認認的是onTime函數(shù)。這個函數(shù)怎么生成的呢?你需要在需要計時器的類的生成onTime函數(shù):在ClassWizard里,選擇需要計時器的類,添加WM_TIME消息映射,就自動生成onTime函數(shù)了。然后在函數(shù)里添加代碼,讓代碼實現(xiàn)功能。每隔一段時間就會自動執(zhí)行一次。
例:
SetTimer(1,1000,NULL);
1:計時器的名稱;
1000:時間間隔,單位是毫秒;
NULL:使用onTime函數(shù)。
當不需要計時器的時候調(diào)用KillTimer(nIDEvent);
例如:KillTimer(1);
KillTimer(1);
2、typedef struct{};(1)struct{ int x;int y;}test1;好,定義了 結(jié)構(gòu) test1,test1.x 和 test1.y 可以在語句里用了。
(2)struct test {int x;int y;}test1;定義了結(jié)構(gòu) test1,test1.x 和 test1.y 可以在語句里用了。與(1)比,省寫 了 test
(3)typedef struct test
/ 6
{int x;int y;}text1,text2;
此處時說了這種結(jié)構(gòu)體(類型)別名 叫 text1 或叫 text2,而不是定義了結(jié)構(gòu)體變量.真正在語句里用,還要寫: text1 test1;//定義結(jié)構(gòu)體變量 然后好用 test1.x test1.y 或?qū)?text2 test1;//定義結(jié)構(gòu)體變量 然后好用 test1.x test1.y
3、Invalidate();//讓客戶區(qū)無效,即時重新繪制客戶區(qū)
void Invalidate(BOOL bErase = TRUE);
該函數(shù)的作用是使整個窗口客戶區(qū)無效。窗口的客戶區(qū)無效意味著需要重繪,例如,如果一個被其它窗口遮住的窗口變成了前臺窗口,那么原來被遮住的部分就是無效的,需要重繪。這時Windows會在應(yīng)用程序的消息隊列中放置WM_PAINT消息。MFC為窗口類提供了WM_PAINT的消息處理函數(shù)OnPaint,OnPaint負責重繪窗口。視圖類有一些例外,在視圖類的OnPaint函數(shù)中調(diào)用了OnDraw函數(shù),實際的重繪工作由OnDraw來完成。參數(shù)bErase為TRUE時,重繪區(qū)域內(nèi)的背景將被擦除,否則,背景將保持不變。
4、CDC::Rectangle(左上x,左上y,右下x,右下y);使用該函數(shù)畫一個矩形,可以用當前的畫筆畫矩形輪廓,用當前畫刷進行填充。
函數(shù)原型:BOOL Rectangle(HDC hdc, int nLeftRect, int nTopRect, int nRightRect, int nBottomRect);
hdc:設(shè)備環(huán)境句柄。
nLeftRect:指定矩形左上角的邏輯X坐標。
nTopRect:指定矩形左上角的邏輯Y坐標。
nRightRect:指定矩形右下角的邏輯X坐標。
nBottomRect:指定矩形右下角的邏輯Y坐標。
5、CBrush:: CBrush//畫刷類
eg:CBrush brushStick(RGB(127, 127, 127));四種構(gòu)造函數(shù): CBrush();
CBrush(COLORREF crColor);
CBrush(int nIndex, COLORREF crColor);
CBrush(CBitmap* pBitmap);
/ 6
參數(shù)說明: crColor指定畫刷的前景色(RGB方式)。如果畫刷是陰影線型的,則指定陰影線的顏色。
nIndex指定畫刷陰影線采用的風格,取值如下:
HS_BDIAGONAL45度的向下影線(從左到右)
HS_CROSS水平和垂直方向以網(wǎng)格線作出陰影
HS_DIAGCROSS 45度的網(wǎng)格線陰影
HS_FDIAGONAL 45度的向上陰影線(從左到右)
HS_HORIZONTAL 水平的陰影線
HS_VERTICAL 垂直的陰影線
pBitmap指向CBitmap對象的指針,該對象指定了畫刷要繪制的位圖。
構(gòu)造函數(shù)說明: 類CBrush一共有四個覆蓋的構(gòu)造函數(shù)。不帶參數(shù)的那個構(gòu)造函數(shù)構(gòu)造一個未初始化的CBrush對象,在使用該對象之前需要另外初始化。如果使用了不帶參數(shù)的那個構(gòu)造函數(shù),則必須用CreateSolidBrush、CreateHatchBrush、CreateBrushIndirect、CreatePatternBrush或CreateDIBPatternBrush來初始化返回的CBrush對象。如果使用了帶參數(shù)的構(gòu)造函數(shù),則不再需要初始化CBrush對象。帶參數(shù)的構(gòu)造函數(shù)在出錯時會產(chǎn)生一個異常,而不帶參數(shù)的構(gòu)造函數(shù)總是成功返回。只帶有一個參數(shù)COLORREF的構(gòu)造函數(shù)用指定的顏色構(gòu)造一個實線型的畫刷。顏色是一個RGB值,可以用WINDOWS.H中的宏RGB構(gòu)造出來。帶兩個參數(shù)的構(gòu)造函數(shù)構(gòu)造一個陰影線型的畫刷,參數(shù)nIndex指定了陰影線模式的指數(shù)(index)。參數(shù)crColor指定了畫刷的顏色。帶有一個CBitmap型參數(shù)的構(gòu)造函數(shù)構(gòu)造一個模式化的畫刷。參數(shù)指定一個位圖。該位圖應(yīng)該是已經(jīng)用CBitmap::CreateBitmap、CBitmap::CreateBitmapIndirect、CBitmap::LoadBitmap或CBitmap::CreateCompatiableBitmap建立或加載的位圖。填充模式下的位圖的最小尺寸為8像素×8像素。
6、MessageBox(“Game Over!”);MessageBox(NULL,“text”,“title”,BUTTON);參數(shù)title:string類型,指定消息對話框的標題。text:指定消息對話框中顯示的消息,該參數(shù)可以是數(shù)值數(shù)據(jù)類型、字符串或boolean值。icon:Icon枚舉類型,可選項,指定要在該對話框左側(cè)顯示的圖標。button:Button枚舉類型,可選項,指定顯示在該對話框底部的按鈕。default:數(shù)值型,可選項,指定作為缺省按鈕的按鈕編號,按鈕編號自左向右依次計數(shù),缺省值為1,如果該參數(shù)指定的編號超過了顯示的按鈕個數(shù),那么MessageBox()函數(shù)將使用缺省值返回值Integer。函數(shù)執(zhí)行成功時返回用戶選擇的按鈕編號(例如1、2、3等),發(fā)生錯誤時返回-1。如果任何參數(shù)的值為NULL,4 / 6
MessageBox()函數(shù)返回NULL。
函數(shù)原型:MessageBox.Show(Text,Title,MessageBoxButtons,MessageBoxIcon ,MessageBoxDefaultButtons)
參數(shù)說明:
(1)Text:必選項,消息框的正文。(2)Title:可選項,消息框的標題。
(3)MessageBoxButtons:可選項,消息框的按鈕設(shè)置,默認只顯示【確定】按鈕。
OK――確定 OKCancel――確定和取消 AbortRetryIgnore――終止、重試和忽略
YesNoCancel――是、否和取消 YesNo――是和否 RetryCancel――重試和取消
(4)MessageBoxIcon:對話框中顯示的圖標樣式,默認不顯示任何圖標。
Question――問號 Information、Asterisk――i號 Error、Stop、Hand――錯誤號
Warning、Exclamation――!號 None――不顯示任何圖標
(5)MessageBoxDefaultButtons:可選項,對話框中默認選中的按鈕設(shè)置。
DefaultButton1――第1個button是默認按鈕
DefaultButton2――第2個button是默認按鈕
DefaultButton3――第3個button是默認按鈕
7、Memcpy(拷貝目的地,拷貝對象,拷貝長度);包含在頭文件#include
函數(shù)原型:
extern void *memcpy(void *destin, void *source, unsigned n);功能:
由source指向地址為起始地址的連續(xù)n個字節(jié)的數(shù)據(jù)復制到以destin指向地址為起始地址的空間內(nèi)。eg: int a=5,b=9;memcpy(a,b,sizeof(a));//將b按位拷給a;說明:
1.source和destin所指內(nèi)存區(qū)域不能重疊,函數(shù)返回指向destin的指針。
2.與strcpy相比,memcpy并不是遇到'