版權(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- c++_mfc計(jì)算器編程課程設(shè)計(jì)--mfc編程科學(xué)計(jì)算器
- 微機(jī)原理及應(yīng)用課程設(shè)計(jì)---可調(diào)計(jì)時(shí)器設(shè)計(jì)
- mfc課程設(shè)計(jì)實(shí)驗(yàn)報(bào)告
- 網(wǎng)絡(luò)協(xié)議編程應(yīng)用課程設(shè)計(jì)
- 計(jì)時(shí)秒表課程設(shè)計(jì)---計(jì)時(shí)秒表系統(tǒng)的設(shè)計(jì)
- mfc計(jì)算器課程設(shè)計(jì)報(bào)告
- mfc程序設(shè)計(jì)課程設(shè)計(jì)---考勤系統(tǒng)
- 微機(jī)課程設(shè)計(jì)--計(jì)時(shí)時(shí)鐘
- 課程設(shè)計(jì)---籃球競(jìng)賽計(jì)時(shí)系統(tǒng)
- 99倒計(jì)時(shí)課程設(shè)計(jì)
- 課程設(shè)計(jì)--計(jì)時(shí)提醒器
- 課程設(shè)計(jì)--倒計(jì)時(shí)計(jì)時(shí)器的設(shè)計(jì)
- 時(shí)鐘計(jì)時(shí)器課程設(shè)計(jì)
- 籃球計(jì)時(shí)器課程設(shè)計(jì)
- mfc課程設(shè)計(jì)---綜合調(diào)色板
- 課程設(shè)計(jì)--mfc家庭理財(cái)管理系統(tǒng)
- 課程設(shè)計(jì)--時(shí)間編程
- mfc課程設(shè)計(jì)報(bào)告-貪食蛇游戲
- mfc數(shù)據(jù)庫(kù)編程及其應(yīng)用
- 匯編課程設(shè)計(jì)報(bào)告--- 計(jì)時(shí)器
評(píng)論
0/150
提交評(píng)論