版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
課程設(shè)計報告課程名稱計算機圖形學課題名稱交互式繪圖系統(tǒng)專業(yè)計算機科學與技術(shù)班級0902班學號200903010208姓名陳瑾指導教師劉長松曹燚2012年10月9日
湖南工程學院課程設(shè)計任務(wù)書課程名稱計算機圖形學課題交互式繪圖系統(tǒng)專業(yè)班級計算機0902學生姓名陳瑾學號200903010208指導老師劉長松曹燚審批任務(wù)書下達日期2012年9月15日任務(wù)完成日期2012年10月9日一、設(shè)計內(nèi)容與設(shè)計要求1.設(shè)計內(nèi)容:用橡皮法實現(xiàn)交互式繪圖系統(tǒng)。2.設(shè)計要求:在屏幕上可以選擇不同的命令、來實現(xiàn)不同基本圖形的繪制。完成橡皮筋直線,橡皮筋圓,橡皮筋矩形框,多邊形裁剪和3階B樣條曲線的作圖,且要有比較友好的界面。3.算法提示:首先在屏幕上畫出菜單和繪圖窗口,顯示鼠標。點擊相應(yīng)菜單,點擊鼠標,移動鼠標,獲取鼠標移動相對位置,畫出相應(yīng)圖形。相關(guān)變量定義:#define_MOUSE鼠標
#defineCIRCLE1圓#defineLINE2直線
#defineRECTANGLE3矩形
#include"stdio.h"
#include"string.h"
#include"graphics.h"
#include"math.h"
#include<dos.h>
unionREGSinreg,outreg;
structSREGSsr;相關(guān)函數(shù):voidmeun(intx,inty,char*str)
{
setcolor(8);
outtextxy(x+5,28,str);
setcolor(15);
line(x,22,x,40);
line(x,22,y,22);
setcolor(8);
line(x,40,y,40);
line(y,22,y,40);
}voiddrawwindows()畫窗口
{
setbkcolor(7);/*7*/
setcolor(8);
rectangle(0,20,640,460);
rectangle(0,0,640,20);
setfillstyle(1,1);
floodfill(1,1,8);
rectangle(0,460,640,480);
setfillstyle(1,15);
floodfill(1,461,8);
setcolor(RED);
outtextxy(10,468,"FinishedByXuYuanFei.");
setcolor(15);
line(0,41,640,41);
line(0,459,640,459);
setcolor(8);
line(0,42,640,42);
setcolor(15);
rectangle(610,3,630,17);
setfillstyle(1,7);
floodfill(611,4,15);
setcolor(8);
line(610,17,630,17);
line(630,3,630,17);
line(611,4,628,16);
line(611,16,628,4);
rectangle(2,44,635,459);
setcolor(15);
rectangle(3,45,634,458);
line(611,3,628,15);
line(611,15,628,3);
meun(5,55,"line");
meun(65,165,"rectangle");
meun(175,250,"circle");
meun(260,330,"Bezer");
meun(340,400,"Cut");
}
int_cut()裁剪voidmycircle(doublex,doubley,doubler)畫圓
{
doublei;
for(i=0.0;i<360.0;i=i+4)
line(x+r*cos((i+1)/360*3.1415*2),y+r*sin((i+1)/360*3.1415*2),x+r*cos((i+4.0)/360*3.1415*2),y+r*sin((i+4.0)/360*3.1415*2));
}
void_Bezer(inta[3],intb[3],intm)Beizier曲線voidDisplayMouse()顯示鼠標{
inreg.x.ax=1;
int86(0x33,&inreg,&outreg);
}voidCloseMouse()關(guān)閉鼠標{
inreg.x.ax=2;
int86(0x33,&inreg,&outreg);
}unionREGSDisplayMouseStatus()顯示鼠標狀態(tài){
inreg.x.ax=3;
int86(0x33,&inreg,&outreg);
returnoutreg;
}voidGetMouseXY(int*x,int*y)得到鼠標位置{
DisplayMouse();
outreg=DisplayMouseStatus();
*x=outreg.x.cx;
*y=outreg.x.dx;
}響應(yīng)相應(yīng)函數(shù)void_mytreat(intoldx,intoldy,intx,inty)
{
if(num==1)
{
if(flag==LINE)
{
line(px,py,oldx,oldy);
line(px,py,x,y);
}
if(flag==CIRCLE)
{
mycircle(px,py,sqrt((double)((px-oldx)*(px-oldx)+(py-oldy)*(py-oldy))));
mycircle(px,py,sqrt((double)((px-x)*(px-x)+(py-y)*(py-y))));
}
if(flag==RECTANGLE)
{
rectangle(px,py,oldx,oldy);
rectangle(px,py,x,y);
}
}
}二、進度安排第3周星期一8:00——12:00星期二8:00——12:00星期三8:00——12:00星期四8:00——12:00星期五8:00——12:00第4周星期一8:00——12:00附:課程設(shè)計報告裝訂順序:封面、任務(wù)書、目錄、正文、附件(A4大小的圖紙及程序清單)、評分。正文的格式:一級標題用3號黑體,二級標題用四號宋體加粗,正文用小四號宋體;行距為22。正文的內(nèi)容:一、課題的主要功能;二、課題的功能模塊的劃分(要求畫出模塊圖);三、主要功能的實現(xiàn)(至少要有一個主要模塊的流程圖);四、程序調(diào)試;五、總結(jié);六、附件(所有程序的原代碼,要求對程序?qū)懗霰匾淖⑨專U目傋謹?shù)要求在5000字以上(不含程序原代碼)。目錄概述……………1功能模塊的劃分………………2主要功能的實現(xiàn)………………3程序調(diào)試………4總結(jié)……………5附錄……………6概述交互式系統(tǒng):隨著計算機繪圖技術(shù)的廣泛應(yīng)用,交互處理已是必不可少的容。一個交互圖形系統(tǒng)使用戶能動態(tài)的輸入坐標位置,指定選擇功能,設(shè)置交換參數(shù),以及在圖形顯示期間能夠?qū)嫔系哪承┎糠诌M行修改、刪除、增添、存儲和在顯示操作,且能全部徒手繪圖。交互式繪圖軟件系統(tǒng)都為用戶提供了一個交互工作環(huán)境,稱交互界面。通常在圖形顯示方式,把屏幕劃分為圖形區(qū),菜單區(qū)和提示區(qū)。交互式繪圖系統(tǒng)的基本功能一般可歸納為繪圖功能、圖形編輯、尺寸標準、作圖工具、顯示功能、詢問功能、信息轉(zhuǎn)換、和二次開發(fā)工具。橡皮筋技術(shù):橡皮筋技術(shù)是在平面上確定一條直線一般是先定下起點再定下終點,最后把起點和終點連成直線。如果要求這條直線能通過平面上某一點或和一已知圓相切,上述方法便不易做得很準確。所謂橡皮筋技術(shù)就是在起點確定后,光標移出去定終點時,在屏幕上始終顯示一條連接起點和光標中心的直線,這條直線隨著光標中心位置的變動而變動,它就像在起點和光標中心之間緊緊地拉著一根橡皮筋,有了這根橡皮筋便比較容易地找到通過一個點或和一個圓相切的直線的位置。功能模塊的劃分本程序是采用VC6.0編寫的一個繪圖系統(tǒng),在屏幕上可以選擇不同的命令、來實現(xiàn)不同基本圖形和顏色的繪制。通過該系統(tǒng)可以完成橡皮筋直線,橡皮筋圓,橡皮筋矩形框,多邊形裁剪和3階B樣條曲線的作圖,它的設(shè)計按軟件工程的方法進行,系統(tǒng)具有良好的界面、必要的交互信息和簡易的菜單進行操作,適合簡單的畫圖,對學習用一定的幫助。本程序的功能模塊劃分如下:1、畫點:運行程序后單擊“繪圖”菜單,選擇“點”后,用鼠標在視圖中任意一個地方,點擊下鼠標左鍵便可在視圖中出現(xiàn)一點。2、畫直線:運行程序后單擊“繪圖”菜單,選擇“直線”后,用鼠標左鍵在視圖框中任意一地方,用來確定直線的起始點,點擊鼠標左鍵不松,在視圖框中隨意拉動鼠標便可看見一直線隨鼠標的變動而變動,當松去左鍵時,便在視圖中畫出一條直線。3、畫矩形:運行程序后單擊“繪圖”菜單,選擇“矩形”后,用鼠標左鍵在視圖框中隨意點擊任意一個地方,用來確定矩形的起始點,然后按住鼠標左鍵不松,隨意改變鼠標點的位置用鼠標,會有虛框顯示,松下鼠標左鍵,即可在視圖中畫出一個矩形。4、畫圓:運行程序后單擊“繪圖”菜單,選擇“圓”后,用鼠標左鍵在視圖框中隨意點擊任意一個地方,用來確定圓的起始點,然后,按住左鍵不松,在視圖框任意拉動鼠標,便可看到隨鼠標移動的圓,當松去左鍵時,便可以在視圖框中確定圓行,這樣便畫出了一個圓。5、設(shè)置線型:運行程序后單擊“繪圖”菜單,選擇“設(shè)置”后,跟據(jù)彈出的對話框和實際的需求選擇畫直線,畫矩形,畫圓的線型,有“實線”,“虛線”,和“點線”,選定后點擊確定即可。6、設(shè)置顏色:運行程序后單擊“繪圖”菜單,選擇“顏色”后,根據(jù)彈出的調(diào)色板選擇自己想要的顏色,然后點擊確定即可。主要功能的實現(xiàn):編輯對話框:點擊ResourceView中的Menu,雙擊其內(nèi)部的IDR-MAINFRAME,如下圖:便可以編輯菜單選項了。右擊各個菜單,選擇ClassWizard…彈出對話框如下:對各個菜單添加功能后,點擊EditCode,便可以編寫函數(shù),其函數(shù)如下:voidCGraphicView::OnDot()//點{ //TODO:Addyourcommandhandlercodehere m_nDrawType=1;}voidCGraphicView::OnLine()//直線{ //TODO:Addyourcommandhandlercodehere m_nDrawType=2;}voidCGraphicView::OnRectangle()//矩形{ //TODO:Addyourcommandhandlercodehere m_nDrawType=3;}voidCGraphicView::OnEllipse()//圓{ //TODO:Addyourcommandhandlercodehere m_nDrawType=4;}畫圖功能實現(xiàn):確定起始點,確定圖形;voidCGraphicView::OnLButtonDown(UINTnFlags,CPointpoint){ //TODO:Addyourmessagehandlercodehereand/orcalldefaultm_ptOrigin=point;//?eμ?×?±ê m_endpoint=m_ptOrigin; linepointnum=1; CView::OnLButtonDown(nFlags,point);}voidCGraphicView::OnLButtonUp(UINTnFlags,CPointpoint){ //TODO:Addyourmessagehandlercodehereand/orcalldefault linepointnum=0; CClientDCdc(this);CPenpen(m_nLineStyle,0,m_clr);dc.SelectObject(&pen); CBrush*pBrush=CBrush::FromHandle((HBRUSH)GetStockObject(NULL_BRUSH));//í??÷μ??-?¢ dc.SelectObject(pBrush); switch(m_nDrawType){ case1: dc.SetPixel(point,m_clr); break; case2: dc.MoveTo(m_ptOrigin); dc.LineTo(point); break; case3: dc.Rectangle(CRect(m_ptOrigin,point)); break; case4: if(abs(point.y-m_ptOrigin.y)>abs(point.x-m_ptOrigin.x)) { if(point.y>m_ptOrigin.y){ dc.Ellipse(CRect(m_ptOrigin.x,m_ptOrigin.y,point.x,m_ptOrigin.y+abs(point.x-m_ptOrigin.x))); } else { dc.Ellipse(CRect(m_ptOrigin.x,m_ptOrigin.y,point.x,m_ptOrigin.y-abs(point.x-m_ptOrigin.x))); } } else { if(point.x>m_ptOrigin.x) { dc.Ellipse(CRect(m_ptOrigin.x,m_ptOrigin.y,m_ptOrigin.x+abs(point.y-m_ptOrigin.y),point.y)); } else { dc.Ellipse(CRect(m_ptOrigin.x,m_ptOrigin.y,m_ptOrigin.x-abs(point.y-m_ptOrigin.y),point.y)); } } // dc.Ellipse(CRect(m_ptOrigin.x,m_ptOrigin.y,point.x,point.y)); break; } CGraph*pGraph=newCGraph(m_nDrawType,m_ptOrigin,point,m_clr,m_nLineStyle); m_ptrArray.Add(pGraph);CView::OnLButtonUp(nFlags,point);}線條設(shè)置:voidCGraphicView::OnSetting(){ //TODO:Addyourcommandhandlercodehere CSettingDlgdlg; dlg.m_nLineStyle=m_nLineStyle;if(IDOK==dlg.DoModal()){ m_nLineStyle=dlg.m_nLineStyle; } }顏色設(shè)置:voidCGraphicView::OnColor(){ //TODO:Addyourcommandhandlercodehere CColorDialogdlg; dlg.m_cc.Flags|=CC_RGBINIT|CC_FULLOPEN;dlg.m_cc.rgbResult=m_clr; if(IDOK==dlg.DoModal()) { m_clr=dlg.m_cc.rgbResult; }}程序調(diào)試:1、畫點的實現(xiàn):在“繪圖”菜單中選擇“點”:操作結(jié)果如下顯示:2、畫點的實現(xiàn):在“繪圖”菜單中選擇“直線”:操作結(jié)果如下顯示:2、畫點的實現(xiàn):在“繪圖”菜單中選擇“矩形”:操作結(jié)果如下顯示:3、畫點的實現(xiàn):在“繪圖”菜單中選擇“圓”:操作結(jié)果如下顯示:4、線型實現(xiàn):在“繪圖”菜單中選擇“設(shè)置”:操作結(jié)果如下顯示:根據(jù)所需,選擇相對的線型。4、線型實現(xiàn):在“繪圖”菜單中選擇“設(shè)置”:操作結(jié)果如下顯示:選擇想要的顏色即可。選擇虛線和紅色,測試繪圖如下:五、總結(jié):這次課程設(shè)計的課題是交互式繪圖系統(tǒng),通過這次課程設(shè)計初步了解了橡皮筋技術(shù)的基本概念以及它在交互式繪圖過程中的作用,使用橡皮筋技術(shù)構(gòu)造直線、矩形和圓的操作過程和方法。經(jīng)過這次課程設(shè)計,不但鞏固了上學期在課堂上學的知識,而且還學到了一些上機的基本操作,提高了動手能力。由于這門課程是上學期開的,經(jīng)過了一個暑假,對于這方面的相關(guān)知識有些不太熟悉了,這次課程設(shè)計給了我一個很好的溫習機會,在做課程設(shè)計時不盡盡只是完成這個任務(wù),使得我重新找出了相關(guān)資料,又認認真真的將需要用到的一些知識鞏固了,加深了印象同時鍛煉了動手的能力。在整個過程中,通過解決課程設(shè)計中出現(xiàn)的問題,提高了解決問題的能力??傊诶蠋熀屯瑢W的幫助下還算順利的完成了橡皮筋直線、橡皮筋圓、橡皮筋矩形框、多邊形裁剪和3階B 曲線作圖,并且有簡單的圖形界面。雖然只是一次短暫的課程設(shè)計,但受益匪淺。附錄:1、參考文獻:(1)唐澤圣周嘉玉李新友編著《計算機圖形學基礎(chǔ)》,北京清華大學出版社1995;(2)汝傳鄒北軟編著《計算機圖形學》,北京人名郵電出版社2002;(3)網(wǎng)絡(luò)資料。2、源代碼:CGraph類中的函數(shù):#if!defined(AFX_GRAPH_H__40F8ED15_A3A1_4BE2_84D1_949DCCACA01A__INCLUDED_)#defineAFX_GRAPH_H__40F8ED15_A3A1_4BE2_84D1_949DCCACA01A__INCLUDED_#if_MSC_VER>1000#pragmaonce#endif//_MSC_VER>1000classCGraph{public:CPointm_ptOrigin;CPointm_ptEnd; UINTm_nDrawType;COLORREFm_clr; intm_nLineStyle; CGraph(); CGraph(UINTm_nDrawType,CPointm_ptOrigin,CPointm_ptEnd,COLORREFm_clr,intm_nLineStyle); virtual~CGraph();};#endif//!defined(AFX_GRAPH_H__40F8ED15_A3A1_4BE2_84D1_949DCCACA01A__INCLUDED_)//Graph.cpp:implementationoftheCGraphclass.////////////////////////////////////////////////////////////////////////#include"stdafx.h"#include"Graphic.h"#include"Graph.h"#ifdef_DEBUG#undefTHIS_FILEstaticcharTHIS_FILE[]=__FILE__;#definenewDEBUG_NEW#endif////////////////////////////////////////////////////////////////////////Construction/Destruction//////////////////////////////////////////////////////////////////////CGraph::CGraph(){}CGraph::CGraph(UINTm_nDrawType,CPointm_ptOrigin,CPointm_ptEnd,COLORREFm_clr,intm_nLineStyle){this->m_nDrawType=m_nDrawType;this->m_ptOrigin=m_ptOrigin;this->m_ptEnd=m_ptEnd;this->m_clr=m_clr;this->m_nLineStyle=m_nLineStyle;}CGraph::~CGraph(){}CGraphicView類中的函數(shù)://GraphicView.cpp:implementationoftheCGraphicViewclass//#include"stdafx.h"#include"Graphic.h"#include"SettingDlg.h"#include"GraphicDoc.h"#include"GraphicView.h"#include"Graph.h"#ifdef_DEBUG#definenewDEBUG_NEW#undefTHIS_FILEstaticcharTHIS_FILE[]=__FILE__;#endif///////////////////////////////////////////////////////////////////////////////CGraphicViewIMPLEMENT_DYNCREATE(CGraphicView,CView)BEGIN_MESSAGE_MAP(CGraphicView,CView) //{{AFX_MSG_MAP(CGraphicView) ON_COMMAND(ID_DOT,OnDot) ON_COMMAND(IDM_LINE,OnLine) ON_COMMAND(IDM_RECTANGLE,OnRectangle) ON_COMMAND(IDM_ELLIPSE,OnEllipse) ON_WM_LBUTTONDOWN() ON_WM_LBUTTONUP() ON_COMMAND(IDM_SETTING,OnSetting) ON_COMMAND(IDM_COLOR,OnColor) ON_WM_MOUSEMOVE() //}}AFX_MSG_MAP //Standardprintingcommands ON_COMMAND(ID_FILE_PRINT,CView::OnFilePrint) ON_COMMAND(ID_FILE_PRINT_DIRECT,CView::OnFilePrint) ON_COMMAND(ID_FILE_PRINT_PREVIEW,CView::OnFilePrintPreview)END_MESSAGE_MAP()///////////////////////////////////////////////////////////////////////////////CGraphicViewconstruction/destructionCGraphicView::CGraphicView(){ //TODO:addconstructioncodeherem_nDrawType=0;m_ptOrigin=0;m_nLineStyle=0;m_clr=RGB(0,0,0);linepointnum=0;}CGraphicView::~CGraphicView(){}BOOLCGraphicView::PreCreateWindow(CREATESTRUCT&cs){ //TODO:ModifytheWindowclassorstylesherebymodifying //theCREATESTRUCTcs returnCView::PreCreateWindow(cs);}///////////////////////////////////////////////////////////////////////////////CGraphicViewdrawingvoidCGraphicView::OnDraw(CDC*pDC){ CGraphicDoc*pDoc=GetDocument(); ASSERT_VALID(pDoc); //TODO:adddrawcodefornativedatahere //CPenpen(m_nLineStyle,m_nLineWidth,m_clr);//pDC->SelectObject(&pen); CBrush*pBrush=CBrush::FromHandle((HBRUSH)GetStockObject(NULL_BRUSH));pDC->SelectObject(pBrush); for(inti=0;i<m_ptrArray.GetSize();i++) { CPenpen(((CGraph*)m_ptrArray.GetAt(i))->m_nLineStyle,0,((CGraph*)m_ptrArray.GetAt(i))->m_clr);pDC->SelectObject(&pen); switch(((CGraph*)m_ptrArray.GetAt(i))->m_nDrawType) { case1: pDC->SetPixel(((CGraph*)m_ptrArray.GetAt(i))->m_ptEnd,RGB(0,0,0)); break; case2: pDC->MoveTo(((CGraph*)m_ptrArray.GetAt(i))->m_ptOrigin); pDC->LineTo(((CGraph*)m_ptrArray.GetAt(i))->m_ptEnd); break; case3: pDC->Rectangle(CRect(((CGraph*)m_ptrArray.GetAt(i))->m_ptOrigin, ((CGraph*)m_ptrArray.GetAt(i))->m_ptEnd)); break; case4: //((CGraph*)m_ptrArray.GetAt(i))->m_ptEndpoint//((CGraph*)m_ptrArray.GetAt(i))->m_ptOriginm_ptOrigin if(abs(((CGraph*)m_ptrArray.GetAt(i))->m_ptEnd.y-((CGraph*)m_ptrArray.GetAt(i))->m_ptOrigin.y)>abs(((CGraph*)m_ptrArray.GetAt(i))->m_ptEnd.x-((CGraph*)m_ptrArray.GetAt(i))->m_ptOrigin.x)) { if(((CGraph*)m_ptrArray.GetAt(i))->m_ptEnd.y>((CGraph*)m_ptrArray.GetAt(i))->m_ptOrigin.y) { pDC->Ellipse(CRect(((CGraph*)m_ptrArray.GetAt(i))->m_ptOrigin.x,((CGraph*)m_ptrArray.GetAt(i))->m_ptOrigin.y,((CGraph*)m_ptrArray.GetAt(i))->m_ptEnd.x,((CGraph*)m_ptrArray.GetAt(i))->m_ptOrigin.y+abs(((CGraph*)m_ptrArray.GetAt(i))->m_ptEnd.x-((CGraph*)m_ptrArray.GetAt(i))->m_ptOrigin.x))); } else { pDC->Ellipse(CRect(((CGraph*)m_ptrArray.GetAt(i))->m_ptOrigin.x,((CGraph*)m_ptrArray.GetAt(i))->m_ptOrigin.y,((CGraph*)m_ptrArray.GetAt(i))->m_ptEnd.x,((CGraph*)m_ptrArray.GetAt(i))->m_ptOrigin.y-abs(((CGraph*)m_ptrArray.GetAt(i))->m_ptEnd.x-((CGraph*)m_ptrArray.GetAt(i))->m_ptOrigin.x))); } } else { if(((CGraph*)m_ptrArray.GetAt(i))->m_ptEnd.x>((CGraph*)m_ptrArray.GetAt(i))->m_ptOrigin.x) { pDC->Ellipse(CRect(((CGraph*)m_ptrArray.GetAt(i))->m_ptOrigin.x,((CGraph*)m_ptrArray.GetAt(i))->m_ptOrigin.y,((CGraph*)m_ptrArray.GetAt(i))->m_ptOrigin.x+abs(((CGraph*)m_ptrArray.GetAt(i))->m_ptEnd.y-((CGraph*)m_ptrArray.GetAt(i))->m_ptOrigin.y),((CGraph*)m_ptrArray.GetAt(i))->m_ptEnd.y)); } else { pDC->Ellipse(CRect(((CGraph*)m_ptrArray.GetAt(i))->m_ptOrigin.x,((CGraph*)m_ptrArray.GetAt(i))->m_ptOrigin.y,((CGraph*)m_ptrArray.GetAt(i))->m_ptOrigin.x-abs(((CGraph*)m_ptrArray.GetAt(i))->m_ptEnd.y-((CGraph*)m_ptrArray.GetAt(i))->m_ptOrigin.y),((CGraph*)m_ptrArray.GetAt(i))->m_ptEnd.y)); } } break; } }}///////////////////////////////////////////////////////////////////////////////CGraphicViewprintingBOOLCGraphicView::OnPreparePrinting(CPrintInfo*pInfo){ //defaultpreparation returnDoPreparePrinting(pInfo);}voidCGraphicView::OnBeginPrinting(CDC*/*pDC*/,CPrintInfo*/*pInfo*/){ //TODO:addextrainitializationbeforeprinting}voidCGraphicView::OnEndPrinting(CDC*/*pDC*/,CPrintInfo*/*pInfo*/){ //TODO:addcleanupafterprinting}///////////////////////////////////////////////////////////////////////////////CGraphicViewdiagnostics#ifdef_DEBUGvoidCGraphicView::AssertValid()const{ CView::AssertValid();}voidCGraphicView::Dump(CDumpContext&dc)const{ CView::Dump(dc);}CGraphicDoc*CGraphicView::GetDocument()//non-debugversionisinline{ ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CGraphicDoc))); return(CGraphicDoc*)m_pDocument;}#endif//_DEBUG///////////////////////////////////////////////////////////////////////////////CGraphicViewmessagehandlersvoidCGraphicView::OnDot(){ //TODO:Addyourcommandhandlercodehere m_nDrawType=1;}voidCGraphicView::OnLine(){ //TODO:Addyourcommandhandlercodehere m_nDrawType=2;}voidCGraphicView::OnRectangle(){ //TODO:Addyourcommandhandlercodehere m_nDrawType=3;}voidCGraphicView::OnEllipse(){ //TODO:Addyourcommandhandlercodehere m_nDrawType=4;}voidCGraphicView::OnLButtonDown(UINTnFlags,CPointpoint){ //TODO:Addyourmessagehandlercodehereand/orcalldefaultm_ptOrigin=point;//?eμ?×?±ê m_endpoint=m_ptOrigin; linepointnum=1; CView::OnLButtonDown(nFlags,point);}voidCGraphicView::OnLButtonUp(UINTnFlags,CPointpoint){ //TODO:Addyourmessagehandlercodehereand/orcalldefault linepointnum=0; CClientDCdc(this);CPenpen(m_nLineStyle,0,m_clr);dc.SelectObject(&pen); CBrush*pBrush=CBrush::FromHandle((HBRUSH)GetStockObject(NULL_BRUSH));//í??÷μ??-?¢ dc.SelectObject(pBrush); switch(m_nDrawType){ case1: dc.SetPixel(point,m_clr); break; case2: dc.MoveTo(m_ptOrigin); dc.LineTo(point); break; case3: dc.Rectangle(CRect(m_ptOrigin,point)); break; case4: if(abs(point.y-m_ptOrigin.y)>abs(point.x-m_ptOrigin.x)) { if(point.y>m_ptOrigin.y){ dc.Ellipse(CRect(m_ptOrigin.x,m_ptOrigin.y,point.x,m_ptOrigin.y+abs(point.x-m_ptOrigin.x))); } else { dc.Ellipse(CRect(m_ptOrigin.x,m_ptOrigin.y,point.x,m_ptOrigin.y-abs(point.x-m_ptOrigin.x))); } } else { if(point.x>m_ptOrigin.x) { dc.Ellipse(CRect(m_ptOrigin.x,m_ptOrigin.y,m_ptOrigin.x+abs(point.y-m_ptOrigin.y),point.y)); } else { dc.Ellipse(CRect(m_ptOrigin.x,m_ptOrigin.y,m_ptOrigin.x-abs(point.y-m_ptOrigin.y),point.y)); } } // dc.Ellipse(CRect(m_ptOrigin.x,m_ptOrigin.y,point.x,point.y)); break; } CGraph*pGraph=newCGraph(m_nDrawType,m_ptOrigin,point,m_clr,m_nLineStyle); m_ptrArray.Add(pGraph);CView::OnLButtonUp(nFlags,point);}voidCGraphicView::OnSetting(){ //TODO:Addyourcommandhandlercodehere CSettingDlgdlg; dlg.m_nLineStyle=m_nLineStyle;if(IDOK==dlg.DoModal()){ m_nLineStyle=dlg.m_nLineStyle; } }voidCGraphicView::OnColor(){ //TODO:Addyourcommandhandlercodehere CColorDialogdlg; dlg.m_cc.Flags|=CC_RGBINIT|CC_FULLOPEN;dlg.m_cc.rgbResult=m_clr; if(IDOK==dlg.DoModal()) { m_clr=dlg.m_cc.rgbResult; }}voidCGraphicView::OnMouseMove(UINTnFlags,CPointpoint){ //TODO:Addyourmessagehandlercodehereand/orcalldefault CClientDCdc(this); dc.SetROP2(R2_NOT); //?e?¤????ê???í?// CPenpen(m_nLineStyle,0,m_clr);//dc.SelectObject(&pen); CBrush*pBrush=CBrush::FromHandle((HBRUSH)GetStockObject(NULL_BRUSH));//í??÷μ??-?¢ dc.SelectObject(pBrush); switch(m_nDrawType) { case2: { if(linepointnum==1) { dc.MoveTo(m_ptOrigin);//2á3y dc.LineTo(m_endpoint); m_endpoint=poi
溫馨提示
- 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. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年設(shè)備租賃合同范本專業(yè)3篇
- 2025版智慧城市公共服務(wù)平臺合作協(xié)議3篇
- 二零二五年度工業(yè)轉(zhuǎn)型升級項目招投標合同管理及產(chǎn)業(yè)政策問答3篇
- 2024年石油化工產(chǎn)品進口與分銷合同
- 2025年度新材料研發(fā)營業(yè)執(zhí)照租賃及市場推廣合作合同3篇
- 2025版煤炭行業(yè)綠色開采與環(huán)保技術(shù)研發(fā)合同2篇
- 二零二五年度區(qū)塊鏈安全技術(shù)研究與應(yīng)用合同2篇
- 2024智能家居產(chǎn)品研發(fā)合同技術(shù)創(chuàng)新
- 二零二五年度大數(shù)據(jù)中心建設(shè)項目融資合同2篇
- HBDSCZ2025年度供應(yīng)鏈管理合作協(xié)議2篇
- 2024年全國網(wǎng)絡(luò)安全職工職業(yè)技能競賽備賽試題庫(含答案)
- 2020年會計繼續(xù)教育完整考試題庫1000題(答案)
- 2024年紙張銷售合同
- 手動及手持電動工具培訓考核試卷
- 2024年湖北省公務(wù)員錄用考試《行測》真題及答案解析
- 自然辯證法習題及答案
- 特色農(nóng)產(chǎn)品超市方案
- 2024國有企業(yè)與民營企業(yè)之間的混合所有制改革合同
- 物流倉庫安全生產(chǎn)
- 2024年醫(yī)院食堂餐飲獨家承包協(xié)議
- 保險公司廉政風險防控制度
評論
0/150
提交評論