版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、<p><b> 通信與信息工程學(xué)院</b></p><p> 2010 /2011 學(xué)年 第 2 學(xué)期</p><p> 課程設(shè)計(jì) 實(shí)驗(yàn)報(bào)告</p><p> 模 塊 名 稱 VC++軟件設(shè)計(jì)</p><p> 專 業(yè) 電子信息工程 </p&g
2、t;<p> 學(xué) 生 班 級(jí) </p><p> 學(xué) 生 學(xué) 號(hào) </p><p> 學(xué) 生 姓 名 </p><p> 指 導(dǎo) 教 師 </p><p>
3、日 期 2012 年 5 月 </p><p><b> 實(shí)驗(yàn)內(nèi)容</b></p><p> 本課程設(shè)計(jì)分成練習(xí)題和綜合題兩部分。基礎(chǔ)練習(xí)題11道中每個(gè)學(xué)生選擇5個(gè)完成,要求如下:必做:1;2,3選擇其一;4,5選擇其一;6- 11選擇其二。綜合課題任選一道。</p><p><b> 一 、 練習(xí)題:
4、</b></p><p><b> 1、基本環(huán)境調(diào)試</b></p><p> 將例程1用VC++打開,修改錯(cuò)誤使程序能夠運(yùn)行。理解編譯錯(cuò)誤,運(yùn)行錯(cuò)誤等。</p><p><b> 2、文件操作</b></p><p> 寫一個(gè)檔案文件保存以下內(nèi)容:</p><
5、;p> 學(xué)生姓名,性別,年齡,家庭住址,電話,電子郵件,愛好等。</p><p> 再以上基礎(chǔ)上進(jìn)行該文件的讀出并可編輯瀏覽顯示。</p><p><b> 3、圖形編程</b></p><p> 提供一個(gè)圖形工具界面,讓用戶能夠畫出直線,橢圓,多邊形等幾何元素,結(jié)果可以保存并可讀出。</p><p>&l
6、t;b> 4、字符串操作</b></p><p> 能夠從磁盤上選擇打開文本文檔,讀入所有內(nèi)容并顯示,統(tǒng)計(jì)所有的字符數(shù)目,單詞數(shù)目,中文字符串的數(shù)目。</p><p><b> 5、動(dòng)態(tài)鏈接庫(kù)</b></p><p> 目的:了解MFC支持的三種動(dòng)態(tài)鏈接庫(kù):Win32DLL,MFC常規(guī)DLL, MFC擴(kuò)展庫(kù)。掌握封裝D
7、LL的基本方法。</p><p><b> 二、綜合題:</b></p><p><b> 文件編輯</b></p><p> 創(chuàng)建一個(gè)多文檔工程,實(shí)現(xiàn)對(duì)于磁盤文件的瀏覽,編輯等功能。</p><p> 能夠以文本文件,二進(jìn)制文件方式打開文件;</p><p><
8、;b> 支持剪貼板功能;</b></p><p> 支持搜索,查找,替換功能;</p><p><b> 支持文件定位;</b></p><p><b> 基本步驟:</b></p><p> (1)數(shù)據(jù)庫(kù)后臺(tái)設(shè)計(jì),數(shù)據(jù)準(zhǔn)備;</p><p>&l
9、t;b> (2)界面設(shè)計(jì);</b></p><p><b> (3)功能實(shí)現(xiàn);</b></p><p><b> (4)測(cè)試。</b></p><p><b> 實(shí)驗(yàn)環(huán)境</b></p><p><b> VC++ 6.0</b>
10、;</p><p><b> 實(shí)驗(yàn)步驟</b></p><p><b> 基礎(chǔ)題</b></p><p> 題目1 基本環(huán)境調(diào)測(cè)</p><p><b> 1.1實(shí)驗(yàn)?zāi)康模?lt;/b></p><p> 該程序計(jì)算任意數(shù)目以內(nèi)的素?cái)?shù)并且輸出,要輸入
11、范圍參數(shù)。修改給出的這段程序,使之能夠運(yùn)行,理解編譯錯(cuò)誤,運(yùn)行錯(cuò)誤等。</p><p><b> 1.2程序說明:</b></p><p> 本題是一道改錯(cuò)題,根據(jù)已經(jīng)給出的例程1進(jìn)行改錯(cuò)及完善的操作。打開VC++6.0,將例程1打開,點(diǎn)編譯時(shí)會(huì)提示有</p><p> 根據(jù)錯(cuò)誤所在行數(shù),分析代碼修改代碼,其中的一個(gè)錯(cuò)誤是error 是C
12、2106: '=' : left operand must be l-value混淆了邏輯的等于號(hào)和賦值的等號(hào);還有的error 是C2181: illegal else without matching if,if少了一個(gè)配套的大括號(hào)。重新編譯,鏈接都沒有錯(cuò)誤,在運(yùn)行的時(shí)候,當(dāng)輸入100,200等較大的數(shù)求所有素?cái)?shù)時(shí)出現(xiàn)下面的狀況:只需將存放素?cái)?shù)的數(shù)組容量變大,變?yōu)镻rimes[200]或更大</p>&
13、lt;p><b> 1.3測(cè)試結(jié)果:</b></p><p> 總結(jié)分析:在調(diào)試的過程中,通過雙擊錯(cuò)誤提示很輕松的將前兩個(gè)編譯錯(cuò)誤很容易改出來了,存放素?cái)?shù)的數(shù)組定義的太小而導(dǎo)致的問題則比較隱蔽,通過這個(gè)題目我對(duì)compiling,linking,build有了進(jìn)一步的理解。</p><p><b> 1.4程序:</b></p&
14、gt;<p> void CFund1Dlg::OnButton1() </p><p><b> {</b></p><p> UpdateData();</p><p> int Primes[200];//存放素?cái)?shù)的數(shù)組.</p><p> int index=0;</p>&
15、lt;p> //簡(jiǎn)單的求素?cái)?shù)算法.</p><p> bool flag=true;</p><p> for(int m=2;m<=m_limit;m++)</p><p><b> { </b></p><p> for(int i=2;i<m;i++)</p><
16、;p><b> {</b></p><p> if(m%i==0)</p><p><b> {</b></p><p> flag=false;</p><p><b> break;}</b></p><p><b> e
17、lse</b></p><p> flag=true;</p><p><b> }</b></p><p> if(flag==true)</p><p> Primes[index++]=m;</p><p><b> } </b></p&g
18、t;<p> CWnd *pWnd=GetDlgItem(IDC_STATICOUTPUT);</p><p> CString str;</p><p> str.Format("%d以內(nèi)的素?cái)?shù)有%d個(gè):\n\n",m_limit,index);</p><p> for(int i=0;i<index;i++){&
19、lt;/p><p> char buf[10];</p><p> sprintf(buf,"%d ",Primes[i]);</p><p><b> str+=buf;</b></p><p><b> }</b></p><p> pWnd-&
20、gt;SetWindowText(str);</p><p><b> }</b></p><p><b> 題目2 文件操作</b></p><p><b> 2.1實(shí)驗(yàn)?zāi)康?lt;/b></p><p> 熟練掌握文件操作,學(xué)會(huì)用Write() 函數(shù)和Read()函數(shù)寫文
21、件和讀文件</p><p> 學(xué)會(huì)建立MFC工程提供比較直觀的對(duì)話框界面供瀏覽 </p><p><b> 2.2程序說明:</b></p><p> 系統(tǒng)提供了一個(gè)控件面板,用鼠標(biāo)選中我們需要的控件,將其放置對(duì)話框,設(shè)計(jì)出我們需要的程序界面。然后在建立類向?qū)е袨榭丶P(guān)聯(lián)一個(gè)變量,分別為m_name,m_age,m_phone,m_ema
22、il,m_address,m_hoppy,均為Cstring類型。然后就是編寫控件消息處理函數(shù),我們需要編寫的是void CMyDlg::OnSave() ,void CMyDlg::OnOpen() ,分別對(duì)應(yīng)控件“打開”“保存”,還需要編寫voidCMyDlg::Display(StuInfo *si)顯示函數(shù)。這樣,這個(gè)程序的基本功能就滿足要求了。</p><p><b> 2.3流程圖:<
23、;/b></p><p><b> 2.4測(cè)試結(jié)果:</b></p><p> 總結(jié)分析:本題主要考察要求的是我們能否學(xué)會(huì)建立MFC工程提供比較直觀的對(duì)話框界面供瀏覽,并編寫相應(yīng)的事件函數(shù),以及熟練掌握文件操作,學(xué)會(huì)用Write() 函數(shù)和Read()函數(shù)寫文件和讀文件。</p><p><b> 2.5關(guān)鍵程序:<
24、/b></p><p><b> //顯示函數(shù)</b></p><p> void CMyDlg::Display(StuInfo *si)</p><p><b> {</b></p><p> //StuInfo si=*m_StuIndex;</p><p&g
25、t; m_name=si->name;</p><p> m_age=si->age;</p><p> m_phone=si->phone;</p><p> m_email=si->email;</p><p> m_hoppy=si->hoppy;</p><p> m_
26、address=si->address;</p><p> UpdateData(FALSE); //UpdateData(FALSE)是將控件的關(guān)聯(lián)變量的值傳給控件并改變控件狀態(tài)</p><p><b> }</b></p><p><b> //保存函數(shù)</b></p><p>
27、 void CMyDlg::OnSave() </p><p><b> {</b></p><p> // TODO: Add your control notification handler code here</p><p> UpdateData(); //UpdateData() 是MFC的窗口函數(shù),用來刷新數(shù)據(jù)的<
28、;/p><p> StuInfo si;</p><p> memset(&si,0,sizeof(StuInfo)); //memset() 函數(shù)常用于內(nèi)存空間初始化</p><p> strcpy(si.name,m_name);</p><p> strcpy(si.phone,m_phone);</p>&
29、lt;p> strcpy(si.email,m_email);</p><p> strcpy(si.address,m_address);</p><p> strcpy(si.hoppy,m_hoppy);</p><p> strcpy(si.age,m_age);</p><p> // write into the
30、file</p><p> CFileDialog fileDlg(FALSE);</p><p> fileDlg.m_ofn.lpstrFilter="Stud Info(*.si)\0*.si\0All Files(*.*)\0*.*\0\0";</p><p> fileDlg.m_ofn.lpstrDefExt="si&
31、quot;;</p><p> if(IDOK==fileDlg.DoModal())</p><p><b> {</b></p><p> CFile file(fileDlg.GetFileName(), CFile::modeCreate | CFile::modeWrite);</p><p> fil
32、e.Write(&si, sizeof(StuInfo));</p><p> file.Close();</p><p><b> }</b></p><p><b> }</b></p><p><b> //打開文件函數(shù)</b></p>&l
33、t;p> void CMyDlg::OnOpen() </p><p><b> {</b></p><p> // TODO: Add your control notification handler code here</p><p> CFileDialog fileDlg(TRUE); //構(gòu)造對(duì)話框?qū)ο螅‵ALSE)
34、表示保存(TRUE)表示打開</p><p> fileDlg.m_ofn.lpstrFilter = "Stud Info(*.si)\0*.si\0All Files(*.*)\0*.*\0\0";</p><p> if(IDOK==fileDlg.DoModal())//DoModal負(fù)責(zé)對(duì)模態(tài)話框的創(chuàng)建和撤銷</p><p><
35、;b> {</b></p><p> CFile file(fileDlg.GetFileName(), CFile::modeRead);</p><p> StuInfo si;</p><p> file.Read(&si,sizeof(StuInfo));</p><p> file.Close()
36、;</p><p> Display(&si);</p><p><b> }</b></p><p><b> }</b></p><p> void CMyDlg::OnAdd() </p><p><b> {</b></p
37、><p> // TODO: Add your control notification handler code here</p><p> UpdateData();</p><p> StuInfo stuinfo;</p><p> memset(&stuinfo,0,sizeof(StuInfo));</p>
38、<p> strcpy(stuinfo.name,m_name);</p><p> strcpy(stuinfo.age,m_age);</p><p> strcpy(stuinfo.phone,m_phone);</p><p> strcpy(stuinfo.hoppy,m_hoppy);</p><p> s
39、trcpy(stuinfo.email,m_email);</p><p> //m_Records.push_back(stuinfo);</p><p> //m_StuIndex=m_Records.end()-1;</p><p><b> 題目三:圖形編輯</b></p><p><b>
40、 3.1實(shí)驗(yàn)?zāi)康?lt;/b></p><p> 1)掌握建立基于MFC的文檔工程的步驟</p><p> 2)熟悉鼠標(biāo)繪圖的機(jī)理,了解鼠標(biāo)消息響應(yīng)函數(shù)框架</p><p><b> 3.2程序說明:</b></p><p> 本題是使用MFC實(shí)現(xiàn)在界面上繪圖的功能,基本包括點(diǎn)、直線、橢圓和矩形。關(guān)鍵問題是
41、確定用戶選擇的圖形類型,從而可以調(diào)用相應(yīng)的類庫(kù),并將類實(shí)例化之后使用其中各種繪圖函數(shù)。同時(shí)需要記錄用戶鼠標(biāo)點(diǎn)擊的操作,獲取鼠標(biāo)指針當(dāng)前的屏幕坐標(biāo),確定圖形的起始位置和結(jié)束位置。</p><p><b> 3.3程序流程圖</b></p><p><b> 3.4測(cè)試結(jié)果:</b></p><p> 結(jié)果分析:程序提供
42、了一個(gè)圖形繪制界面,我們可以畫出直線,橢圓,矩形,繪制的結(jié)果可以通過文件中的保存并可通過“打開”讀出原來原來已經(jīng)保存的圖形。要求我們能夠熟悉鼠標(biāo)繪圖的機(jī)理,了解鼠標(biāo)消息響應(yīng)函數(shù)框架。</p><p><b> 3.5關(guān)鍵程序:</b></p><p> void CGraphicView::OnDraw(CDC* pDC)</p><p>
43、<b> {</b></p><p> CDrawDoc* pDoc = GetDocument();</p><p> ASSERT_VALID(pDoc);</p><p> // TODO: add draw code for native data here</p><p> if (!pDoc)<
44、;/p><p><b> return;</b></p><p> int index;</p><p> index = pDoc->m_ObArray.GetSize();//取得直線的數(shù)目</p><p> for(int i=0;i<index;i++)</p><p>&
45、lt;b> {</b></p><p> CShape * pShape = (CShape*) pDoc->m_ObArray.GetAt(i);</p><p> pShape->Drawing(pDC);</p><p><b> }</b></p><p><b>
46、 }</b></p><p> void CDrawView::OnLButtonDown(UINT nFlags, CPoint point) </p><p><b> {</b></p><p> // TODO: Add your message handler code here and/or call defau
47、lt</p><p> this->last=point;</p><p> CView::OnLButtonDown(nFlags, point);</p><p><b> }</b></p><p> void CDrawView::OnLButtonUp(UINT nFlags, CPoint po
48、int) </p><p><b> {</b></p><p> // TODO: Add your message handler code here and/or call default</p><p> CDrawDoc *pDoc = GetDocument();</p><p> pDoc->
49、AddShape(last,point, m_sType);</p><p> Invalidate();</p><p> CView::OnLButtonUp(nFlags, point);</p><p><b> }</b></p><p> 題目四:字符串的操作</p><p>
50、 4.1實(shí)驗(yàn)?zāi)康?</p><p> 1)熟練掌握字符串處理</p><p> 2)熟練掌握判斷中文字符,英文單詞的方法</p><p> 3)掌握文件操作,如文件讀取,文件存儲(chǔ)</p><p> 4)掌握MFC工程建立方法</p><p><b> 4.2程序說明:</b><
51、;/p><p> 本題是對(duì)文本文件內(nèi)的字符信息做統(tǒng)計(jì)工作。主要思想是通過嵌套判斷來實(shí)現(xiàn)對(duì)字母,字符,漢字的區(qū)分。編寫一個(gè)統(tǒng)計(jì)的函數(shù)Counting(char *p, int length)來統(tǒng)計(jì),字符數(shù)numChar的大小由GetLength()得到,用if((p[i]>='a'&&p[i]<='z')||(p[i]>='A'&
52、;&p[i]<='Z'))判斷是否是英文字母,因?yàn)槲覀冎烙⑽膯卧~的開頭和結(jié)尾都是英文字符,我們不妨設(shè)置bool wordBeg = true,如果是,則numWord++,并且將wordBeg = false,這樣判斷完全部就能得到英文單詞的數(shù)目了。再利用if(p[i]>=0x00&&p[i]<=0x7F)得到ASC碼的數(shù)目,用總的字符數(shù)減去ASC碼的數(shù)目就能得到中文字符數(shù)目的
53、兩倍(因?yàn)橐粋€(gè)中文占兩個(gè)字符)。這樣所要求的都可以求出來了。</p><p> 定義Display()和OnOpen()。把當(dāng)前統(tǒng)計(jì)的數(shù)目分別賦給m_char,m_chinese,m_word,再通過UpdateData(FALSE) 將控件的關(guān)聯(lián)變量的值傳給控件并改變控件狀態(tài)顯示在窗口。OnOpen(),打開一個(gè)文本,CFileDialog fileDlg(TRUE);dwFileLen = file.Get
54、Length(),用file.Read(pBuf, dwFileLen)讀取dwFileLen長(zhǎng)度的文件,用Close()關(guān)閉文件。</p><p><b> 4.3程序流程圖:</b></p><p><b> 4.4測(cè)試結(jié)果:</b></p><p> 總結(jié)分析:本題只要考察我們是否能夠熟練掌握字符串處理,掌握判
55、斷中文字符,英文單詞的方法掌握文件操作,如文件讀取,文件存儲(chǔ)掌握MFC工程建立方法。</p><p><b> 4.5關(guān)鍵程序:</b></p><p> void CMyDlg::OnOpen() </p><p><b> {</b></p><p> // TODO: Add your
56、 control notification handler code here</p><p> CFileDialog fileDlg(TRUE); //構(gòu)造對(duì)話框?qū)ο螅‵ALSE)表示保存(TRUE)表示打開</p><p> fileDlg.m_ofn.lpstrFilter="Text Files(*.txt)\0*.txt\0\0";</p>
57、;<p> if(IDOK==fileDlg.DoModal())</p><p><b> {</b></p><p> CFile file(fileDlg.GetFileName(), CFile::modeRead);</p><p> char *pBuf;</p><p> DWORD
58、 dwFileLen;</p><p> dwFileLen = file.GetLength(); //長(zhǎng)度</p><p> // This the # of total char</p><p> this->m_char= dwFileLen;</p><p> pBuf = new char[dwFileLen];&
59、lt;/p><p> file.Read(pBuf, dwFileLen);</p><p> file.Close();</p><p> m_content =pBuf;</p><p> Counting(pBuf, dwFileLen);</p><p><b> }</b><
60、/p><p><b> }</b></p><p> void CMyDlg::Counting(char *p, int length) //計(jì)算模塊</p><p><b> {</b></p><p> bool wordBeg = true;</p><p>
61、 bool flag = true;</p><p> int numAsc=0;</p><p> this->m_word=0;</p><p> for(int i=0; i<length; i++)</p><p><b> {</b></p><p> if((p[
62、i]>='a'&&p[i]<='z')||(p[i]>='A'&&p[i]<='Z'))</p><p><b> {</b></p><p> if(wordBeg)</p><p><b> {</b
63、></p><p> this->m_word++;</p><p> wordBeg = false;</p><p><b> }</b></p><p><b> }</b></p><p><b> else </b>
64、</p><p><b> {</b></p><p> wordBeg = true;</p><p><b> }</b></p><p> if(p[i]>=0x00&&p[i]<=0x7F)</p><p><b> n
65、umAsc++;</b></p><p><b> }</b></p><p> this->m_chinese = (length-numAsc)/2;</p><p> //this->numChar=length-numChinese;</p><p> UpdateData(FAL
66、SE);</p><p><b> }</b></p><p><b> 題目五:動(dòng)態(tài)鏈接庫(kù)</b></p><p><b> 5.1實(shí)驗(yàn)?zāi)康?lt;/b></p><p> 了解MFC 支持的三種動(dòng)態(tài)鏈接庫(kù):Win32DLL,MFC 常規(guī)DLL, MFC擴(kuò)展庫(kù)。掌握封裝DL
67、L的基本方法。</p><p><b> 5.2程序說明:</b></p><p> 本題是使用動(dòng)態(tài)鏈接庫(kù)來完成一些簡(jiǎn)單的程序算法。動(dòng)態(tài)鏈接庫(kù)分為Win32、MFC及MFC擴(kuò)展三種,分別通過不同的方法來建立。動(dòng)態(tài)鏈接庫(kù)編寫完畢后,生成Dll和Lib文件,將其復(fù)制到測(cè)試工程的Debug文件夾下,并在工程中與Lib文件關(guān)聯(lián)之后就可以調(diào)用動(dòng)態(tài)鏈接庫(kù)中的函數(shù)或方法<
68、/p><p><b> 5.3測(cè)試結(jié)果:</b></p><p> 總結(jié)分析:本題主要要求我們了解MFC 支持的三種動(dòng)態(tài)鏈接庫(kù):Win32DLL,MFC 常規(guī)DLL, MFC擴(kuò)展庫(kù),掌握封裝DLL的基本方法。</p><p><b> 5.4關(guān)鍵程序:</b></p><p> void CTe
69、stDLLDlg::OnButtonAdd() </p><p><b> {</b></p><p> // TODO: Add your control notification handler code here</p><p> HINSTANCE hInst;</p><p> hInst=LoadLi
70、brary("Win32DLL.dll");</p><p> typedef int (*ADDPROC)(int a);</p><p> ADDPROC Add=(ADDPROC)GetProcAddress(hInst,"add");</p><p><b> if(!Add)</b><
71、;/p><p><b> {</b></p><p> MessageBox("獲取函數(shù)地址失敗");</p><p><b> return;</b></p><p><b> }</b></p><p> UpdateDat
72、a(TRUE);</p><p> m_r1=Add(m_n);</p><p> UpdateData(FALSE);</p><p><b> }</b></p><p> void CTestDLLDlg::OnButtonfactorial() </p><p><b>
73、 {</b></p><p> // TODO: Add your control notification handler code here</p><p> HINSTANCE hInst;</p><p> hInst=LoadLibrary("MFCDLL.dll");</p><p> t
74、ypedef int (*ADDPROC)(int a);</p><p> ADDPROC Jiechen=(ADDPROC)GetProcAddress(hInst,"Jiechen");</p><p> if(!Jiechen)</p><p><b> {</b></p><p>
75、MessageBox("獲取函數(shù)地址失敗");</p><p><b> return;</b></p><p><b> }</b></p><p> UpdateData(true);</p><p> m_r2=Jiechen(m_n2);</p>&
76、lt;p> UpdateData(FALSE);</p><p><b> }</b></p><p><b> 二 、綜合題。</b></p><p><b> 實(shí)驗(yàn)?zāi)康模?lt;/b></p><p> 首先創(chuàng)建一個(gè)多文檔工程,實(shí)現(xiàn)對(duì)于磁盤文件的瀏覽,編輯等功能。
77、能夠以文本文件,二進(jìn)制文件方式打開文件;支持剪貼板功能;支持搜索,查找,替換功能;功能參考了磁盤文件工具程序UltraEdit 。</p><p><b> 程序說明:</b></p><p><b> 功能要求分析:</b></p><p> 1. 文件讀取功能:</p><p> 即利用
78、目標(biāo)系統(tǒng)能通過讀取功能,一方面能夠顯示文件的原來數(shù)據(jù)形式,另一方面也能夠把原來的數(shù)據(jù)形式通過編碼轉(zhuǎn)化為用戶很方便識(shí)別的十六進(jìn)制數(shù)據(jù),進(jìn)而為用戶方便的了解文件的存儲(chǔ)數(shù)據(jù)。</p><p> 2. 文件編輯功能:</p><p> 即利用目標(biāo)系統(tǒng)能通過編輯功能,把對(duì)讀取的文件數(shù)據(jù)進(jìn)行修改,添加,刪除,進(jìn)而實(shí)現(xiàn)對(duì)原文件的更新的功能,以方便用戶能夠?qū)ξ募姆奖愕牟僮鳌?lt;/p>&
79、lt;p><b> 3文件保存功能:</b></p><p> 即利用目標(biāo)系統(tǒng)能通過保存功能,把對(duì)讀取的文件數(shù)據(jù)進(jìn)行修改和編輯過后的數(shù)據(jù)在保存回原文件,以實(shí)現(xiàn)對(duì)原文件的保存</p><p><b> 測(cè)試結(jié)果:</b></p><p><b> 關(guān)鍵程序:</b></p>
80、<p> void CHexEditView::OnDraw(CDC* pDC)</p><p><b> {</b></p><p><b> CRect rc;</b></p><p> GetClientRect(rc);</p><p> if(m_text == NUL
81、L)</p><p><b> {</b></p><p> pDC->FillRect(rc, &CBrush(RGB(255,255,255)));</p><p><b> return;</b></p><p><b> }</b></p&g
82、t;<p><b> CDCdc;</b></p><p> dc.CreateCompatibleDC(pDC);</p><p> CBitmap bm;</p><p> bm.CreateCompatibleBitmap(pDC, rc.Width(), rc.Height());</p><
83、p> dc.SelectObject(bm);</p><p> dc.SetBoundsRect(&rc, DCB_DISABLE);</p><p> CFont font;</p><p> font.CreateFont ( m_LineHeight, 0, 0, 0, FW_NORMAL, 0, 0, 0, DEFAULT_CHARS
84、ET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY, FIXED_PITCH | FF_MODERN, 0 );</p><p> CFont* oldFont = dc.SelectObject ( &font );</p><p> CBrush bkBrush(RGB(255,255,255));<
85、;/p><p> dc.FillRect(rc, &bkBrush);</p><p> UINT lineCY, lineCX;</p><p> UINT dwPos;</p><p> char currentchar[20];</p><p> UCHAR text[17];</p>
86、<p> int lineBeginPos;</p><p> m_HexStart = m_CharWidth * (14 - m_LeftChar);//計(jì)算二進(jìn)制顯示開始位置</p><p> m_TextStart = m_HexStart + m_CharWidth * 50;//計(jì)算ASCII碼顯示開始位置</p><p> fo
87、r(UINT i = 0; i < m_PageRows; i++)//按行顯示數(shù)據(jù)</p><p><b> {</b></p><p> lineBeginPos = (m_TopLine+i-1)*16;//計(jì)算當(dāng)前行開始字符相對(duì)于總緩沖區(qū)的位置</p><p> lineCY = i * m_LineHeight
88、;//當(dāng)前行的Y坐標(biāo)</p><p> sprintf(currentchar, "%08Xh:", lineBeginPos);</p><p> dc.SetTextColor(::GetSysColor(COLOR_WINDOWTEXT));</p><p> dc.SetBkColor(RGB(255,255,255));
89、</p><p> dc.TextOut (m_CharWidth*(2-m_LeftChar), lineCY, currentchar);//顯示地址基值</p><p> memcpy(text,&m_text[lineBeginPos],16);//取當(dāng)前行數(shù)據(jù)</p><p> text[16] = '\0';</p
90、><p> for(int l = 0; l < 16; l++)</p><p><b> {</b></p><p> if(text[l] < 32)</p><p> text[l] = 46;//不可見ASCII字符用.表示</p><p><b> }&l
91、t;/b></p><p> if(lineBeginPos+16 > m_CharCount)</p><p><b> {</b></p><p> text[m_CharCount%16] = '\0';//最后的數(shù)據(jù)不滿一行時(shí)</p><p><b> }</
92、b></p><p> dc.TextOut (m_TextStart, lineCY, text);//顯示右面的ASCII字符</p><p> //被選中時(shí)反色顯示右面的ASCII字符</p><p> int selStart = (m_SelStart - lineBeginPos)<0? 0:(m_SelStart - lineBegi
93、nPos);</p><p> int selEnd = (m_SelEnd - lineBeginPos)>15? 15:(m_SelEnd - lineBeginPos);</p><p> if(selStart <= 15 && selEnd >= 0)</p><p><b> {</b><
94、;/p><p> dc.SetBkColor(::GetSysColor ( COLOR_HIGHLIGHT ));</p><p> dc.SetTextColor(::GetSysColor ( COLOR_HIGHLIGHTTEXT ));</p><p> text[selEnd+1]='\0';</p><p>
95、 dc.TextOut (m_TextStart+selStart*m_CharWidth, lineCY, &text[selStart]);</p><p><b> }</b></p><p><b> else</b></p><p><b> {</b></p>
96、<p> dc.SetTextColor(::GetSysColor(COLOR_WINDOWTEXT));</p><p> dc.SetBkColor(RGB(255,255,255));</p><p><b> }</b></p><p> for(UINT j = 0; j < 16; j++)</p&g
97、t;<p><b> {</b></p><p> dwPos = j + lineBeginPos;</p><p> if(dwPos > (m_CharCount-1))</p><p> goto bitblt;//顯示完最后一行退出</p><p> if(dwPos >
98、;= m_SelStart && dwPos <= m_SelEnd)</p><p><b> {</b></p><p> dc.SetBkColor(::GetSysColor ( COLOR_HIGHLIGHT ));</p><p> dc.SetTextColor(::GetSysColor ( COLO
99、R_HIGHLIGHTTEXT ));</p><p><b> }</b></p><p><b> else</b></p><p><b> {</b></p><p> dc.SetTextColor(::GetSysColor(COLOR_WINDOWTEXT
100、));</p><p> dc.SetBkColor(RGB(255,255,255));</p><p><b> }</b></p><p> lineCX = m_HexStart + j * m_CharWidth *3 ;//計(jì)算當(dāng)前要顯示的二進(jìn)制字符的位置</p><p> sprintf(c
101、urrentchar, "%02X", ((UCHAR *)m_text)[dwPos]);</p><p> dc.TextOut (lineCX, lineCY, currentchar);//顯示二進(jìn)制字符</p><p> if(dwPos == m_SelEnd)//選中單個(gè)字符的顯示</p><p>&
102、lt;b> {</b></p><p> dc.SetTextColor(::GetSysColor(COLOR_HIGHLIGHTTEXT));</p><p> dc.SetBkColor(RGB(255,0,0));</p><p> UCHAR cHex = m_text[dwPos];</p><p>
103、if(m_bFirst)//二進(jìn)制字符的高四位選中</p><p><b> {</b></p><p> cHex = cHex & 0xf0;</p><p> cHex = cHex >> 4;</p><p> sprintf(currentchar, "%X",
104、cHex);</p><p> dc.TextOut (lineCX, lineCY, currentchar);</p><p><b> }</b></p><p><b> else</b></p><p><b> {</b></p><p&
105、gt; lineCX = m_HexStart + j * m_CharWidth *3 + m_CharWidth;</p><p> cHex = cHex & 0x0f;</p><p> sprintf(currentchar, "%X", cHex);</p><p> dc.TextOut (lineCX, lineC
106、Y, currentchar);</p><p><b> }</b></p><p><b> }</b></p><p><b> }</b></p><p><b> }</b></p><p><b>
107、bitblt:</b></p><p> pDC->BitBlt(0, 0, rc.Width(), rc.Height(), &dc, 0, 0, SRCCOPY);</p><p> dc.DeleteDC ();}</p><p><b> 小結(jié)</b></p><p> 經(jīng)過四周
108、的c++軟件設(shè)計(jì),我能明顯感受到我在編程語言的應(yīng)用上有了顯著提高。由于以前接觸c++的時(shí)候基本是編寫一個(gè)控制臺(tái)應(yīng)用程序,而這一次基本上是必須使用MFC編寫。而對(duì)此我基本上就是第一次遇到,并且由于大一c++課程結(jié)束后就幾乎沒怎么碰過C++等原因,所以在實(shí)驗(yàn)周開始后我除了找出原來教材開始溫故知新,我還去圖書館借了《可視化程序設(shè)計(jì)Visual C++》、《Visual C++程序設(shè)計(jì)實(shí)用案例教程》兩本書。</p><p&g
109、t; 一開始編程有許多不懂的或記得不帶清楚的地方, 我就一一 翻書尋找答案解決問題。 隨著一個(gè)一個(gè)困難的解決, 我的第一個(gè)程序終于可以完成題目所要求的功能。此外,咨詢老師和其他同學(xué)也是十分必須的。來自于別人的幫助也十分重要,有時(shí)候別人的點(diǎn)撥和指導(dǎo)會(huì)讓你茅塞頓開,幫助我們更準(zhǔn)確的理解題意,比如動(dòng)態(tài)鏈接庫(kù),那個(gè)開始根本讓我摸不著頭腦,經(jīng)過別人的指導(dǎo),就知道怎么入手了。 </p><p> 對(duì)于編程,我個(gè)人覺得,修
110、改和程序的調(diào)試需要有細(xì)心和耐心。細(xì)心可以讓我們發(fā)現(xiàn)微小的錯(cuò)誤,耐心幫我們很好的解決這些錯(cuò)誤。面對(duì)幾百行代碼,不斷的設(shè)置斷點(diǎn),不斷的調(diào)試,實(shí)在是一件很繁瑣的事情。也許程序員的辛苦也在此處。但是,每當(dāng)一個(gè)程序調(diào)試成功,都是那么地讓人振奮人心。辛苦編寫代碼,修改,程序調(diào)試成功,一系列流程中都伴隨著煩躁和耐心的較量。</p><p> 在這四周的軟件設(shè)計(jì)中我體會(huì)到失敗的無耐,同時(shí)也體會(huì)到了成功的喜悅。 總的來說,這次程
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- vc++課程設(shè)計(jì)報(bào)告
- vc++網(wǎng)絡(luò)聊天軟件課程設(shè)計(jì)
- vc++課程設(shè)計(jì)報(bào)告--對(duì)抗游戲
- vc++課程設(shè)計(jì)報(bào)告----對(duì)抗游戲
- vc++課設(shè)課程設(shè)計(jì)報(bào)告
- vc++課程設(shè)計(jì)報(bào)告---球員管理系統(tǒng)
- vc++課程設(shè)計(jì)實(shí)驗(yàn)報(bào)告---對(duì)抗游戲
- vc++課程設(shè)計(jì)報(bào)告---橫向繪制余弦曲線
- vc++俄羅斯方塊課程設(shè)計(jì)報(bào)告
- vc++庫(kù)函數(shù)課程設(shè)計(jì)
- vc++課程設(shè)計(jì)-- 餐飲管理系統(tǒng)
- vc++課程設(shè)計(jì)--工資管理
- vc++課程設(shè)計(jì)--工資管理
- vc++課程設(shè)計(jì)報(bào)告--圖書館管理系統(tǒng)
- VC++課程設(shè)計(jì)--工資管理.doc
- vc++數(shù)據(jù)庫(kù)課程設(shè)計(jì)報(bào)告---外賣訂餐平臺(tái)
- vc++課程設(shè)計(jì)報(bào)告 paint board 簡(jiǎn)易畫圖板
- vc++課程設(shè)計(jì)報(bào)告-小型超市商品管理系統(tǒng)
- vc++課程設(shè)計(jì)報(bào)告--簡(jiǎn)單科學(xué)計(jì)算器設(shè)計(jì)
- vc++課程設(shè)計(jì)----用winsock實(shí)現(xiàn)聊天
評(píng)論
0/150
提交評(píng)論