這篇文章將為大家詳細(xì)講解有關(guān)如何使用MFC實(shí)現(xiàn)圖形學(xué)課程中中點(diǎn)圓算法,小編覺得挺實(shí)用的,因此分享給大家做個(gè)參考,希望大家閱讀完這篇文章后可以有所收獲。
創(chuàng)新互聯(lián)是一家專注于網(wǎng)站設(shè)計(jì)、網(wǎng)站建設(shè)與策劃設(shè)計(jì),科爾沁右翼前網(wǎng)站建設(shè)哪家好?創(chuàng)新互聯(lián)做網(wǎng)站,專注于網(wǎng)站建設(shè)十余年,網(wǎng)設(shè)計(jì)領(lǐng)域的專業(yè)建站公司;建站業(yè)務(wù)涵蓋:科爾沁右翼前等地區(qū)。科爾沁右翼前做網(wǎng)站價(jià)格咨詢:13518219792
1.進(jìn)入資源視圖,新建對(duì)話框,編輯修改Caption或者ID屬性
右擊該對(duì)話框添加類 基類為 CDialog
命名為:MyCircleDialog
使用類向?qū)?選擇MyCircleDialog類,選 擇成員變量 添加變量 value類型 int型
m_radius 設(shè)置 變量取值范圍
m_circlex
m_circlex
2.添加菜單,設(shè)置ID 為 ID_MyCircleMenu 并通過類向?qū)砑酉⒂成浜瘮?shù)
選擇類名 C***View
查找ID ID_MyCircleMenu,映射 ONCOMMAND 消息
C***View
3.添加變量并在構(gòu)造函數(shù)中初始化
C***View.h
public: int m_vradius; int m_vcirclex; int m_vcircley;
C***View.cpp
m_vradius = 0; m_vcirclex = 0; m_vcircley = 0;
添加 MyCircleDialog 頭文件
#include "MyCircleDialog.h"
4.在消息處理程序中添加與dialog交互 獲取 輸入數(shù)據(jù)的代碼
// CMFCCircleDialogDemoView 消息處理程序 void CMFCCircleDialogDemoView::OnMycirclemenu() { // TODO: 在此添加命令處理程序代碼 MyCircleDialog dlg; //定義一個(gè)對(duì)話框?qū)ο? if(dlg.DoModal() == IDOK) //顯示對(duì)話框 { m_vradius = dlg.m_radius; m_vcirclex = dlg.m_circleX; m_vcircley = dlg.m_circleY; //接收并存儲(chǔ)編輯框數(shù)據(jù) Invalidate(); //刷新視圖 } }
// CMFCTestView 繪制
5.在OnDraw中 添加 繪圖 代碼(取消CDC*參數(shù)注釋,使用所有設(shè)備環(huán)境基類CDC畫圖,
也可以定義使用 其他設(shè)備環(huán)境類如CClientDC等)
void CMFCCircleDialogDemoView::OnDraw(CDC* pDC) { CMFCCircleDialogDemoDoc* pDoc = GetDocument(); ASSERT_VALID(pDoc); if (!pDoc) return; // TODO: 在此處為本機(jī)數(shù)據(jù)添加繪制代碼 /*確定圓心,畫出直角坐標(biāo)系*/ CRect rect; GetWindowRect(rect); int center_x = rect.Width()/2; int center_y = rect.Height()/2; CPen myPen; //創(chuàng)建畫筆 myPen.CreateStockObject(BLACK_PEN); //設(shè)置畫筆屬性 pDC->SelectObject(&myPen); //綁定畫筆句柄 pDC->MoveTo(center_x,0); pDC->LineTo(center_x, rect.Height()); pDC->MoveTo(0,center_y); pDC->LineTo(rect.Width(),center_y); /*********************繪制圓****************/ //邏輯圓心坐標(biāo) /* int m_vradius = 50; int m_vcirclex = -70; int m_vcircley = 100; */ //轉(zhuǎn)化為畫布中圓心坐標(biāo) center_x = center_x + m_vcirclex; center_y = center_y - m_vcircley; pDC->SetPixel(center_x,center_y+m_vradius,RGB(125,125,125));//繪制圓心的點(diǎn) pDC->Ellipse(center_x-3,center_y-3,center_x+3,center_y+3); //畫個(gè)小圓,確定圓心位置 int p=5/4-m_vradius; //鍵值的初始值 int x=0; int y=m_vradius; //使用中點(diǎn)圓算法畫圓 while(x<y){ x++; if(p<0){ p=p+2*x+3; pDC->SetPixel(center_x+x,center_y+y,RGB(125,125,125)); pDC->SetPixel(center_x+y,center_y+x,RGB(125,125,125)); pDC->SetPixel(center_x+y,center_y-x,RGB(125,125,125)); pDC->SetPixel(center_x+x,center_y-y,RGB(125,125,125)); pDC->SetPixel(center_x-x,center_y-y,RGB(125,125,125)); pDC->SetPixel(center_x-y,center_y-x,RGB(125,125,125)); pDC->SetPixel(center_x-y,center_y+x,RGB(125,125,125)); pDC->SetPixel(center_x-x,center_y+y,RGB(125,125,125)); //以對(duì)稱的方式完成圓的繪制 } else{ y--; p=p+2*x+3-2*y-2; pDC->SetPixel(center_x+x,center_y+y,RGB(125,125,125)); pDC->SetPixel(center_x+y,center_y+x,RGB(125,125,125)); pDC->SetPixel(center_x+y,center_y-x,RGB(125,125,125)); pDC->SetPixel(center_x+x,center_y-y,RGB(125,125,125)); pDC->SetPixel(center_x-x,center_y-y,RGB(125,125,125)); pDC->SetPixel(center_x-y,center_y-x,RGB(125,125,125)); pDC->SetPixel(center_x-y,center_y+x,RGB(125,125,125)); pDC->SetPixel(center_x-x,center_y+y,RGB(125,125,125)); //以對(duì)稱的方式完成圓的繪制 } Sleep(20); } }
關(guān)于“如何使用MFC實(shí)現(xiàn)圖形學(xué)課程中中點(diǎn)圓算法”這篇文章就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,使各位可以學(xué)到更多知識(shí),如果覺得文章不錯(cuò),請(qǐng)把它分享出去讓更多的人看到。
網(wǎng)站標(biāo)題:如何使用MFC實(shí)現(xiàn)圖形學(xué)課程中中點(diǎn)圓算法
網(wǎng)址分享:http://muchs.cn/article20/ihihjo.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供企業(yè)網(wǎng)站制作、手機(jī)網(wǎng)站建設(shè)、域名注冊(cè)、品牌網(wǎng)站建設(shè)、自適應(yīng)網(wǎng)站、網(wǎng)站設(shè)計(jì)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)