2023年全國(guó)碩士研究生考試考研英語(yǔ)一試題真題(含答案詳解+作文范文)_第1頁(yè)
已閱讀1頁(yè),還剩8頁(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)介

1、<p>  《MFC編程及應(yīng)用》課程設(shè)計(jì)報(bào)告</p><p>  題目: 虛擬圓周上計(jì)時(shí)繪制圓 </p><p>  學(xué)號(hào): 姓名: </p><p>  指導(dǎo)老師: </p><p>  時(shí)間: 2011.10.11

2、 </p><p> 評(píng)語(yǔ):</p><p><b>  目 錄</b></p><p><b>  1、設(shè)計(jì)步驟</b></p><p><b>  工程建立</b></p><p><b>  類中新增變量的作用&

3、lt;/b></p><p>  需處理的消息的詳細(xì)代碼</p><p>  1)參數(shù)設(shè)置對(duì)話框操作(無(wú)模式)中的主要函數(shù)及代碼</p><p>  2)視圖類操作中的函數(shù)</p><p><b>  a.所有函數(shù)概述</b></p><p>  b.主要函數(shù)及詳細(xì)代碼,注釋</p&g

4、t;<p>  3)文檔類和框架類的函數(shù)</p><p>  2、遇到的問(wèn)題及解決的辦法</p><p><b>  3、體會(huì)及建議</b></p><p><b>  4、參考文獻(xiàn)</b></p><p><b>  1.設(shè)計(jì)步驟</b></p>

5、<p><b> ?。?)工程建立</b></p><p><b>  建立單文檔程序</b></p><p>  (2)類中新增變量及作用</p><p><b>  Global</b></p><p>  UINT g_uRadius=0; 全局變量用

6、于將對(duì)話框的數(shù)據(jù)傳出到View中</p><p>  UINT g_uVRadius=0; 全局變量用于將對(duì)話框的數(shù)據(jù)傳出到View中</p><p>  UINT m_nTimer; 用于標(biāo)記計(jì)時(shí)器</p><p>  CPtrArray m_vPtsCenter; 用于存儲(chǔ)實(shí)圓的三十六個(gè)圓心point</p><

7、p><b>  View</b></p><p>  BOOL m_Mark; 標(biāo)記對(duì)話框是否已經(jīng)自動(dòng)彈出</p><p>  CToolTipCtrl m_ToolTip; 實(shí)現(xiàn)鼠標(biāo)停留在客戶區(qū)時(shí)彈出提示“點(diǎn)擊開始作圖”</p><p>  int ntimes; 標(biāo)記ontime()執(zhí)行的次數(shù)函數(shù)&l

8、t;/p><p>  char cColor; 標(biāo)記作圖所選的顏色</p><p>  CPen PenBlue; 創(chuàng)建藍(lán)筆</p><p>  CPen PenGreen; 創(chuàng)建綠筆</p><p>  CPen PenRed; 創(chuàng)建紅筆</p><p>  UINT uRadius;

9、 實(shí)圓半徑</p><p>  UINT uVRadius; 虛圓半徑</p><p>  CPoint m_PtCenter; 虛圓中心</p><p>  CMainFrame</p><p>  HICON m_hIcon; 用于設(shè)置窗口及.exe圖標(biāo)</p><p>  C

10、DlgSet的各關(guān)聯(lián)變量</p><p>  CSpinButtonCtrlm_Spnreal; 微調(diào)按鈕</p><p>  CSpinButtonCtrlm_Spinimg; 微調(diào)按鈕</p><p>  CButtonm_Iconbtncancel; 取消鍵</p><p>  CButtonm_Iconbtnok;

11、 確定鍵</p><p>  UINTm_uVRadius; 編輯框</p><p>  UINTm_uRadius; 編輯框</p><p>  (3)需處理的消息的詳細(xì)代碼 (實(shí)現(xiàn)函數(shù)及注釋)</p><p> ?。ㄔ诔绦蛑锌锤忧宄?lt;/p><p>  1)

12、參數(shù)設(shè)置對(duì)話框操作(無(wú)模式)</p><p>  BOOL CDlgSet::OnInitDialog() </p><p><b>  {</b></p><p>  CDialog::OnInitDialog();</p><p>  // TODO: Add extra initialization here<

13、;/p><p>  this->SetIcon(LoadIcon(AfxGetResourceHandle(),MAKEINTRESOURCE(IDI _ICONDLG)),FALSE); //設(shè)置對(duì)話框圖標(biāo) </p><p>  m_Iconbtnok.SetIcon(LoadIcon(AfxGetResourceHandle(),MAKEINTRESOURCE(

14、IDI_ICONOK)));//設(shè)置圖標(biāo)OK按鈕</p><p>  m_Iconbtncancel.SetIcon(LoadIcon(AfxGetResourceHandle(),MAKEINTRESOURCE(IDI_ICONCENCEL)));//設(shè)置圖標(biāo)CENCEL按鈕</p><p>  m_ToolTip.Create(this);

15、 </p><p>  m_ToolTip.AddTool(&m_Iconbtnok,"確定");//OK按鈕提示</p><p>  m_ToolTip.AddTool(&m_Iconbtncancel,"取消");//CENCEL按鈕提示</p><p>  this->m_Spinimg

16、.SetRange(0,1000);//限定微調(diào)按鈕的值得范圍</p><p>  this->m_Spnreal.SetRange(0,1000);</p><p>  this->m_Spinimg.SetPos(0);//設(shè)置微調(diào)按鈕的初值</p><p>  this->m_Spnreal.SetPos(0);</p>

17、<p>  this->UpdateData(FALSE);</p><p>  return TRUE; // return TRUE unless you set the focus to a control</p><p>  // EXCEPTION: OCX Property Pages should return FALSE</p><p

18、><b>  }</b></p><p>  void CDlgSet::OnOK() </p><p><b>  {</b></p><p>  // TODO: Add extra validation here</p><p>  this->UpdateData(); /

19、/更新數(shù)據(jù) </p><p>  g_uRadius=m_uRadius;//將數(shù)據(jù)傳至全局變量</p><p>  g_uVRadius=m_uVRadius;</p><p>  CDialog::OnOK();</p><p><b>  }</b></p><p><b&g

20、t;  2)視圖類操作</b></p><p><b>  a.所有函數(shù)概述</b></p><p>  void OnDraw(CDC* pDC); 窗口變化之后保持圖形位于窗口中心</p><p>  BOOL PreTranslateMessage(MSG* pMsg);發(fā)送消息實(shí)現(xiàn)tooltip提示</p>

21、<p>  void OnLButtonDown(UINT nFlags, CPoint point); 點(diǎn)擊開始作圖</p><p>  void OnFileBlack(); 響應(yīng)按鈕點(diǎn)擊</p><p>  void OnFileBlue(); 響應(yīng)按鈕點(diǎn)擊</p><p>  void OnFileGreen(); 響應(yīng)按鈕點(diǎn)擊</p&

22、gt;<p>  void OnFileRed(); 響應(yīng)按鈕點(diǎn)擊</p><p>  void OnHelp(); 彈出幫助對(duì)話框</p><p>  int OnCreate(LPCREATESTRUCT lpCreateStruct);創(chuàng)建一個(gè)tooltip</p><p>  void OnMouseMove(UINT nF

23、lags, CPoint point); 用addtool()實(shí)現(xiàn)提示</p><p>  void OnPopdlgset(); 建立無(wú)模式對(duì)話框</p><p>  void CleanWindow();清楚屏幕所有圖像</p><p>  void OnStopTimer();停止計(jì)時(shí)器</p><p>  

24、void OnStartTimer();開始計(jì)時(shí)器 </p><p>  void OnTimer(UINT nIDEvent);計(jì)時(shí)器實(shí)現(xiàn)函數(shù),計(jì)時(shí)畫圖</p><p>  void DrawAll();畫出所有的實(shí)圓</p><p>  void GetCenterPoints(CPoint ptCenter,UINT uRadius); 計(jì)算取得

25、實(shí)圓的圓心 </p><p>  void ToCricle(CPoint ptCenter,UINT uRadius); 實(shí)現(xiàn)畫圓</p><p>  b.以下是一些較為重要的函數(shù)的代碼詳細(xì)代碼(其他簡(jiǎn)單函數(shù)略)</p><p>  CMy1010190225View::CMy1010190225View()

26、//構(gòu)造函數(shù)</p><p><b>  {</b></p><p>  // TODO: add construction code here</p><p>  m_dlgset=new CDlgSet; //無(wú)模式對(duì)話框用</p><p>  PenRed.CreatePen(PS

27、_SOLID,1,RGB(250,0,0));//創(chuàng)建顏色筆</p><p>  PenBlue.CreatePen(PS_SOLID,1,RGB(0,0,250));</p><p>  PenGreen.CreatePen(PS_SOLID,1,RGB(0,250,0));</p><p>  m_nTimer=0;//賦初值,標(biāo)記</p>

28、;<p><b>  ntimes=0;</b></p><p>  m_Mark=FALSE;</p><p><b>  }</b></p><p>  void CMy1010190225View::OnPopdlgset() //彈出無(wú)模式對(duì)話框</p><

29、;p><b>  {</b></p><p>  // TODO: Add your command handler code here</p><p>  if(0==m_dlgset->GetSafeHwnd())//若未建立,新建</p><p><b>  {</b></p><

30、;p>  m_dlgset->Create(IDD_DIALOG1);</p><p>  m_dlgset->ShowWindow(SW_SHOW);</p><p><b>  }</b></p><p>  else//若已建立,顯示</p><p><b>  {&l

31、t;/b></p><p>  m_dlgset->SetFocus();</p><p>  m_dlgset->ShowWindow(SW_SHOW);</p><p><b>  }</b></p><p><b>  }</b></p><p>  

32、void CMy1010190225View::OnLButtonDown(UINT nFlags, CPoint point) </p><p><b>  {</b></p><p>  // TODO: Add your message handler code here and/or call default</p><p>  OnS

33、topTimer();停止計(jì)時(shí)器</p><p>  CleanWindow();清屏</p><p>  this->DrawAll(); 計(jì)時(shí)繪制所有圓 </p><p>  CView::OnLButtonDown(nFlags, point);</p><p><

34、b>  }</b></p><p>  void CMy1010190225View::OnFileBlack() //實(shí)現(xiàn)機(jī)制同OnLButtonDown()</p><p>  void CMy1010190225View::OnFileBlue()</p><p>  void CMy1010190225View::OnFileGreen(

35、) </p><p>  void CMy1010190225View::OnFileRed() </p><p>  void CMy1010190225View::GetCenterPoints(CPoint ptCenter, UINT uRadius) //傳入虛圓心和虛半徑,得到實(shí)圓圓心</p>

36、<p><b>  {</b></p><p>  if(m_vPtsCenter.GetSize()>0) //若已有數(shù)據(jù)</p><p>  m_vPtsCenter.RemoveAll(); //將原有數(shù)據(jù)清空再重新獲得數(shù)據(jù),以得到最新數(shù)據(jù)</p><p>  CPoint *

37、point;//每得到一個(gè)點(diǎn),加入m_vPtsCenter中</p><p>  for(double dw_angle=0;fabs(PI-dw_angle)>0.1;dw_angle+=PI/18)</p><p><b>  {</b></p><p>  point=new CPoint;</p><p&

38、gt;  point->x=(long)(ptCenter.x+uRadius*cos(dw_angle));</p><p>  point->y=(long)(ptCenter.y+uRadius*sin(dw_angle));</p><p>  m_vPtsCenter.Add(point); </p><p><b>  }

39、</b></p><p>  for(dw_angle=-PI;fabs(0-dw_angle)>0.1;dw_angle+=PI/18)</p><p><b>  {</b></p><p>  point=new CPoint;</p><p>  point->x=(long)(ptCen

40、ter.x+uRadius*cos(dw_angle));</p><p>  point->y=(long)(ptCenter.y+uRadius*sin(dw_angle));</p><p>  m_vPtsCenter.Add(point);</p><p><b>  }</b></p><p><

41、b>  }</b></p><p>  void CMy1010190225View::DrawAll() //繪制所有實(shí)圓</p><p><b>  {</b></p><p>  if(0!=g_uRadius&&0!=g_uVRadius)//若半徑非零,有效數(shù)據(jù)</p><

42、;p><b>  {</b></p><p>  uRadius=g_uRadius; //將對(duì)話框得到的數(shù)據(jù)傳至視圖類</p><p>  uVRadius=g_uVRadius;</p><p>  CRect rect;</p><p>  this->GetClientRec

43、t(&rect);</p><p>  m_PtCenter=rect.CenterPoint(); //得到窗口中心為虛圓圓心</p><p>  GetCenterPoints(m_PtCenter,uVRadius); //取得實(shí)圓圓心</p><p>  OnStartTimer();//計(jì)時(shí)繪制實(shí)圓</p>&l

44、t;p><b>  }</b></p><p><b>  else</b></p><p><b>  return;</b></p><p><b>  }</b></p><p>  void CMy1010190225View::OnTime

45、r(UINT nIDEvent) //計(jì)時(shí)器響應(yīng),繪圓</p><p><b>  {</b></p><p>  // TODO: Add your message handler code here and/or call default</p><p>  CPoint * point;</p><p>  i

46、nt size=m_vPtsCenter.GetSize(); </p><p>  point=(CPoint *)m_vPtsCenter.GetAt(ntimes); //將實(shí)圓圓心取出</p><p>  ToCricle(*point,uRadius); //繪制圓</p><p><

47、;b>  ntimes++;</b></p><p>  if(ntimes==size) //當(dāng)畫完實(shí)圓后</p><p><b>  {</b></p><p>  OnStopTimer(); //停止計(jì)時(shí)器</p><p><b>  

48、}</b></p><p>  CView::OnTimer(nIDEvent);</p><p><b>  }</b></p><p>  void CMy1010190225View::OnStartTimer()</p><p><b>  {</b></p>&l

49、t;p>  m_nTimer = SetTimer(1, 100, 0); //開始計(jì)時(shí)器</p><p><b>  }</b></p><p>  void CMy1010190225View::OnStopTimer()</p><p><b>  {</b></p><p>

50、  if(m_nTimer)</p><p><b>  {</b></p><p>  KillTimer(m_nTimer);//清除計(jì)時(shí)器</p><p>  ntimes=0;//計(jì)次歸零</p><p><b>  }</b></p><p><

51、b>  }</b></p><p>  void CMy1010190225View::CleanWindow() //清屏</p><p><b>  {</b></p><p>  CClientDC dc(this);</p><p>  CRect rect;</p><p

52、>  GetClientRect(&rect);</p><p>  dc.FillSolidRect(&rect, RGB(255, 255, 255));//用白色填充屏幕</p><p><b>  }</b></p><p><b>  3)文檔類</b></p><p&

53、gt;  CDocument::SetTitle("1010190225 HRF"); //設(shè)置主窗口后半部分標(biāo)題</p><p><b>  框架類</b></p><p>  ::PreCreateWindow(CREATESTRUCT& cs)</p><p>  SetTitle("定時(shí)圓上畫圓&

54、quot;); 設(shè)置后半部分標(biāo)題</p><p>  HICON m_hIcon; </p><p>  m_hIcon = AfxGetApp()->LoadIcon(IDI_ICON5); //設(shè)置窗口及.exe圖標(biāo)</p><p>  SetIcon(m_hIcon, TRUE); // Set big icon</p><

55、;p>  SetIcon(m_hIcon, FALSE); // Set small icon</p><p>  2、遇到的問(wèn)題及解決的辦法</p><p>  1.沒(méi)有以半徑或直徑直接可以畫圓的函數(shù)。于是新建函數(shù),根據(jù)傳入的半徑及圓心,轉(zhuǎn)換成所需點(diǎn),利用Ellipse()繪制,并把Brush設(shè)成空,否則會(huì)產(chǎn)生圖形覆蓋,達(dá)不到效果。</p><p>  2.

56、 用PtrArray保存實(shí)圓圓心時(shí),出現(xiàn)多次添加數(shù)據(jù)或未移除原有數(shù)據(jù),導(dǎo)致實(shí)圓圓心point數(shù)據(jù)重復(fù),過(guò)多,而導(dǎo)致一系列問(wèn)題和錯(cuò)誤。因此,在調(diào)用函數(shù)計(jì)算得到數(shù)據(jù)并添加之前,先將原有數(shù)據(jù)刪除,再添加,就能隨時(shí)獲得最新數(shù)據(jù),解決問(wèn)題。</p><p>  3.圖形的重繪,和窗口更新后的繪制。原先在工具欄上按鈕點(diǎn)擊的消息響應(yīng)是,采用更新窗口的辦法實(shí)現(xiàn)繪圖,因此窗口更新時(shí),也是重新計(jì)時(shí)繪制而不是直接將圖形保留在窗口中心。

57、因此,將顏色的重新選擇的消息響應(yīng)改成使用DrawAll()重新繪制;而OnDraw()則另編算法實(shí)現(xiàn)要求。</p><p><b>  3、體會(huì)及建議</b></p><p>  1.首先,在編完這個(gè)程序時(shí),才覺(jué)得其實(shí)這個(gè)程序很簡(jiǎn)單,只要設(shè)計(jì)好繪制圓的算法,再在畫圓的時(shí)候添加上一個(gè)計(jì)時(shí)器即可。因此感覺(jué)遇到的問(wèn)題都不是什么大問(wèn)題,更多的是因?yàn)椴皇煜?,很多函?shù)不知道或用法

58、不熟,才導(dǎo)致產(chǎn)生很多問(wèn)題。</p><p>  2.在編程時(shí),要注意好所用的變量的范圍,局部或全局,僅函數(shù)內(nèi)使用還是整個(gè)</p><p>  程序都要用。更重要的是要盡量將每一樣功能的算法封裝成一個(gè)函數(shù),以便考慮整體的設(shè)計(jì)。在調(diào)試時(shí)這樣的做法提供很大的方便,很容易就能發(fā)現(xiàn)問(wèn)題所在,也很容易去修改,同時(shí)因?yàn)榭赡芎芏嗟胤蕉家褂玫竭@個(gè)算法,封裝后,調(diào)用即可,可以減少代碼,使程序更簡(jiǎn)潔。<

59、/p><p>  3.這個(gè)程序其實(shí)還有比較多的地方可以優(yōu)化或美化,如其他非正常操作的處理,還有提示功能的完善等等。但是因?yàn)闀r(shí)間問(wèn)題都沒(méi)有能設(shè)計(jì)到。</p><p>  4.建議呢:老師您可以教更多的功能實(shí)現(xiàn),但是由于課程時(shí)間本來(lái)就很少,也是沒(méi)辦法的事。</p><p><b>  4、參考文獻(xiàn)</b></p><p>  1

溫馨提示

  • 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ù)僅提供信息存儲(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)論