vc++軟件課程設計報告_第1頁
已閱讀1頁,還剩23頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

1、<p><b>  通信與信息工程學院</b></p><p>  2010 /2011 學年 第 2 學期</p><p>  課程設計 實驗報告</p><p>  模 塊 名 稱 VC++軟件設計</p><p>  專 業(yè) 電子信息工程 </p&g

2、t;<p>  學 生 班 級 </p><p>  學 生 學 號 </p><p>  學 生 姓 名 </p><p>  指 導 教 師 </p><p>  

3、日 期 2012 年 5 月 </p><p><b>  實驗內(nèi)容</b></p><p>  本課程設計分成練習題和綜合題兩部分。基礎練習題11道中每個學生選擇5個完成,要求如下:必做:1;2,3選擇其一;4,5選擇其一;6- 11選擇其二。綜合課題任選一道。</p><p><b>  一 、 練習題:

4、</b></p><p><b>  1、基本環(huán)境調(diào)試</b></p><p>  將例程1用VC++打開,修改錯誤使程序能夠運行。理解編譯錯誤,運行錯誤等。</p><p><b>  2、文件操作</b></p><p>  寫一個檔案文件保存以下內(nèi)容:</p><

5、;p>  學生姓名,性別,年齡,家庭住址,電話,電子郵件,愛好等。</p><p>  再以上基礎上進行該文件的讀出并可編輯瀏覽顯示。</p><p><b>  3、圖形編程</b></p><p>  提供一個圖形工具界面,讓用戶能夠畫出直線,橢圓,多邊形等幾何元素,結果可以保存并可讀出。</p><p>&l

6、t;b>  4、字符串操作</b></p><p>  能夠從磁盤上選擇打開文本文檔,讀入所有內(nèi)容并顯示,統(tǒng)計所有的字符數(shù)目,單詞數(shù)目,中文字符串的數(shù)目。</p><p><b>  5、動態(tài)鏈接庫</b></p><p>  目的:了解MFC支持的三種動態(tài)鏈接庫:Win32DLL,MFC常規(guī)DLL, MFC擴展庫。掌握封裝D

7、LL的基本方法。</p><p><b>  二、綜合題:</b></p><p><b>  文件編輯</b></p><p>  創(chuàng)建一個多文檔工程,實現(xiàn)對于磁盤文件的瀏覽,編輯等功能。</p><p>  能夠以文本文件,二進制文件方式打開文件;</p><p><

8、;b>  支持剪貼板功能;</b></p><p>  支持搜索,查找,替換功能;</p><p><b>  支持文件定位;</b></p><p><b>  基本步驟:</b></p><p>  (1)數(shù)據(jù)庫后臺設計,數(shù)據(jù)準備;</p><p>&l

9、t;b>  (2)界面設計;</b></p><p><b>  (3)功能實現(xiàn);</b></p><p><b>  (4)測試。</b></p><p><b>  實驗環(huán)境</b></p><p><b>  VC++ 6.0</b>

10、;</p><p><b>  實驗步驟</b></p><p><b>  基礎題</b></p><p>  題目1 基本環(huán)境調(diào)測</p><p><b>  1.1實驗目的:</b></p><p>  該程序計算任意數(shù)目以內(nèi)的素數(shù)并且輸出,要輸入

11、范圍參數(shù)。修改給出的這段程序,使之能夠運行,理解編譯錯誤,運行錯誤等。</p><p><b>  1.2程序說明:</b></p><p>  本題是一道改錯題,根據(jù)已經(jīng)給出的例程1進行改錯及完善的操作。打開VC++6.0,將例程1打開,點編譯時會提示有</p><p>  根據(jù)錯誤所在行數(shù),分析代碼修改代碼,其中的一個錯誤是error 是C

12、2106: '=' : left operand must be l-value混淆了邏輯的等于號和賦值的等號;還有的error 是C2181: illegal else without matching if,if少了一個配套的大括號。重新編譯,鏈接都沒有錯誤,在運行的時候,當輸入100,200等較大的數(shù)求所有素數(shù)時出現(xiàn)下面的狀況:只需將存放素數(shù)的數(shù)組容量變大,變?yōu)镻rimes[200]或更大</p>&

13、lt;p><b>  1.3測試結果:</b></p><p>  總結分析:在調(diào)試的過程中,通過雙擊錯誤提示很輕松的將前兩個編譯錯誤很容易改出來了,存放素數(shù)的數(shù)組定義的太小而導致的問題則比較隱蔽,通過這個題目我對compiling,linking,build有了進一步的理解。</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];//存放素數(shù)的數(shù)組.</p><p>  int index=0;</p>&

15、lt;p>  //簡單的求素數(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)的素數(shù)有%d個:\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實驗目的</b></p><p>  熟練掌握文件操作,學會用Write() 函數(shù)和Read()函數(shù)寫文

21、件和讀文件</p><p>  學會建立MFC工程提供比較直觀的對話框界面供瀏覽 </p><p><b>  2.2程序說明:</b></p><p>  系統(tǒng)提供了一個控件面板,用鼠標選中我們需要的控件,將其放置對話框,設計出我們需要的程序界面。然后在建立類向?qū)е袨榭丶P聯(lián)一個變量,分別為m_name,m_age,m_phone,m_ema

22、il,m_address,m_hoppy,均為Cstring類型。然后就是編寫控件消息處理函數(shù),我們需要編寫的是void CMyDlg::OnSave() ,void CMyDlg::OnOpen() ,分別對應控件“打開”“保存”,還需要編寫voidCMyDlg::Display(StuInfo *si)顯示函數(shù)。這樣,這個程序的基本功能就滿足要求了。</p><p><b>  2.3流程圖:<

23、;/b></p><p><b>  2.4測試結果:</b></p><p>  總結分析:本題主要考察要求的是我們能否學會建立MFC工程提供比較直觀的對話框界面供瀏覽,并編寫相應的事件函數(shù),以及熟練掌握文件操作,學會用Write() 函數(shù)和Read()函數(shù)寫文件和讀文件。</p><p><b>  2.5關鍵程序:<

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)是將控件的關聯(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); //構造對話框?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負責對模態(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實驗目的</b></p><p>  1)掌握建立基于MFC的文檔工程的步驟</p><p>  2)熟悉鼠標繪圖的機理,了解鼠標消息響應函數(shù)框架</p><p><b>  3.2程序說明:</b></p><p>  本題是使用MFC實現(xiàn)在界面上繪圖的功能,基本包括點、直線、橢圓和矩形。關鍵問題是

41、確定用戶選擇的圖形類型,從而可以調(diào)用相應的類庫,并將類實例化之后使用其中各種繪圖函數(shù)。同時需要記錄用戶鼠標點擊的操作,獲取鼠標指針當前的屏幕坐標,確定圖形的起始位置和結束位置。</p><p><b>  3.3程序流程圖</b></p><p><b>  3.4測試結果:</b></p><p>  結果分析:程序提供

42、了一個圖形繪制界面,我們可以畫出直線,橢圓,矩形,繪制的結果可以通過文件中的保存并可通過“打開”讀出原來原來已經(jīng)保存的圖形。要求我們能夠熟悉鼠標繪圖的機理,了解鼠標消息響應函數(shù)框架。</p><p><b>  3.5關鍵程序:</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實驗目的 </p><p>  1)熟練掌握字符串處理</p><p>  2)熟練掌握判斷中文字符,英文單詞的方法</p><p>  3)掌握文件操作,如文件讀取,文件存儲</p><p>  4)掌握MFC工程建立方法</p><p><b>  4.2程序說明:</b><

51、;/p><p>  本題是對文本文件內(nèi)的字符信息做統(tǒng)計工作。主要思想是通過嵌套判斷來實現(xiàn)對字母,字符,漢字的區(qū)分。編寫一個統(tǒng)計的函數(shù)Counting(char *p, int length)來統(tǒng)計,字符數(shù)numChar的大小由GetLength()得到,用if((p[i]>='a'&&p[i]<='z')||(p[i]>='A'&

52、;&p[i]<='Z'))判斷是否是英文字母,因為我們知道英文單詞的開頭和結尾都是英文字符,我們不妨設置bool wordBeg = true,如果是,則numWord++,并且將wordBeg = false,這樣判斷完全部就能得到英文單詞的數(shù)目了。再利用if(p[i]>=0x00&&p[i]<=0x7F)得到ASC碼的數(shù)目,用總的字符數(shù)減去ASC碼的數(shù)目就能得到中文字符數(shù)目的

53、兩倍(因為一個中文占兩個字符)。這樣所要求的都可以求出來了。</p><p>  定義Display()和OnOpen()。把當前統(tǒng)計的數(shù)目分別賦給m_char,m_chinese,m_word,再通過UpdateData(FALSE) 將控件的關聯(lián)變量的值傳給控件并改變控件狀態(tài)顯示在窗口。OnOpen(),打開一個文本,CFileDialog fileDlg(TRUE);dwFileLen = file.Get

54、Length(),用file.Read(pBuf, dwFileLen)讀取dwFileLen長度的文件,用Close()關閉文件。</p><p><b>  4.3程序流程圖:</b></p><p><b>  4.4測試結果:</b></p><p>  總結分析:本題只要考察我們是否能夠熟練掌握字符串處理,掌握判

55、斷中文字符,英文單詞的方法掌握文件操作,如文件讀取,文件存儲掌握MFC工程建立方法。</p><p><b>  4.5關鍵程序:</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); //構造對話框?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(); //長度</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) //計算模塊</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>  題目五:動態(tài)鏈接庫</b></p><p><b>  5.1實驗目的</b></p><p>  了解MFC 支持的三種動態(tài)鏈接庫:Win32DLL,MFC 常規(guī)DLL, MFC擴展庫。掌握封裝DL

67、L的基本方法。</p><p><b>  5.2程序說明:</b></p><p>  本題是使用動態(tài)鏈接庫來完成一些簡單的程序算法。動態(tài)鏈接庫分為Win32、MFC及MFC擴展三種,分別通過不同的方法來建立。動態(tài)鏈接庫編寫完畢后,生成Dll和Lib文件,將其復制到測試工程的Debug文件夾下,并在工程中與Lib文件關聯(lián)之后就可以調(diào)用動態(tài)鏈接庫中的函數(shù)或方法<

68、/p><p><b>  5.3測試結果:</b></p><p>  總結分析:本題主要要求我們了解MFC 支持的三種動態(tài)鏈接庫:Win32DLL,MFC 常規(guī)DLL, MFC擴展庫,掌握封裝DLL的基本方法。</p><p><b>  5.4關鍵程序:</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>  實驗目的:</b></p><p>  首先創(chuàng)建一個多文檔工程,實現(xiàn)對于磁盤文件的瀏覽,編輯等功能。

77、能夠以文本文件,二進制文件方式打開文件;支持剪貼板功能;支持搜索,查找,替換功能;功能參考了磁盤文件工具程序UltraEdit 。</p><p><b>  程序說明:</b></p><p><b>  功能要求分析:</b></p><p>  1. 文件讀取功能:</p><p>  即利用

78、目標系統(tǒng)能通過讀取功能,一方面能夠顯示文件的原來數(shù)據(jù)形式,另一方面也能夠把原來的數(shù)據(jù)形式通過編碼轉(zhuǎn)化為用戶很方便識別的十六進制數(shù)據(jù),進而為用戶方便的了解文件的存儲數(shù)據(jù)。</p><p>  2. 文件編輯功能:</p><p>  即利用目標系統(tǒng)能通過編輯功能,把對讀取的文件數(shù)據(jù)進行修改,添加,刪除,進而實現(xiàn)對原文件的更新的功能,以方便用戶能夠?qū)ξ募姆奖愕牟僮鳌?lt;/p>&

79、lt;p><b>  3文件保存功能:</b></p><p>  即利用目標系統(tǒng)能通過保存功能,把對讀取的文件數(shù)據(jù)進行修改和編輯過后的數(shù)據(jù)在保存回原文件,以實現(xiàn)對原文件的保存</p><p><b>  測試結果:</b></p><p><b>  關鍵程序:</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);//計算二進制顯示開始位置</p><p>  m_TextStart = m_HexStart + m_CharWidth * 50;//計算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;//計算當前行開始字符相對于總緩沖區(qū)的位置</p><p>  lineCY = i * m_LineHeight

88、;//當前行的Y坐標</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);//取當前行數(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ù)不滿一行時</p><p><b>  }</

92、b></p><p>  dc.TextOut (m_TextStart, lineCY, text);//顯示右面的ASCII字符</p><p>  //被選中時反色顯示右面的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 ;//計算當前要顯示的二進制字符的位置</p><p>  sprintf(c

101、urrentchar, "%02X", ((UCHAR *)m_text)[dwPos]);</p><p>  dc.TextOut (lineCX, lineCY, currentchar);//顯示二進制字符</p><p>  if(dwPos == m_SelEnd)//選中單個字符的顯示</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)//二進制字符的高四位選中</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>  小結</b></p><p>  經(jīng)過四周

108、的c++軟件設計,我能明顯感受到我在編程語言的應用上有了顯著提高。由于以前接觸c++的時候基本是編寫一個控制臺應用程序,而這一次基本上是必須使用MFC編寫。而對此我基本上就是第一次遇到,并且由于大一c++課程結束后就幾乎沒怎么碰過C++等原因,所以在實驗周開始后我除了找出原來教材開始溫故知新,我還去圖書館借了《可視化程序設計Visual C++》、《Visual C++程序設計實用案例教程》兩本書。</p><p&g

109、t;  一開始編程有許多不懂的或記得不帶清楚的地方, 我就一一 翻書尋找答案解決問題。 隨著一個一個困難的解決, 我的第一個程序終于可以完成題目所要求的功能。此外,咨詢老師和其他同學也是十分必須的。來自于別人的幫助也十分重要,有時候別人的點撥和指導會讓你茅塞頓開,幫助我們更準確的理解題意,比如動態(tài)鏈接庫,那個開始根本讓我摸不著頭腦,經(jīng)過別人的指導,就知道怎么入手了。 </p><p>  對于編程,我個人覺得,修

110、改和程序的調(diào)試需要有細心和耐心。細心可以讓我們發(fā)現(xiàn)微小的錯誤,耐心幫我們很好的解決這些錯誤。面對幾百行代碼,不斷的設置斷點,不斷的調(diào)試,實在是一件很繁瑣的事情。也許程序員的辛苦也在此處。但是,每當一個程序調(diào)試成功,都是那么地讓人振奮人心。辛苦編寫代碼,修改,程序調(diào)試成功,一系列流程中都伴隨著煩躁和耐心的較量。</p><p>  在這四周的軟件設計中我體會到失敗的無耐,同時也體會到了成功的喜悅。 總的來說,這次程

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論