運(yùn)算機(jī)圖形學(xué)MFC畫圖模式邏輯坐標(biāo)系和設(shè)備坐標(biāo)系解析_第1頁
運(yùn)算機(jī)圖形學(xué)MFC畫圖模式邏輯坐標(biāo)系和設(shè)備坐標(biāo)系解析_第2頁
運(yùn)算機(jī)圖形學(xué)MFC畫圖模式邏輯坐標(biāo)系和設(shè)備坐標(biāo)系解析_第3頁
運(yùn)算機(jī)圖形學(xué)MFC畫圖模式邏輯坐標(biāo)系和設(shè)備坐標(biāo)系解析_第4頁
運(yùn)算機(jī)圖形學(xué)MFC畫圖模式邏輯坐標(biāo)系和設(shè)備坐標(biāo)系解析_第5頁
已閱讀5頁,還剩6頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、MFC畫圖映射模式:咱們需要先清楚幾個(gè)概念:客戶區(qū)坐標(biāo):應(yīng)用程序的客戶區(qū),左上角(0,0)屏幕坐標(biāo):包括整個(gè)屏幕坐標(biāo),(0,0);屏幕坐標(biāo)用在仆LMOVE消息中(關(guān)于非子窗口>和下面的Windows函數(shù)中:CreateWindow和MoveWxndow(都關(guān)于非子窗口)、GetMessage>GetCursorPos、GetWmdowRectxWindowFromPoint和SetBrushOrg中。用函數(shù)ClientToScreen和ScreenToClient能夠?qū)⒖蛻魠^(qū)域坐標(biāo)轉(zhuǎn)換成屏幕區(qū)域坐標(biāo),或反之。全窗口坐標(biāo):一個(gè)程序的整個(gè)窗口,包括題目條。菜不。轉(zhuǎn)動(dòng)條和窗口框,(0.0

2、).利用GetWindowDC取得的窗口設(shè)備環(huán)境,能夠?qū)⑦壿媶挝晦D(zhuǎn)換成窗口坐標(biāo)。邏輯坐標(biāo)系:設(shè)備坐標(biāo)系:窗口坐標(biāo):視口坐標(biāo):數(shù)據(jù)顯示和圖形繪制并非是在屏幕上直接進(jìn)行的,而是第一將圖形繪制到一個(gè)具有邏輯坐標(biāo)系的虛擬窗口中,然后在依照預(yù)先設(shè)置好的映射模式,將虛擬窗口中的圖形或圖像映射到屏幕或打印機(jī)等設(shè)備中。虛擬的窗口叫窗口window,顯示圖像的設(shè)備確實(shí)是視口viewport.繪制圖像的進(jìn)程:先繪制到虛擬窗口(邏輯坐標(biāo))(映射模式)屏幕或打印機(jī)等設(shè)備(設(shè)備坐標(biāo))邏輯原點(diǎn):邏輯坐標(biāo)原點(diǎn)算作是窗口中的一個(gè)固定的點(diǎn),通過該點(diǎn)引出兩條坐標(biāo)線,成立邏輯坐標(biāo)系,長(zhǎng)度單位和正方向通過setmapmode()來設(shè)

3、置。窗口原點(diǎn):只是邏輯坐標(biāo)系中一個(gè)可變點(diǎn),那個(gè)點(diǎn)通過SetWindowOrg來設(shè)置。設(shè)備原點(diǎn):設(shè)備坐標(biāo)原點(diǎn)可看做在視口的一個(gè)固定點(diǎn),關(guān)于屏幕而言,它對(duì)應(yīng)于左上角點(diǎn),通過那個(gè)點(diǎn)成立設(shè)備坐標(biāo)系,長(zhǎng)度單位像素xT、y向下視口原點(diǎn):視口原點(diǎn)是設(shè)備坐標(biāo)系中的一個(gè)可變的點(diǎn),那個(gè)點(diǎn)的坐標(biāo)能夠通過SetViewOrg來設(shè)置,邏輯坐標(biāo)系和設(shè)備坐標(biāo)系的聯(lián)系:是通過窗口原點(diǎn)和視口原點(diǎn)聯(lián)系的,當(dāng)圖像各點(diǎn)從邏輯坐標(biāo)系向設(shè)備坐標(biāo)系映射時(shí),依照坐標(biāo)之間的換算關(guān)系,換算成圖像各點(diǎn)在設(shè)備坐標(biāo)中相關(guān)于視口原點(diǎn)的位置,實(shí)現(xiàn)坐標(biāo)映像。事實(shí)上視口原點(diǎn)和窗口原點(diǎn)是同一個(gè)點(diǎn)(默許的都是(0,0),在設(shè)備坐標(biāo)系和邏輯坐標(biāo)系中有不同的坐標(biāo)值,

4、可是這兩種坐標(biāo)系位置是固定的,原點(diǎn)都是(0,0)(或更標(biāo)準(zhǔn)一些:XL-XLO=(xWindowExt/xVieuportExt)*(XD-XDO)YL-YLO=(yWindowExt/yVieortExt)*(YD-YDO));L表示邏輯坐標(biāo)系,D表示設(shè)備坐標(biāo)系,L0窗口原點(diǎn),DO設(shè)備原點(diǎn)邏輯坐標(biāo)系和設(shè)備坐標(biāo)系轉(zhuǎn)換步驟:設(shè)置映射模式設(shè)置窗口原點(diǎn)設(shè)置視口原點(diǎn)坐標(biāo)轉(zhuǎn)換(windows自行處置)例子1.MM_TEXT模式是默許情形下的模式,坐標(biāo)原點(diǎn)位于客戶區(qū)的左上角,x軸水平方向向右,y軸垂直向下,坐標(biāo)大體單位為一個(gè)像素°Window:viewport1:1(1)pDC->SetMa

5、pMode(MM.TEXT);設(shè)置映射模式MM.TEXTpDC->SetWindow0rg(100,100);不設(shè)置時(shí),(0,0)點(diǎn)窗口坐標(biāo)(0,0)/CPointpoint=pDC->GetWindowOrg();/pDC->Text0ut,“thisisapp");pDC->SetViewport0rg(100,100);/pDC->TextOut+200,+200,"thisisapp2");pDC->Rectangle(CRect(100,100,300,300);%我的程序轉(zhuǎn)圖-GD12_1_8文件3)編輯組)查看幫助

6、時(shí)就緒LinkingMM.TEXT:XL-XLO=N*(XD-XDO);100T00=N*(XD-100)->XDn00;N=l;(100,10()->(100,100)YL-YLO=N*(YD-YDO);100-100=N*(YD-1OO)->YD=1OO;300-100=1*(X0-100);XD=300300-100=1*(YD-100);YD=300;例子2:pDC->SetMapMode(MM_TEXT);設(shè)置映射模式/pDC->SetWindow0rg(100,100);不設(shè)置時(shí),(0,0)點(diǎn)窗口坐標(biāo)(0,0)/CPointpoint=pDC->

7、GetWindowOrg0;/pDC->TextOut,z,thisisapp");pDC->SetViewport0rg(100,100);/pDC->Text0ut+200,+200,?,thisisapp2");pDC->Rectangle(CRect(100,100,300,300);當(dāng)我的程序繪圖-GDI2_1_8文件CF編輯0E)查看(V)幫助(H)口自兄匾,昌?©360安.京MFC類.Windoworg(0,0),viewportorg(100,100)100-0=1*(XD1-100);XDl=200;100-0=1*(YD

8、1-100);YDl=200;(200,200)t(400,400)例子3:pDC->SetMapMode(W_TEXT);設(shè)置映射模式pDC->SetWindow0rg(100,100);不設(shè)置時(shí),(0,0)點(diǎn)窗口坐標(biāo)(0,0)/CPointpoint=pDC->GetWindowOrg0;/pDC->Text0ut,,zthisisapp");/pDC->SetViewport0rg(100,100);/pDC->Text0ut+200,+200,/zthisisapp2");pDC->Rectangle(CRect(100,1

9、00,300,300);知我的程序繪圖-CD12.文件真編輯的查看(V)幫助(H)目is亳冠a?&E:V.360.紀(jì)MFC.g?Windoworg(100,100),viewportorg(0r0)100-100=1*(X01-0);XD1=O;100-100=1*(YD1-0);YD1=O;(0,0)->(200,200)例子4:CRectrect;聲明客戶區(qū)矩形GetClientRect(&rect);獲得客戶區(qū)坐標(biāo)pDC->SetMapMode(MM.TEXT);設(shè)置映射模式pDC->SetWindow0rg(100,100);不設(shè)置時(shí),(0,0)點(diǎn)窗口

10、坐標(biāo)(0,0)/CPointpoint=pDC->GetWindowOrg();/pDC->Text0ut,“thisisapp");pDC->Set¥iewport0rg(100,100);/pDC->TextOut+200,+200,?,thisisapp2");pDC->Rectangle(CRect(100,100,300,300);就緒在客戶區(qū)繪制;例子5MNLL0METRIC每一個(gè)邏輯坐標(biāo)系轉(zhuǎn)換為,x->,y向上boutDIg 3DI2J_8App 3DI2_1_8Doc WI2J_8View dainFrame o

11、bals/TODO:JdddrjwcodefornatiuedatahereCRectrect;聲明客戶GetClientRect(ftrect);獲得客戶pDC->SetMjpt1ode(MM-LOMETRIC);/逑置映射模式pDC->SetWindowOrg(100,100)WCPointpoint=pDC->GetWindowOrg();/pDC->TextOut(point.x,point/'thisisapp");pDC->SetUiewpoMtOKg(100,100);/pDC->TextOut(point.x+20O,poi

12、nt.+200,"thisispDC->Rectanqle(CRect(100l100,300l300):Re-=(100,100)=>(10mm,10mm);(300,300)=>(30mm,30mm)例子:各向異性模式:MM_ANISOTROPIC,xWindow:xViewportyWindow:yVieuport兩個(gè)比例結(jié)果不同;若是相同那么是MM_ISOTROPIC;邏輯坐標(biāo)系和設(shè)備坐標(biāo)系并無發(fā)生轉(zhuǎn)變。只是在設(shè)備坐標(biāo)系中,坐標(biāo)的值若是為負(fù),那么是顯示到X軸上方,實(shí)際是看不到的。CRect rect;聲明客戶區(qū)矩形GetClientRect(&rec

13、t);獲得客戶區(qū)坐標(biāo)pDC->SetMapMode(MM.ANISOTROPIC);設(shè)置映射模式pDC->SetWindowExt0,0);pDC->SetViewportExt(),();pDC->Rectangle(CRect(100,-100,300,-300);.1ISSFXJTQ業(yè),-i=-zt=lf-1-”工d/AQXXZ-J-OiliML/心,期我的程序繪圖-GD工2_1_8文件編輯查看幫助00口自口電電?100-0=1*(XD-0);XD=100;-100-0=-l*(YD-0);YD=100;(100,100)(300,-300)->(300,3

14、00);例子CRectrect;聲明客戶區(qū)矩形GetClientRect(&rect);獲得客戶區(qū)坐標(biāo)pDC->SetMapMode(MM.ANIS0TR0PIC);設(shè)置映射模式pDC->SetWindowExt0,0);pDC->SetViewportExt0,0);pDC->Rectangle(CRect(100,100,300,300);)12 1 JCAboCGDI匚回文件腕回生巖幫助詠CGDI; CGDICMmiGloba童I Reing.8U10(100. 100) - (100, -100)(300, 300) - (300, -300)Ji%,-

15、h ,- 一 ”1 4 x| |/ CGDI2 1 8Uiev> drauinq例子:(MM_ANIS0TR0PIC模式若是比例相同(變成各同向性),各異向性模式設(shè)置失效,變成MM.TEXTCRectrect;聲明客戶區(qū)矩形GetClientRect(&rect);獲得客戶區(qū)坐標(biāo)pDC->SetMapMode(MM.ANISOTROPIC);設(shè)置映射模式pDC->SetWindowExt0,0);pDC->SetViewportExt(),();pDC->Rectangle(CRect(100,100,300,300);為我的程序繪圖-GD12_1_8文件編輯查看幫助00百口百口葉電電SWiI模式MMJS0TR0PIC同模式MM_ANIS0TR0PIC用方類似,可是需要注意比例設(shè)置相同“其它幾個(gè)模式(邏輯坐標(biāo)系轉(zhuǎn)變了,x->,y向上同時(shí)也確實(shí)是長(zhǎng)度轉(zhuǎn)換大水發(fā)生轉(zhuǎn)變例子:CRectrect;聲明客戶區(qū)矩形GetClientRect(&rect);獲得客戶區(qū)坐標(biāo)pDC->SetMa

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論