武漢大學(xué)遙感院GPSVC編程_第1頁(yè)
武漢大學(xué)遙感院GPSVC編程_第2頁(yè)
武漢大學(xué)遙感院GPSVC編程_第3頁(yè)
武漢大學(xué)遙感院GPSVC編程_第4頁(yè)
武漢大學(xué)遙感院GPSVC編程_第5頁(yè)
已閱讀5頁(yè),還剩19頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

與圖形學(xué)相關(guān)的VC編程目的: 掌握與圖形學(xué)相關(guān)的基本的VC編程方法要求:平時(shí)作業(yè)用VC完成作為本課程的平時(shí)作業(yè)成績(jī),最終上交一個(gè)包含基本方法的計(jì)算機(jī)圖形學(xué)演示軟件。武漢大學(xué)遙感院GPSVC編程共24頁(yè),您現(xiàn)在瀏覽的是第1頁(yè)!VC程序框架的建立步驟:打開(kāi)VC++6.0軟件,F(xiàn)ile→New→Projects→MFCAppWizard(exe)→ProjectName:test→OKSingleDocument→Next→Next→Next→Next→Asastaticallylinkedlibrary→Next→Finish→OK至此,一個(gè)框架建好編譯框架:build→buildtest.exe運(yùn)行程序:build→executetest.exe武漢大學(xué)遙感院GPSVC編程共24頁(yè),您現(xiàn)在瀏覽的是第2頁(yè)!VC框架四個(gè)類(lèi)介紹主框架類(lèi)(CMainFrame):管理窗口應(yīng)用類(lèi)(CTestApp):對(duì)有關(guān)部分進(jìn)行管理和調(diào)度文檔類(lèi)(CTestDoc):管理程序數(shù)據(jù)視圖類(lèi)(CTestView):管理圖形顯示文檔類(lèi)、視圖類(lèi)是我們編程要涉及到的主要類(lèi)武漢大學(xué)遙感院GPSVC編程共24頁(yè),您現(xiàn)在瀏覽的是第3頁(yè)!Windows事件驅(qū)動(dòng)機(jī)制Windows系統(tǒng)設(shè)置了許多事件,如按鍵盤(pán),動(dòng)鼠標(biāo),打開(kāi)、關(guān)閉窗口等,它們用以WM_開(kāi)頭的變量標(biāo)識(shí)。Windows系統(tǒng)自動(dòng)檢測(cè)這些事件,當(dāng)事件發(fā)生時(shí),如按下鼠標(biāo)左鍵,系統(tǒng)馬上通知應(yīng)用程序,應(yīng)用程序有機(jī)會(huì)對(duì)事件做出反應(yīng)。如何反應(yīng),需要編程實(shí)現(xiàn)。我們?cè)O(shè)計(jì)畫(huà)直線(xiàn)時(shí)鼠標(biāo)事件反應(yīng)方式如下:按左鍵定點(diǎn);按右鍵結(jié)束定點(diǎn),開(kāi)始畫(huà)線(xiàn);鼠標(biāo)移動(dòng)時(shí)顯示鼠標(biāo)位置。需要的事件是:按左鍵,按右鍵,鼠標(biāo)移動(dòng)。武漢大學(xué)遙感院GPSVC編程共24頁(yè),您現(xiàn)在瀏覽的是第4頁(yè)!鼠標(biāo)坐標(biāo)顯示(1)為了精確定點(diǎn),必須知道當(dāng)前坐標(biāo),因此必須為操作者提示鼠標(biāo)坐標(biāo)。準(zhǔn)備將坐標(biāo)顯示在應(yīng)用程序窗口的左下腳。步驟如下:修改主框架類(lèi)注銷(xiāo)mainfrm.h中的變量// CStatusBarm_wndStatusBar;在mainfrm.cpp前部中聲明為全程變量#ifdef_DEBUG#definenewDEBUG_NEW#undefTHIS_FILEstaticcharTHIS_FILE[]=__FILE__;#endifCStatusBarm_wndStatusBar;武漢大學(xué)遙感院GPSVC編程共24頁(yè),您現(xiàn)在瀏覽的是第5頁(yè)!鼠標(biāo)坐標(biāo)顯示(3)將CMainFrame::OnCreate函數(shù)中的 if(!m_wndToolBar.CreateEx(this,TBSTYLE_FLAT,WS_CHILD|WS_VISIBLE|CBRS_TOP |CBRS_GRIPPER|CBRS_TOOLTIPS|CBRS_FLYBY|CBRS_SIZE_DYNAMIC)|| !m_wndToolBar.LoadToolBar(IDR_MAINFRAME))改為

if(!m_wndToolBar.Create(this)|| !m_wndToolBar.LoadToolBar(IDR_MAINFRAME))武漢大學(xué)遙感院GPSVC編程共24頁(yè),您現(xiàn)在瀏覽的是第6頁(yè)!鼠標(biāo)坐標(biāo)顯示(5)打開(kāi)CTestView.cpp文件,在前部對(duì)全程變量進(jìn)行申明#ifdef_DEBUG#definenewDEBUG_NEW#undefTHIS_FILEstaticcharTHIS_FILE[]=__FILE__;#endifexternCStatusBarm_wndStatusBar;武漢大學(xué)遙感院GPSVC編程共24頁(yè),您現(xiàn)在瀏覽的是第7頁(yè)!編寫(xiě)菜單響應(yīng)程序(1)已經(jīng)創(chuàng)建了DDA直線(xiàn)菜單,響應(yīng)菜單程序步驟如下:打開(kāi)程序框架→View→ClassWizard…→ClassName:CTestView(即菜單響應(yīng)程序放在視圖類(lèi)中)→ObjectIDs:ID_LINE_DDA→Messages:Command→AddFunction→確定函數(shù)名:OnLineDDA→EditFunction在CTestView.cpp文件中可以看到函數(shù)OnLineDDA武漢大學(xué)遙感院GPSVC編程共24頁(yè),您現(xiàn)在瀏覽的是第8頁(yè)!編寫(xiě)菜單響應(yīng)程序(3)DDA響應(yīng)程序如下:voidCTestView::OnLineDDA(){ //TODO:Addyourmandhandlercodehere

PressNum=0;MenuID=1;}這兩個(gè)變量對(duì)所有菜單響應(yīng)都需要,設(shè)置為視圖類(lèi)變量,方法如下:在TestView.h中加入classCTestView:publicCView{protected://createfromserializationonly

intMenuID,PressNum; CTestView();武漢大學(xué)遙感院GPSVC編程共24頁(yè),您現(xiàn)在瀏覽的是第9頁(yè)!編寫(xiě)菜單響應(yīng)程序(5)幾點(diǎn)說(shuō)明在視圖類(lèi)直接畫(huà)線(xiàn)更簡(jiǎn)單,即DDALine函數(shù)放在視圖類(lèi)中,不用在文檔和視圖類(lèi)之間傳數(shù)據(jù),但編程不規(guī)范。直線(xiàn)端點(diǎn)是重要數(shù)據(jù),應(yīng)該保留。保留和管理數(shù)據(jù)是文檔類(lèi)的任務(wù),應(yīng)該交給文檔類(lèi)。在視圖類(lèi)中直接對(duì)文檔類(lèi)公共變量賦值。在視圖類(lèi)中使用文檔類(lèi)公共變量要用文檔類(lèi)指針。取得文檔類(lèi)指針要用函數(shù)GetDocument()。視圖類(lèi)中使用的文檔類(lèi)公共變量和函數(shù)必須事先在文檔類(lèi)中聲明和定義。武漢大學(xué)遙感院GPSVC編程共24頁(yè),您現(xiàn)在瀏覽的是第10頁(yè)!編寫(xiě)菜單響應(yīng)程序(7)類(lèi)函數(shù)定義1.打開(kāi)testDoc.h,增加classCTestDoc:publicCDocument{ ……public:

voidDDALine(CClientDC*DCPoint);2.打開(kāi)testDoc.cpp,在末尾增加空函數(shù)voidCTestDoc::DDALine(CClientDC*DCPoint){} 編譯程序,程序不畫(huà)線(xiàn),因?yàn)镈DALine是空函數(shù),編程實(shí)現(xiàn)DDA方法、并添加在該函數(shù)中,就可運(yùn)行。目前,DDA方法程序框架已搭好。武漢大學(xué)遙感院GPSVC編程共24頁(yè),您現(xiàn)在瀏覽的是第11頁(yè)!VC圖形編程知識(shí)(2)幾點(diǎn)說(shuō)明CClientDC是描述或定義繪圖設(shè)備的類(lèi),因?yàn)閃indows提供的設(shè)備太多,在畫(huà)圖前必須指定設(shè)備變量DCPoint是一個(gè)指向CClientDC類(lèi)實(shí)例的指針,這個(gè)實(shí)例是在視圖類(lèi),用參數(shù)this定義的,所以該設(shè)備就是屏幕。這個(gè)實(shí)例中有許多繪圖函數(shù),我們可以使用。變量DCPoint是從視圖類(lèi)通過(guò)函數(shù)傳遞過(guò)來(lái)的,它仍然指向那個(gè)實(shí)例。在文檔類(lèi)中,仍然可以使用這些繪圖函數(shù)。利用“help”功能,可以查看所有繪圖函數(shù)。其中畫(huà)點(diǎn)函數(shù)SetPixel(),今后常用。武漢大學(xué)遙感院GPSVC編程共24頁(yè),您現(xiàn)在瀏覽的是第12頁(yè)!技巧:“橡皮筋”技術(shù)(2)在視圖類(lèi)聲明兩個(gè)變量記錄點(diǎn)信息:classCTestView:publicCView{protected://createfromserializationonly intMenuID,PressNum;

CPointmPointOrign, mPointOld; CTestView();在函數(shù)OnLButtonDown增加代碼: if(MenuID==1){//DDA直線(xiàn) if(PressNum==0){ pDoc->group[PressNum]=point; PressNum++;

mPointOrign=point;mPointOld=point;;//記錄點(diǎn) SetCapture();}武漢大學(xué)遙感院GPSVC編程共24頁(yè),您現(xiàn)在瀏覽的是第13頁(yè)!增加菜單框架提供給我們的四個(gè)菜單,不是我們需要的,要增加自己的菜單。步驟如下:打開(kāi)程序框架File→OpenWorkSpace…→打開(kāi)test目錄→test.dsw→打開(kāi)打開(kāi)菜單資源ResourceView→testResource→Menu→IDR_MAINFRAME增加菜單項(xiàng)右擊空白框→Properties→Caption:直線(xiàn)生成→右擊下方空白框→Properties→Caption:DDA直線(xiàn)→ID:ID_LINE_DDA→關(guān)閉對(duì)話(huà)框編譯運(yùn)行程序,菜單項(xiàng)為灰色,無(wú)法運(yùn)行,要為它編程序編寫(xiě)DDA直線(xiàn)生成程序前,為鼠標(biāo)操作做準(zhǔn)備,因?yàn)槲覀円檬髽?biāo)來(lái)畫(huà)線(xiàn)武漢大學(xué)遙感院GPSVC編程共24頁(yè),您現(xiàn)在瀏覽的是第14頁(yè)!增加鼠標(biāo)事件響應(yīng)程序框架左鍵事件步驟:打開(kāi)程序框架→View→ClassWizard…→ClassName:CTestView(即鼠標(biāo)響應(yīng)程序放在視圖類(lèi)中)→Messages:WM_LBUTTONDOWN→AddFunction→EditFunction可以看到TestView.cpp(視圖類(lèi)程序)增加了一個(gè)函數(shù)OnLButtonDown,目前只是一個(gè)空框架用同樣的方法增加右鍵、鼠標(biāo)移動(dòng)框架,方法同上,只是在Messages下拉表中分別選WM_RBUTTONDOWN,WM_MOUSEMOVE事件。說(shuō)明:鼠標(biāo)事件一般在圖上操作時(shí)發(fā)生,所以其響應(yīng)函數(shù)放在視圖類(lèi)中武漢大學(xué)遙感院GPSVC編程共24頁(yè),您現(xiàn)在瀏覽的是第15頁(yè)!鼠標(biāo)坐標(biāo)顯示(2)將staticUINTindicators[]={ ID_SEPARATOR,//statuslineindicator ID_INDICATOR_CAPS, ID_INDICATOR_NUM, ID_INDICATOR_SCRL,};改為staticUINTindicators[]={

ID_SEPARATOR,//statuslineindicator ID_SEPARATOR,//statuslineindicator ID_SEPARATOR,//statuslineindicator ID_SEPARATOR,//statuslineindicator};武漢大學(xué)遙感院GPSVC編程共24頁(yè),您現(xiàn)在瀏覽的是第16頁(yè)!鼠標(biāo)坐標(biāo)顯示(4)在CMainFrame::OnCreate函數(shù)中最后一個(gè)語(yǔ)句前增加

m_wndStatusBar.SetPaneInfo(1,300,SBPS_NORMAL,100); m_wndStatusBar.SetPaneInfo(2,301,SBPS_NORMAL,30); m_wndStatusBar.SetPaneInfo(3,302,SBPS_NORMAL,30); return0;}武漢大學(xué)遙感院GPSVC編程共24頁(yè),您現(xiàn)在瀏覽的是第17頁(yè)!鼠標(biāo)坐標(biāo)顯示(6)增加內(nèi)容voidCTestView::OnMouseMove(UINTnFlags,CPointpoint){ //TODO:Addyourmessagehandlercodehereand/orcalldefault

intxx,yy; charp1[20]; CClientDCpDC(this);//聲明這個(gè)窗口的繪圖設(shè)備 OnPrepareDC(&pDC);//準(zhǔn)備繪圖設(shè)備 ClientDC.DPtoLP(&point);//將設(shè)備坐標(biāo)轉(zhuǎn)化為邏輯坐標(biāo) xx=point.x;//取出坐標(biāo)信息 yy=point.y; sprintf(p1,”%4d”,xx);//轉(zhuǎn)化為字符串 m_wndStatusBar.SetPaneText(2,p1,TRUE);//在第2個(gè)區(qū)域顯示x坐標(biāo) sprintf(p1,”%4d”,yy); m_wndStatusBar.SetPaneText(3,p1,TRUE);//在第3個(gè)區(qū)域顯示y坐標(biāo) CView::OnMouseMove(nFlags,point);}編譯程序,看效果武漢大學(xué)遙感院GPSVC編程共24頁(yè),您現(xiàn)在瀏覽的是第18頁(yè)!編寫(xiě)菜單響應(yīng)程序(2)幾點(diǎn)說(shuō)明:鼠標(biāo)響應(yīng)框架只有一個(gè),我們要用來(lái)畫(huà)各種直線(xiàn)、圓、曲線(xiàn)等圖形,它們都要加在鼠標(biāo)響應(yīng)框架中;各種圖形的操作方法相似,無(wú)非是用鼠標(biāo)確定幾個(gè)點(diǎn);為了不發(fā)生混淆,響應(yīng)程序只要確定選定菜單標(biāo)識(shí)號(hào),按鍵數(shù)量武漢大學(xué)遙感院GPSVC編程共24頁(yè),您現(xiàn)在瀏覽的是第19頁(yè)!編寫(xiě)菜單響應(yīng)程序(4)在鼠標(biāo)響應(yīng)框架中加入DDA的取點(diǎn)響應(yīng)如下:voidCTestView::OnLButtonDown(UINTnFlags,CPointpoint){ //TODO:Addyourmessagehandlercodehereand/orcalldefault

CTest1Doc*pDoc=GetDocument();//獲得文檔類(lèi)指針 CClientDCpDC(this); //定義當(dāng)前繪圖設(shè)備 if(MenuID==1){//DDA直線(xiàn) if(PressNum==0){//次按鍵將點(diǎn)保留在文檔類(lèi)數(shù)組中 pDoc->group[PressNum]=point;PressNum++;SetCapture();} elseif(PressNum==1){//第二次按鍵保留第二點(diǎn),用文檔類(lèi)畫(huà)線(xiàn) pDoc->group[PressNum]=point;PressNum=0;//程序畫(huà)圖 pDoc->DDALine(&pDC);ReleaseCapture();}} CView::OnLButtonDown(nFlags,point);}//SetCapture()函數(shù)功能,強(qiáng)行滯留鼠標(biāo),滯留的鼠標(biāo)只能畫(huà)點(diǎn)//ReleaseCapture()函數(shù)功能,釋放鼠標(biāo),鼠標(biāo)可以繼續(xù)畫(huà)點(diǎn),可以點(diǎn)//菜單武漢大學(xué)遙感院GPSVC編程共24頁(yè),您現(xiàn)在瀏覽的是第20頁(yè)!編寫(xiě)菜單響應(yīng)程序(6)類(lèi)變量聲明打開(kāi)testDoc.h,增加classCTestDoc:publicCDocument{protected://createfromserializationonly CTestDoc(); DECLARE_DYNCREATE(CTttDoc);public: CPointgroup[100];武漢大學(xué)遙感院GPSVC編程共24頁(yè),您現(xiàn)在瀏覽的是第21頁(yè)!VC圖形編程知識(shí)(1)利用所搭起的框架,介紹VC圖形編程知識(shí)在DDALine函數(shù)中增加代碼voidCTestDoc::DDALine(CClientDC*DCPoint){//定義一支新筆

CPenpen(0,0,RGB(255,0,0));//繪圖設(shè)備選新筆,同時(shí)保留舊筆 CPen*pOldPen=DCPoint->SelectObject(&pen);//繪圖方法為直接畫(huà) DCPoint->SetROP2(R2_COPYPEN);//抬筆到點(diǎn),點(diǎn)由鼠標(biāo)事先確定,存放在group[0] DCPoint->MoveTo(group[0]);//畫(huà)到第二點(diǎn),第二點(diǎn)由鼠標(biāo)事先確定,存放在group[1]

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論