面向?qū)ο驝程序設(shè)計(jì)_第1頁(yè)
面向?qū)ο驝程序設(shè)計(jì)_第2頁(yè)
面向?qū)ο驝程序設(shè)計(jì)_第3頁(yè)
面向?qū)ο驝程序設(shè)計(jì)_第4頁(yè)
面向?qū)ο驝程序設(shè)計(jì)_第5頁(yè)
已閱讀5頁(yè),還剩19頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

浙江工商大學(xué)計(jì)算機(jī)與信息工程學(xué)院課程設(shè)計(jì)報(bào)告課程名稱: 面向?qū)ο蟪绦蛟O(shè)計(jì)_專業(yè): 計(jì)算機(jī)科學(xué)與技術(shù)班級(jí): 計(jì)科0902______學(xué)號(hào): 0912300201__姓名: 周永強(qiáng)_題目: 音樂(lè)播放器_______指導(dǎo)教師: 2011年1月計(jì)算機(jī)與信息工程學(xué)院班級(jí)計(jì)科0902姓名學(xué)號(hào)0912300201題目音樂(lè)播放器時(shí)間2011年1月目的通過(guò)使用微軟的MFC編程實(shí)現(xiàn)windows系統(tǒng)下的簡(jiǎn)單播放器的功能,使之能夠播放常見(jiàn)的音頻文件,并且實(shí)現(xiàn)用戶與窗口程序的簡(jiǎn)單交互。要求運(yùn)用窗口界面設(shè)計(jì)。本課題將生成一個(gè)播放器,能夠?qū)崿F(xiàn)*.mp3,*.wma等常見(jiàn)的音頻文件播放,并且還有一個(gè)對(duì)話框,點(diǎn)擊上面的連接能夠?qū)崿F(xiàn)調(diào)用outlook進(jìn)行發(fā)郵件反饋信息。為實(shí)現(xiàn)友好的和美觀的操作界面,本例中將調(diào)用位圖資源,以及常見(jiàn)的播放器操作,以更好的滿足用戶的要求。內(nèi)容和要求播放器的基本要素:打開(kāi)文件、播放文件、錄制文件、刪除列表中文件、暫停播放、停止播放、上一曲、下一曲。窗口操作:播放清單彈出和關(guān)閉、窗口關(guān)閉、窗口最小化到托盤(pán)、窗口子對(duì)話框。其他功能:用戶反饋(發(fā)送郵件)。成績(jī)指導(dǎo)教師(簽名):2009級(jí)《面向?qū)ο蟪绦蛟O(shè)計(jì)》課程設(shè)計(jì)任務(wù)書(shū)

設(shè)計(jì)說(shuō)明書(shū)需求分析: 本課題通過(guò)對(duì)WindowsAPI的多媒體和資源文件的高層控制MCI進(jìn)行封裝,建立了一個(gè)播放器類KuWfPlayer(酷狼),不必過(guò)分追究MCI內(nèi)部函數(shù),僅是根據(jù)自己的需要,直接調(diào)用其接口,即可輕松實(shí)現(xiàn)基本的播放器所具有的功能。該案例提供給用戶以下服務(wù):高層音頻服務(wù)媒體控制接口連接媒體設(shè)備順序播放加入列表的音頻文件程序托盤(pán)功能實(shí)現(xiàn)復(fù)讀機(jī)功能超級(jí)鏈接的使用其中后兩項(xiàng)功能并非目前所有播放器都具備的功能,可以算得上本課題的創(chuàng)新之處。程序設(shè)計(jì)思想:Windows系統(tǒng)提供了強(qiáng)大的多媒體系統(tǒng),為我們提供了WINMM.DLL動(dòng)態(tài)鏈接庫(kù),通過(guò)調(diào)用它所提供的API函數(shù),就可以實(shí)現(xiàn)MCI指令進(jìn)行多方面的操作了,就想普通播放器一樣,只是此處是通過(guò)命令的方式。MCI的全稱是MediaControlInterface,譯為媒體控制接口,就像一個(gè)解釋器,通過(guò)調(diào)用函數(shù)的形式解釋命令。MCI工作過(guò)程中需要在指令中需要調(diào)用API函數(shù)實(shí)現(xiàn)程序與多媒體設(shè)備的連接。有三個(gè)重要的API,分別是mciSendString(),mciExecute()和mciGetErrorString(),本程序中將展現(xiàn)其各自的功能。概要設(shè)計(jì):1,建立MFC工程,選擇類型為DialogBased模式,其他均默認(rèn)。2,此時(shí)工程會(huì)自動(dòng)生成兩個(gè)對(duì)話框,對(duì)于本例已經(jīng)夠了。3,設(shè)計(jì)界面,如下圖:4,給控件設(shè)置ID值,本案例中ID值為上圖中控件上的標(biāo)識(shí),前面再加上IDC_標(biāo)志。5,給控件添加成員變量,其中按鈕空間添加CButton類型,滾動(dòng)條為CSliderCtrl類型,列表為CListBox類型。6,一切結(jié)束后,右擊工程圖標(biāo)屬性linkinputAdditionalDependences中加入winmm.lib,注意此處一定要加,不然會(huì)連接錯(cuò)。添加位圖資源,本例使用別人提供的位圖資源,把位圖復(fù)制到工程下的res目錄中,然后在資源視圖中,通過(guò)導(dǎo)入位圖資源,把已有資源導(dǎo)入,ID值為默認(rèn),不再修改。位圖添加后,要把對(duì)話框的成員變量那些CButton類型的對(duì)象修改為CBitmapButton類型,并設(shè)置屬性值ownerdraw為true。在About對(duì)話框中添加CStatic控件,設(shè)置ID為IDC_EMAIL,標(biāo)題設(shè)為Emaito:\hzyqhi2010@163.com窗口設(shè)計(jì)工作基本文成,以下開(kāi)始是代碼工作。以下是程序的類關(guān)系圖。程序框架及詳細(xì)實(shí)現(xiàn):本例充分利用面向?qū)ο蟮乃枷?,?chuàng)建了幾個(gè)程序所需要的類,來(lái)實(shí)現(xiàn)特定的功能,下面將分別介紹:第一個(gè)類:KuWfPlayerDlg通過(guò)public:繼承CDialogEx而來(lái),是一個(gè)對(duì)話框類,為實(shí)現(xiàn)其功能,添加了以下必要的函數(shù),其層次和成員函數(shù)、數(shù)據(jù)成員UML圖.本類主要是實(shí)現(xiàn)窗口顯示控制,文件播放控制,和音頻功能的實(shí)現(xiàn),由于函數(shù)名很直觀,可以從上表中基本看出起功能,因此下面只分析重要的函數(shù)和幾個(gè)關(guān)鍵步驟。構(gòu)造函數(shù):構(gòu)造函數(shù)是每個(gè)類必不可少的部分,是類的對(duì)象在創(chuàng)建后能夠正確的初始化,下面是本類的構(gòu)造函數(shù):KuWfPlayerDlg::KuWfPlayerDlg(CWnd*pParent/*=NULL*/) :CDialogEx(KuWfPlayerDlg::IDD,pParent){ m_hIcon=AfxGetApp()->LoadIcon(IDR_MAINFRAME); aa==_T(""); hour=minute=second=0; fi=-1; fr=0;}以下幾個(gè)函數(shù)主要用于界面的顯示,即構(gòu)造外觀:BOOLKuWfPlayerDlg::OnInitDialog() 該函數(shù)是窗口的初始化函數(shù),在窗口顯示后已經(jīng)完成,對(duì)整個(gè)窗口的顯示起決定性作用,位圖的加載以及圖標(biāo)的加載都在該函數(shù)中實(shí)現(xiàn),是本課題第一個(gè)目標(biāo),即實(shí)現(xiàn)美觀的外表的重要函數(shù)。例如: 界面背景位圖加載:m_bg.LoadBitmap(IDB_BITMAP2); 按鈕位圖加載:m_open.LoadBitmaps(IDB_BITMAP3,IDB_BITMAP3);m_bexit.LoadBitmaps(IDB_BITMAP6,IDB_BITMAP6); 圖標(biāo)的加載:SetIcon(m_hIcon,TRUE); //SetbigiconSetIcon(m_hIcon,FALSE); //Setsmallicon 以及相關(guān)變量的初始化工作:m_flag=TRUE;m_flag1=TRUE;voidKuWfPlayerDlg::OnPaint() 該函數(shù)是負(fù)責(zé)程序主界面的繪制工作,在上個(gè)函數(shù)中,資源得到加載,在本函數(shù)中資源得到使用,下面是一些重要的語(yǔ)句及解釋:CPaintDCdc(this);CRectrect;GetClientRect(&rect);//以上是獲得當(dāng)前的設(shè)備環(huán)境dc,和操作區(qū)域rectCDCdcMem;dcMem.CreateCompatibleDC(&dc);BITMAPbitMap;m_bg.GetBitmap(&bitMap);CBitmap*pbmpOld=dcMem.SelectObject(&m_bg);dc.StretchBlt(0,0,rect.Width(),rect.Height(),&dcMem,0,0,bitMap.bmWidth,bitMap.bmHeight,SRCCOPY);//該語(yǔ)句實(shí)現(xiàn)背景的位圖填充 以下函數(shù)主要用于實(shí)現(xiàn)播放功能,通過(guò)調(diào)用MCI指令:首先保證添加頭文件#include“mmsystem.h”voidKuWfPlayerDlg::OnPlay()播放和暫停函數(shù):播放:MCI_OPEN_PARMSmciopenparms;//播放MCI_PLAY_PARMSmciplayparms;//播放路徑mciopenparms.lpstrElementName=aa;//文件類型mciopenparms.lpstrDeviceType=NULL;//向MCI設(shè)備發(fā)送命令消息,使其包含文件的類型和路徑mciSendCommand(0,MCI_OPEN,MCI_DEVTYPE_WAVEFORM_AUDIO,(DWORD)(LPVOID)&mciopenparms);//獲取多媒體設(shè)備類型編號(hào)m_count=mciopenparms.wDeviceID;//歌曲播放支持類型mciplayparms.dwCallback=(DWORD)GetSafeHwnd();//cdlen的前三位是歌曲長(zhǎng)度,以秒為單位cdlen=getinfo(MCI_STATUS_LENGTH);//設(shè)置播放完成所需要時(shí)間cdto=MCI_MAKE_HMS(MCI_HMS_HOUR(cdlen),MCI_HMS_MINUTE(cdlen),MCI_HMS_SECOND(cdlen));mciplayparms.dwFrom=cdfrom;mciplayparms.dwTo=cdto;//向設(shè)備發(fā)送播放的消息mciSendCommand(m_count,MCI_PLAY,MCI_TO|MCI_FROM,(DWORD)(LPVOID)&mciplayparms);//設(shè)置及時(shí)系統(tǒng),用于進(jìn)度的隨時(shí)顯示SetTimer(0,1000,NULL);///設(shè)置進(jìn)度條范圍m_sl.SetRange(0,(cdlen/1000)); //將信息顯示到窗口UpdateData(FALSE);暫停:m_flag=TRUE;m_play.RedrawWindow();//取消計(jì)時(shí)器KillTimer(0);//獲取¨當(dāng)前狀態(tài)DWORDdwsf=getinfo(MCI_STATUS_POSITION);//記錄播放位置cdfrom=MCI_MAKE_MSF(MCI_MSF_MINUTE(dwsf),MCI_MSF_SECOND(dwsf),MCI_MSF_FRAME(dwsf));//向設(shè)備發(fā)送暫停請(qǐng)求¨mciSendCommand(m_count,MCI_CLOSE,0,NULL);voidKuWfPlayerDlg::OnOpen()由于本例要從磁盤(pán)上選擇文件,所以,函數(shù)中定義了一個(gè)問(wèn)價(jià)對(duì)話框的對(duì)象CFileDialogf(TRUE);用fileNmae表示讀取文件的名字CStringfileName;constintc_cMaxFiles=100;constintc_cbBuffSize=(c_cMaxFiles*(MAX_PATH+1))+1;f.GetOFN().lpstrFile=fileName.GetBuffer(c_cbBuffSize);f.GetOFN().nMaxFile=c_cMaxFiles;用pos表示位置POSITIONpos=f.GetStartPosition();打開(kāi)文件對(duì)話框f.DoModal()==IDOK以下操作不再贅述。voidKuWfPlayerDlg::OnTimer(UINT_PTRnIDEvent)由前面的函數(shù)可以看到本案例中調(diào)用了該函數(shù),由于播放器的進(jìn)度要隨時(shí)顯示到屏幕上,以獲取最新的進(jìn)度,所以必須要每個(gè)一定的時(shí)間來(lái)獲取歌曲播放信息,所以用到了OnTimer(…),在windowsSDK編程中實(shí)現(xiàn)該功能是通過(guò)響應(yīng)WM_TIMER來(lái)實(shí)現(xiàn)的,MFC中也不例外,所以為WM_TIMER添加消息響應(yīng)函數(shù)后,MFC通過(guò)三個(gè)函數(shù)實(shí)現(xiàn)對(duì)時(shí)間的控制,分別為:SetTimer(…)KillTimer(…)OnTimer(…)來(lái)實(shí)現(xiàn)的,當(dāng)程序調(diào)用函數(shù)SetTimer(…)時(shí),OnTimer(…)開(kāi)始執(zhí)行,當(dāng)KillTimer(…)調(diào)用時(shí),不再計(jì)時(shí),以此實(shí)現(xiàn)對(duì)時(shí)間的控制。函數(shù)的內(nèi)容不再贅述。voidKuWfPlayerDlg::Thide()該函數(shù)用于實(shí)現(xiàn)程序的最小化,我們常見(jiàn)的許多程序,都有點(diǎn)擊最小化按鈕后最小化到托盤(pán),本例中夜集成了該功能,下面是主要代碼及解釋://創(chuàng)建任務(wù)欄圖標(biāo)對(duì)象NOTIFYICONDATAtnd;tnd.cbSize=sizeof(NOTIFYICONDATA);tnd.hWnd=this->m_hWnd;tnd.uID=IDR_MAINFRAME;tnd.uFlags=NIF_MESSAGE|NIF_ICON|NIF_TIP;tnd.uCallbackMessage=MY_MESSAGE;tnd.hIcon=LoadIcon(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDR_MAINFRAME)); 下面是提示:lstrcpy(tnd.szTip,_T("Mp3Player,單擊圖標(biāo)彈出窗口"));//向任務(wù)添加圖標(biāo)Shell_NotifyIcon(NIM_ADD,&tnd);voidKuWfPlayerDlg::Tdehide()與上述函數(shù)類似voidKuWfPlayerDlg::OnLButtonDown(UINTnFlags,CPointpoint)該函數(shù)是為了發(fā)送鼠標(biāo)左鍵按下的消息,以實(shí)現(xiàn)相應(yīng)的事項(xiàng)PostMessage(WM_NCLBUTTONDOWN,HTCAPTION,MAKELPARAM(point.x,point.y));LRESULTKuWfPlayerDlg::WindowProc(UINTmessage,WPARAMwParam,LPARAMlParam)消息處理函數(shù),本例牽涉到消息的發(fā)送和處理,該處通過(guò)消息處理函數(shù)來(lái)接收并予以處理,其全部代碼如下面{ //TODO:Addyourspecializedcodehereand/orcallthebaseclass switch(message) { caseMY_MESSAGE: if(lParam==WM_RBUTTONUP||lParam==WM_LBUTTONUP) { ShowWindow(SW_SHOW); Tdehide(); } break; } returnCDialogEx::WindowProc(message,wParam,lParam);} 將原路徑數(shù)組轉(zhuǎn)移到臨時(shí)路徑數(shù)組中voidKuWfPlayerDlg::forfor() 臨時(shí)路徑轉(zhuǎn)移到原路徑數(shù)組中voidKuWfPlayerDlg::forfor1() 其他函數(shù)機(jī)制和實(shí)現(xiàn)都相對(duì)簡(jiǎn)單,只是做一些常見(jiàn)的操作,因此此處不再贅述. 第二個(gè)類:CHyperLink通過(guò)public從CStatic而來(lái)。是一個(gè)超鏈接類,為實(shí)現(xiàn)其功能,添加了以下必要的函數(shù),其層次和成員見(jiàn)UML圖: 下面介紹其主要函數(shù):CHyperLink::CHyperLink() 在構(gòu)造函數(shù)中進(jìn)行下列初始化,以保證類的對(duì)象創(chuàng)建時(shí)能夠正確的初始化m_hLinkCursor=NULL;m_crLinkColour=RGB(0,20,238);m_crVisitedColour=RGB(85,26,239);m_crHoverColour=::GetSysColor(COLOR_HIGHLIGHT);m_bOverControl=FALSE;m_bVisited=FALSE;m_bUnderline=TRUE;m_bAdjustToFit=TRUE;m_strURL.Empty();voidCHyperLink::OnMouseMove(UINTnFlags,CPointpoint)本函數(shù)用于檢測(cè)鼠標(biāo)的移動(dòng),由于本例要使用超鏈接,并且當(dāng)鼠標(biāo)滑動(dòng)到鼠標(biāo)上側(cè)時(shí),要做出相應(yīng)的響應(yīng),因此,在類中添加了成員函數(shù)。首先調(diào)用父類的函數(shù),如下: CStatic::OnMouseMove(nFlags,point);當(dāng)鼠標(biāo)目前處于url上方時(shí),將鼠標(biāo)指針設(shè)為手形 m_hLinkCursor=LoadCursor(NULL,IDC_HAND); SetLinkCursor(m_hLinkCursor); 不在上方時(shí) CRectrect; GetClientRect(rect); m_bOverControl=FALSE; ReleaseCapture(); RedrawWindow(); 以此來(lái)實(shí)現(xiàn)鼠標(biāo)的響應(yīng)。voidCHyperLink::PreSubclassWindow()PreSubclassWindow()函數(shù)里面對(duì)文本框執(zhí)行的設(shè)置字體大小創(chuàng)建靜態(tài)文本框控件。BOOLCHyperLink::PreTranslateMessage(MSG*pMsg)此函數(shù)時(shí)時(shí)MFC的虛函數(shù),此處進(jìn)行了重寫(xiě),仍然是為了實(shí)現(xiàn)函數(shù)的消息的響應(yīng)。m_ToolTip.RelayEvent(pMsg);voidCHyperLink::PositionWindow() 在該函數(shù)中,移動(dòng)并重新繪制用戶區(qū)窗口的大小,這樣用戶區(qū)和超鏈接文本就有相同的尺寸;而且可以防止空間不在文本上時(shí),防止激活鏈接。下面是一些主要的代碼:首先獲取當(dāng)前窗口位置 CRectrect; GetWindowRect(rect); CWnd*pParent=GetParent(); 并判斷是不是父窗口 if(pParent) { pParent->ScreenToClient(rect); }獲取當(dāng)前窗口類型DWORDdwStyle=GetStyle();iLONGretval=RegOpenKeyEx(key,subkey,0,KEY_QUERY_VALUE,&hKey);獲取成功后 if(retval==ERROR_SUCCESS) { longdatasize=MAX_PATH; TCHARdata[MAX_PATH]; RegQueryValue(hKey,NULL,data,&datasize); lstrcpy(retdata,data); RegCloseKey(key); }將其返回 returnretval;}voidCHyperLink::ReportError(intnError)如果發(fā)送郵件不成功,如要處理錯(cuò)誤的原因,此函數(shù)中通過(guò)對(duì)錯(cuò)誤原因來(lái)進(jìn)行逐個(gè)處理,以實(shí)現(xiàn)不成功時(shí)響應(yīng)的操作,增強(qiáng)操作的安全性。此處使用的是switch語(yǔ)句進(jìn)行判斷:(str字符串的內(nèi)容限于篇幅以省略) switch(nError){ case0:str="……";break; caseSE_ERR_PNF:str="……";break; caseSE_ERR_FNF:str="……";break; caseERROR_BAD_FORMAT:str="……";break; caseSE_ERR_ACCESSDENIED:str="……;break; caseSE_ERR_ASSOCINCOMPLETE:str="……";break; caseSE_ERR_DDEBUSY:str="……;break; caseSE_ERR_DDEFAIL:str="……";break; caseSE_ERR_DDETIMEOUT:str="……";break; caseSE_ERR_DLLNOTFOUND:str="……";break; caseSE_ERR_NOASSOC:str="……";break; caseSE_ERR_OOM:str="……";break; caseSE_ERR_SHARE:str="……"; default:str.Format(_T("UnknownError(%d)occurred."),nError);break; } str=_T("Unabletoopenhyperlink:\n\n")+str;發(fā)送消息框提示:AfxMessageBox(str,MB_ICONEXCLAMATION|MB_OK);HINSTANCECHyperLink::GotoURL(LPCTSTRurl,intshowcmd)該類的重量級(jí)成員函數(shù),也就是前往鏈接,當(dāng)一切工作做好以后,就是要打開(kāi)對(duì)應(yīng)的鏈接,下面著重分析代碼及原理: TCHARkey[MAX_PATH+MAX_PATH]; 嘗試使用ShellExecute() HINSTANCEresult=ShellExecute(NULL,_T("open"),url,NULL,NULL,showcmd); 如果獲取失敗。則獲取.htm注冊(cè)鍵值并查找程序 if((UINT)result<=HINSTANCE_ERROR) { if(GetRegKey(HKEY_CLASSES_ROOT,key,key),_T(".htm")==ERROR_SUCCESS) { TCHAR*pos; pos=_tcsstr(key,_T("\"%1\"")); //未發(fā)現(xiàn)引用%1 if(pos==NULL) { pos=StrStr(key,_T("%1")); 如果還是空 if(pos==NULL) { pos=key+lstrlen(key)-1; } else //刪除參數(shù) *pos='\0'; } else *pos='\0'; lstrcat(pos,_T("")); lstrcat(pos,url); result=(HINSTANCE)WinExec((LPCSTR)key,showcmd); } }將結(jié)果返回 returnresult;} 其余函數(shù)由于比較簡(jiǎn)單,所以此處不再解釋,詳細(xì)可參見(jiàn)代碼。 第三個(gè)類:CAboutDlg通過(guò)public從CDialogEx而來(lái)。是一個(gè)對(duì)話框類,為實(shí)現(xiàn)其功能,添加了以下必要的函數(shù),其層次和成員見(jiàn)UML圖。該類的目的是調(diào)出ABOUT對(duì)話框,獲取用戶幫助信息,以及用戶的反饋。都是基本函數(shù)。 第四個(gè)類:CTESTApp:publicCWinApp,MFC中的主應(yīng)用程序類封裝用于Windows操作系統(tǒng)的應(yīng)用程序的初始化、運(yùn)行和終止?;诳蚣苌傻膽?yīng)用程序必須有且僅有一個(gè)從CWinApp派生的類的對(duì)象。在創(chuàng)建窗口之前先構(gòu)造該對(duì)象。 至此,該類中主要的函數(shù)及實(shí)現(xiàn)機(jī)制都已經(jīng)介紹完了,限于篇幅原因,部分非重要簡(jiǎn)單函數(shù)并未介紹,如有需要,可以參見(jiàn)后附錄代碼,或發(fā)送郵件給本人:\hzyqhi2010@163.com獲取代碼。 設(shè)計(jì)成果展示程序主界面如下圖::播放按鈕,選中播放列表內(nèi)的文件按下按鈕或雙擊,會(huì)開(kāi)始播放,再次點(diǎn)擊,歌曲暫停。:打開(kāi)按鈕,當(dāng)需要向列表中添加文件時(shí),按下該按鈕,會(huì)打開(kāi)問(wèn)價(jià)對(duì)話框進(jìn)行選擇文件。:上一曲。:下一曲。:錄制按鈕,第一次按下時(shí),歌曲開(kāi)始錄制,再次按下時(shí)播放錄制的內(nèi)容。:停止播放:最小化按鈕,當(dāng)按下時(shí),程序最小化到托盤(pán),如下圖。:退出按鈕,退出程序。:關(guān)于按鈕,按下后,會(huì)彈出幫助對(duì)話框。點(diǎn)擊對(duì)話框上的email鏈接,會(huì)條用outlook發(fā)送郵件。DEL:按鈕刪除列表內(nèi)的歌曲。POP:該按鈕是是窗口改變大小,隱藏列表,如下圖:

設(shè)計(jì)心得體會(huì) 通過(guò)幾天的努力,終于把課題做出來(lái),也算是本學(xué)期該課程的一個(gè)圓滿結(jié)束,以前只是純粹的為了寫(xiě)程序,從來(lái)沒(méi)有針對(duì)性的做過(guò)某個(gè)課題或是實(shí)現(xiàn)某個(gè)軟件的開(kāi)發(fā)??傄詾閷W(xué)好基礎(chǔ)就萬(wàn)事大吉了,但此次才發(fā)現(xiàn)只是知道理論不會(huì)用對(duì)編程來(lái)說(shuō)是毫無(wú)意義的,在操作中實(shí)踐知識(shí),理解知識(shí),才是真正的編程之道,帶著目的去實(shí)現(xiàn)才能夠使努力有意義。初次看到課題時(shí),沒(méi)打算能做出來(lái)的,但最終還是完成了,一開(kāi)始的時(shí)候,要實(shí)現(xiàn)播放器,只感覺(jué)很虛,因?yàn)槲也恢纖indows如何實(shí)現(xiàn)音頻播放,我不知道該如何設(shè)計(jì)程序的整個(gè)流程,也不知道MFC如何實(shí)現(xiàn)程序的編寫(xiě)和控制,更不知該使用哪個(gè)類,哪個(gè)函數(shù),以及為什么使用那個(gè)類,為什么調(diào)用那個(gè)函數(shù)。把MFC從頭學(xué)過(guò)顯然已經(jīng)來(lái)不及了,即使那樣,短時(shí)間內(nèi)熟悉MFC的內(nèi)部機(jī)制幾乎也是不可能的,無(wú)奈之舉,只有針對(duì)性的去借鑒別別人的程序,先知其然,后再探尋其所以然吧。一直不喜歡看別人的程序,感覺(jué)那樣像是抄襲,即使不是抄襲,也似乎顯得沒(méi)有技術(shù)含量,不能張顯自己的能力。即使有別人的程序作向?qū)?,但在?shí)現(xiàn)的過(guò)程中由于操作平臺(tái)的不同還是遇到了不少問(wèn)題,搞得我頭都暈了,當(dāng)自己明明不知道,可竟然不知道自己那里不知道,以至于明明有問(wèn)題,卻沒(méi)辦法描述自己的問(wèn)題,確實(shí)像啞巴吃了黃連,有苦說(shuō)不出。一直以為沒(méi)有不可能,所以從來(lái)不喜歡問(wèn)自己會(huì)不會(huì),而是問(wèn)自己愿不愿,因?yàn)橹灰敢猓陀薪鉀Q問(wèn)題的勇氣和動(dòng)力,無(wú)論如何,只要有問(wèn)題,就會(huì)有解的,我不會(huì)只是代表暫時(shí)還沒(méi)找到,只要我肯找,始終是會(huì)找得到的,我喜歡那種把問(wèn)題解決帶來(lái)的成就感,也喜歡獨(dú)自把問(wèn)題解決。以前問(wèn)老師問(wèn)題時(shí),老師總是反問(wèn)我有沒(méi)有自己試著去解決過(guò),說(shuō)句實(shí)話,有時(shí)候確實(shí)沒(méi)有,懶惰的驅(qū)使使得想得到現(xiàn)成的答案,可往往忽略了解決的過(guò)程才是最重要的,因?yàn)榭傆幸惶?,我要?dú)自去面對(duì)問(wèn)題的,不能事事依賴別人,別人只能替我指路,卻永遠(yuǎn)不能為我走路,走還是要靠自己的,很感謝老師,用問(wèn)題回答我的問(wèn)題,卻讓我找到所要的答案。有時(shí)候會(huì)問(wèn)自己感不感覺(jué)很虧,把年輕的時(shí)間用在這些事上面,現(xiàn)在知道,非但沒(méi)有,而且還感覺(jué)很好,喜歡把編程當(dāng)作打游戲。同學(xué)有時(shí)候邀我打游戲,總是回絕說(shuō)已經(jīng)戒了,現(xiàn)在寫(xiě)程序,看算法就像你的游戲,你的聊天一樣,你從游戲中獲得快樂(lè),我從編程中尋找著成就,你有你的樂(lè)點(diǎn),我有我的笑談,我不否認(rèn)你的錯(cuò),你也不要指責(zé)我不對(duì),我們同樣是找尋著樂(lè)趣,只是用這不同的方式,沒(méi)有所謂的對(duì)與錯(cuò),只有適合與不適合,對(duì)我來(lái)說(shuō),這是適合的。總之,課程設(shè)計(jì)已經(jīng)告一段落,本學(xué)期的的課程也已經(jīng)結(jié)束,但愿沒(méi)有白過(guò),取得一個(gè)好的結(jié)果也算是對(duì)自己這學(xué)期的交代。希望老師客觀公正的給出評(píng)價(jià),那么我的努力也沒(méi)有徒勞。最后,感謝老師的教導(dǎo),我入門(mén)了,以后會(huì)好好修行的。 2011/1/13 周永強(qiáng)80196單片機(jī)IP研究與實(shí)現(xiàn),TN914.42AT89S52單片機(jī)實(shí)驗(yàn)系統(tǒng)的開(kāi)發(fā)與應(yīng)用,TG155.1F406基于單片機(jī)的LED三維動(dòng)態(tài)信息顯示系統(tǒng),O536TG174.444基于單片機(jī)的IGBT光伏充電控制器的研究,TV732.1TV312基于89C52單片機(jī)的印刷品色彩質(zhì)量檢測(cè)系統(tǒng)的研究,TP391.41基于單片機(jī)+CPLD體系結(jié)構(gòu)的信標(biāo)機(jī)設(shè)計(jì),TU858.3TN915.62基于單片機(jī)SPCE061A的汽車(chē)空調(diào)控制系統(tǒng),TM774TM621.3帶有IEEE488接口的通用單片機(jī)系統(tǒng)方案設(shè)計(jì)與研究,TN015基于VC的單片機(jī)軟件式開(kāi)發(fā)平臺(tái),TG155.1F406基于VB的單片機(jī)虛擬實(shí)驗(yàn)軟件的研究與開(kāi)發(fā),TG155.1F406采用單片機(jī)的電阻點(diǎn)焊智能控制器開(kāi)發(fā),TG155.1F406基于51系列單片機(jī)的PROFIBUS-DP智能從站研究,TG155.1F406八位單片機(jī)以太網(wǎng)接入研究與實(shí)現(xiàn),TG155.1F406基于單片機(jī)與Internet的數(shù)控機(jī)床遠(yuǎn)程監(jiān)控系統(tǒng)的研發(fā),R319TP319基于單片機(jī)和DSP控制的醫(yī)用輸液泵的研究,U467.11基于單片機(jī)控制新型逆變穩(wěn)壓電源的設(shè)計(jì)與仿真,F426.22TP311.52基于8位單片機(jī)的摩托車(chē)發(fā)動(dòng)機(jī)電控單元軟硬件的開(kāi)發(fā),TB61基于430單片機(jī)的變壓器監(jiān)控終端的研究,TG155.1F406逆變點(diǎn)焊單片機(jī)控制系統(tǒng)研究,TG131TG113.14單片機(jī)控制數(shù)字變量柱塞泵的研究,F426.22TP311.52基于單片機(jī)控制的高通量藥物篩選及檢測(cè)系統(tǒng)開(kāi)發(fā),R730.55R734.2MCS8051以及DS80C320單片機(jī)軟核的設(shè)計(jì),TP391基于AVR單片機(jī)的應(yīng)用設(shè)計(jì)實(shí)踐,TN015LPC2210單片機(jī)的KGW脈沖固體激光掩膜加工控制系統(tǒng)研究,TG131TG113.14基于單片機(jī)控制的交流伺服系統(tǒng)的多梳櫛經(jīng)編機(jī)的研究,TN916TP31780C196單片機(jī)在鐵路客車(chē)發(fā)電機(jī)控制系統(tǒng)中的應(yīng)用研究,TP368.1TP393基于單片機(jī)的工程車(chē)輛3參數(shù)自動(dòng)換檔技術(shù)研究,F426.22TP311.52削方制材機(jī)搖尺機(jī)構(gòu)單片機(jī)控制裝置的研制,TH213.68XC196單片機(jī)集成開(kāi)發(fā)環(huán)境的研制,F426.22TP311.52基于單片機(jī)與PC的光電靶測(cè)試系統(tǒng)研究,O536TG174

溫馨提示

  • 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ù)網(wǎng)僅提供信息存儲(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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論