版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
1、<p> 《MFC編程及應(yīng)用》課程設(shè)計報告</p><p> 題目: 虛擬圓周上計時繪制圓 </p><p> 學(xué)號: 姓名: </p><p> 指導(dǎo)老師: </p><p> 時間: 2011.10.11
2、 </p><p> 評語:</p><p><b> 目 錄</b></p><p><b> 1、設(shè)計步驟</b></p><p><b> 工程建立</b></p><p><b> 類中新增變量的作用&
3、lt;/b></p><p> 需處理的消息的詳細代碼</p><p> 1)參數(shù)設(shè)置對話框操作(無模式)中的主要函數(shù)及代碼</p><p> 2)視圖類操作中的函數(shù)</p><p><b> a.所有函數(shù)概述</b></p><p> b.主要函數(shù)及詳細代碼,注釋</p&g
4、t;<p> 3)文檔類和框架類的函數(shù)</p><p> 2、遇到的問題及解決的辦法</p><p><b> 3、體會及建議</b></p><p><b> 4、參考文獻</b></p><p><b> 1.設(shè)計步驟</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、于將對話框的數(shù)據(jù)傳出到View中</p><p> UINT g_uVRadius=0; 全局變量用于將對話框的數(shù)據(jù)傳出到View中</p><p> UINT m_nTimer; 用于標(biāo)記計時器</p><p> CPtrArray m_vPtsCenter; 用于存儲實圓的三十六個圓心point</p><
7、p><b> View</b></p><p> BOOL m_Mark; 標(biāo)記對話框是否已經(jīng)自動彈出</p><p> CToolTipCtrl m_ToolTip; 實現(xiàn)鼠標(biāo)停留在客戶區(qū)時彈出提示“點擊開始作圖”</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)建藍筆</p><p> CPen PenGreen; 創(chuàng)建綠筆</p><p> CPen PenRed; 創(chuàng)建紅筆</p><p> UINT uRadius;
9、 實圓半徑</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)需處理的消息的詳細代碼 (實現(xiàn)函數(shù)及注釋)</p><p> ?。ㄔ诔绦蛑锌锤忧宄?lt;/p><p> 1)
12、參數(shù)設(shè)置對話框操作(無模式)</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è)置對話框圖標(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ā)送消息實現(xiàn)tooltip提示</p>
21、<p> void OnLButtonDown(UINT nFlags, CPoint point); 點擊開始作圖</p><p> void OnFileBlack(); 響應(yīng)按鈕點擊</p><p> void OnFileBlue(); 響應(yīng)按鈕點擊</p><p> void OnFileGreen(); 響應(yīng)按鈕點擊</p&
22、gt;<p> void OnFileRed(); 響應(yīng)按鈕點擊</p><p> void OnHelp(); 彈出幫助對話框</p><p> int OnCreate(LPCREATESTRUCT lpCreateStruct);創(chuàng)建一個tooltip</p><p> void OnMouseMove(UINT nF
23、lags, CPoint point); 用addtool()實現(xiàn)提示</p><p> void OnPopdlgset(); 建立無模式對話框</p><p> void CleanWindow();清楚屏幕所有圖像</p><p> void OnStopTimer();停止計時器</p><p>
24、void OnStartTimer();開始計時器 </p><p> void OnTimer(UINT nIDEvent);計時器實現(xiàn)函數(shù),計時畫圖</p><p> void DrawAll();畫出所有的實圓</p><p> void GetCenterPoints(CPoint ptCenter,UINT uRadius); 計算取得
25、實圓的圓心 </p><p> void ToCricle(CPoint ptCenter,UINT uRadius); 實現(xiàn)畫圓</p><p> b.以下是一些較為重要的函數(shù)的代碼詳細代碼(其他簡單函數(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; //無模式對話框用</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() //彈出無模式對話框</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();停止計時器</p><p> CleanWindow();清屏</p><p> this->DrawAll(); 計時繪制所有圓 </p><p> CView::OnLButtonDown(nFlags, point);</p><p><
34、b> }</b></p><p> void CMy1010190225View::OnFileBlack() //實現(xiàn)機制同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) //傳入虛圓心和虛半徑,得到實圓圓心</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;//每得到一個點,加入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() //繪制所有實圓</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; //將對話框得到的數(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); //取得實圓圓心</p><p> OnStartTimer();//計時繪制實圓</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) //計時器響應(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); //將實圓圓心取出</p><p> ToCricle(*point,uRadius); //繪制圓</p><p><
47、;b> ntimes++;</b></p><p> if(ntimes==size) //當(dāng)畫完實圓后</p><p><b> {</b></p><p> OnStopTimer(); //停止計時器</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); //開始計時器</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);//清除計時器</p><p> ntimes=0;//計次歸零</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("定時圓上畫圓&
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、遇到的問題及解決的辦法</p><p> 1.沒有以半徑或直徑直接可以畫圓的函數(shù)。于是新建函數(shù),根據(jù)傳入的半徑及圓心,轉(zhuǎn)換成所需點,利用Ellipse()繪制,并把Brush設(shè)成空,否則會產(chǎn)生圖形覆蓋,達不到效果。</p><p> 2.
56、 用PtrArray保存實圓圓心時,出現(xiàn)多次添加數(shù)據(jù)或未移除原有數(shù)據(jù),導(dǎo)致實圓圓心point數(shù)據(jù)重復(fù),過多,而導(dǎo)致一系列問題和錯誤。因此,在調(diào)用函數(shù)計算得到數(shù)據(jù)并添加之前,先將原有數(shù)據(jù)刪除,再添加,就能隨時獲得最新數(shù)據(jù),解決問題。</p><p> 3.圖形的重繪,和窗口更新后的繪制。原先在工具欄上按鈕點擊的消息響應(yīng)是,采用更新窗口的辦法實現(xiàn)繪圖,因此窗口更新時,也是重新計時繪制而不是直接將圖形保留在窗口中心。
57、因此,將顏色的重新選擇的消息響應(yīng)改成使用DrawAll()重新繪制;而OnDraw()則另編算法實現(xiàn)要求。</p><p><b> 3、體會及建議</b></p><p> 1.首先,在編完這個程序時,才覺得其實這個程序很簡單,只要設(shè)計好繪制圓的算法,再在畫圓的時候添加上一個計時器即可。因此感覺遇到的問題都不是什么大問題,更多的是因為不熟悉,很多函數(shù)不知道或用法
58、不熟,才導(dǎo)致產(chǎn)生很多問題。</p><p> 2.在編程時,要注意好所用的變量的范圍,局部或全局,僅函數(shù)內(nèi)使用還是整個</p><p> 程序都要用。更重要的是要盡量將每一樣功能的算法封裝成一個函數(shù),以便考慮整體的設(shè)計。在調(diào)試時這樣的做法提供很大的方便,很容易就能發(fā)現(xiàn)問題所在,也很容易去修改,同時因為可能很多地方都要使用到這個算法,封裝后,調(diào)用即可,可以減少代碼,使程序更簡潔。<
59、/p><p> 3.這個程序其實還有比較多的地方可以優(yōu)化或美化,如其他非正常操作的處理,還有提示功能的完善等等。但是因為時間問題都沒有能設(shè)計到。</p><p> 4.建議呢:老師您可以教更多的功能實現(xiàn),但是由于課程時間本來就很少,也是沒辦法的事。</p><p><b> 4、參考文獻</b></p><p> 1
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- c++_mfc計算器編程課程設(shè)計--mfc編程科學(xué)計算器
- 微機原理及應(yīng)用課程設(shè)計---可調(diào)計時器設(shè)計
- mfc課程設(shè)計實驗報告
- 網(wǎng)絡(luò)協(xié)議編程應(yīng)用課程設(shè)計
- 計時秒表課程設(shè)計---計時秒表系統(tǒng)的設(shè)計
- mfc計算器課程設(shè)計報告
- mfc程序設(shè)計課程設(shè)計---考勤系統(tǒng)
- 微機課程設(shè)計--計時時鐘
- 課程設(shè)計---籃球競賽計時系統(tǒng)
- 99倒計時課程設(shè)計
- 課程設(shè)計--計時提醒器
- 課程設(shè)計--倒計時計時器的設(shè)計
- 時鐘計時器課程設(shè)計
- 籃球計時器課程設(shè)計
- mfc課程設(shè)計---綜合調(diào)色板
- 課程設(shè)計--mfc家庭理財管理系統(tǒng)
- 課程設(shè)計--時間編程
- mfc課程設(shè)計報告-貪食蛇游戲
- mfc數(shù)據(jù)庫編程及其應(yīng)用
- 匯編課程設(shè)計報告--- 計時器
評論
0/150
提交評論