版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
圖形程序設(shè)計(jì)1第一頁,共三十三頁,編輯于2023年,星期二
8.1設(shè)備上下文分類(設(shè)備環(huán)境)CDC類(設(shè)備環(huán)境類,Cobject的子類)
CDC類提供了對(duì)設(shè)備描述表進(jìn)行操作的成員函數(shù)以及對(duì)窗口有關(guān)描述表進(jìn)行操作的成員函數(shù)。用提供的函數(shù)對(duì)設(shè)備描述表進(jìn)行操作,繪圖工具的使用,圖形界面的選擇、顏色及調(diào)色板的操作。取得繪圖的屬性、映射方式、視口及窗口的操作、坐標(biāo)轉(zhuǎn)換等。2第二頁,共三十三頁,編輯于2023年,星期二
CDC
CPaintDC
CClientDC
CWindowDC
CMetaFileDC
CPreviewDC
Cobject打印預(yù)覽輸出類CDC的子類3第三頁,共三十三頁,編輯于2023年,星期二
CDC的派生類:
①
CpaintDC類一般用在函數(shù)OnPaint()內(nèi),響應(yīng)WM_PAINT的消息。
windows的消息循環(huán)機(jī)制一直在采集各種消息,當(dāng)接到WMPAINT消息時(shí),自動(dòng)調(diào)用固定的繪圖函數(shù),使用CpaintDC類對(duì)象的成員函數(shù),完成客戶區(qū)繪圖。
(BeginPaint,EndPaint實(shí)現(xiàn)句柄建立與釋放)
②CClientDC類窗口客戶設(shè)備描述表,對(duì)窗口客戶區(qū)的圖形訪問。(GetDC,ReleaseDC實(shí)現(xiàn)句柄建立與釋放)
③
CwindowDC類提供一個(gè)設(shè)備環(huán)境、以便成員函數(shù)在包括非客戶區(qū)在內(nèi)的整個(gè)屏幕區(qū)的繪圖。(GetwindowDC,ReleaseDC建立與釋放句柄)4第四頁,共三十三頁,編輯于2023年,星期二
④CMetaFileDC類
封裝Windows圖元文件中的繪圖方法.
構(gòu)造對(duì)象,調(diào)用Create函數(shù),繪圖:MoveTo,LineTo,…,Close,
返回句柄.(CreateEnhanced,CloseEnhanced建立與釋放句柄)2.繪圖類的主要差別①
CwindowDC類與CpaintDC和CClientDC類的區(qū)別
CwindowDC可以在非客戶(窗口)繪制圖形,坐標(biāo)是全屏幕。
CpaintDC和CClientDC只能在客戶區(qū)繪制圖形。坐標(biāo)原點(diǎn)是客戶區(qū)的左上角。
②
CpaintDC類與CClientDC類的區(qū)別都可在客戶內(nèi)作圖,區(qū)別是CpaintDC類應(yīng)用在OnPaint函數(shù)中,以響應(yīng)windows的WM_PAINT消息,自動(dòng)實(shí)現(xiàn)作圖。
CClientDC類可以實(shí)現(xiàn)實(shí)時(shí)繪圖。
5第五頁,共三十三頁,編輯于2023年,星期二
CClientDCCWindowDC6第六頁,共三十三頁,編輯于2023年,星期二
3.繪圖類的引用方法
①CDC類
CDC類不能用窗口對(duì)象指針初始化對(duì)象,一般不聲明對(duì)象直接應(yīng)用。常用于建立內(nèi)存設(shè)備描述對(duì)象。OnDraw(CDC*pDC)②CpaintDC類
CpaintDCdc(this);
定義一個(gè)CpaintDC的對(duì)象dc,并用當(dāng)前窗口對(duì)象指針this對(duì)對(duì)象dc進(jìn)行初始化。
③
CClientDC類
CClientDCdc(this);
定義一個(gè)CClientDC的對(duì)象dc,并用當(dāng)前窗口對(duì)象指針this對(duì)對(duì)象dc進(jìn)行初始化。
7第七頁,共三十三頁,編輯于2023年,星期二
④
CwindowDC類
CwindowDCdc(this);
定義一個(gè)CwindowDC類的對(duì)象dc,并用當(dāng)前窗口對(duì)象指針this對(duì)dc進(jìn)行初始化。4.CDC的部分函數(shù)
繪圖對(duì)象的函數(shù)SetObject()
顏色調(diào)色板函數(shù)SelectPalette()
繪圖屬性函數(shù)SetBkColor()
映射函數(shù)SetMapMode()
繪制線條函數(shù)LineTo()
置筆位置函數(shù)MoveTo()
圓狐函數(shù)Arc()
文本顏色函數(shù)SetTextColor()8第八頁,共三十三頁,編輯于2023年,星期二voidCMyView::OnDraw(CDC*pDC){CClientDCdc(this);
dc.TextOut(100,100,“成都理工大學(xué)圖形輸出“);}voidCmyView::OnDraw(CDC*pDC){pDC->SetMapMode(2);0.1mm/(象素)
pDC->SetViewportOrg(100,100);pDC->Rectangle(0,0,200,200);}用CClientDC繪圖:用CDC繪圖:9第九頁,共三十三頁,編輯于2023年,星期二8.2圖形設(shè)備對(duì)象利用MFC開發(fā)繪圖程序時(shí),需要各種繪圖工具,如用來繪制線條的畫筆、填充圖形的畫刷及設(shè)置文本格式的字體、顏色等,這些工具稱為圖形設(shè)備對(duì)象。MFC提供了圖形設(shè)備對(duì)象類對(duì)它們進(jìn)行封裝,這些圖形設(shè)備對(duì)象的描述見表。10第十頁,共三十三頁,編輯于2023年,星期二8.3字體對(duì)象在Windows內(nèi)部,字體用一個(gè)名為L(zhǎng)OGFONT的結(jié)構(gòu)表示,結(jié)構(gòu)LOGFONT的定義如下:11第十一頁,共三十三頁,編輯于2023年,星期二
文本處理實(shí)例voidCCEx07aView::OnDraw(CDC*pDC){ CCEx07aDoc*pDoc=GetDocument(); ASSERT_VALID(pDoc); //TODO:adddrawcodefornativedatahereLOGFONTEx07aFont;定義結(jié)構(gòu)體變量名
Ex07aFont.lfHeight=8;結(jié)構(gòu)體成員中字體高度
Ex07aFont.lfWidth=0;字體平均寬度
Ex07aFont.lfEscapement=0;文本顯示的角度
Ex07aFont.lfOrientation=0;字體的角度
Ex07aFont.lfWeight=FW_NORMAL;字體磅數(shù)
Ex07aFont.lfItalic=0;斜體字體
Ex07aFont.lfUnderline=0;下劃線字體
Ex07aFont.lfStrikeOut=0;刪除線的字12第十二頁,共三十三頁,編輯于2023年,星期二
Ex07aFont.lfCharSet=ANSI_CHARSET;Ex07aFont.lfOutPrecision=OUT_DEFAULT_PRECIS;Ex07aFont.lfClipPrecision=CLIP_DEFAULT_PRECIS;Ex07aFont.lfQuality=PROOF_QUALITY;Ex07aFont.lfPitchAndFamily=VARIABLE_PITCH|FF_ROMAN;strcpy(Ex07aFont.lfFaceName,"TimesNewRoman");intposition=0;for(inti=0;i<8;i++){Ex07aFont.lfHeight=16+(i*8);CFontfont;font.CreateFontIndirect(&Ex07aFont);CFont*oldFont=pDC->SelectObject(&font);position=position+Ex07aFont.lfHeight;13第十三頁,共三十三頁,編輯于2023年,星期二
pDC->SetTextColor(RGB(40+i*30,0,0));置色
pDC->SetBkMode(TRANSPARENT);置模式
pDC->TextOut(20,position,"成都理工大學(xué)"); pDC->SelectObject(oldFont);}} 14第十四頁,共三十三頁,編輯于2023年,星期二
15第十五頁,共三十三頁,編輯于2023年,星期二8.4畫筆對(duì)象
MFC中的CPen類封裝了畫筆的功能,畫筆對(duì)象可以幫助繪制出線條復(fù)雜的圖形。一般通過兩個(gè)步驟創(chuàng)建畫筆對(duì)象,首先定義一個(gè)CPen對(duì)象,然后調(diào)用CreatePen函數(shù)初始化畫筆。CreatePen函數(shù)有以下兩種函數(shù)原型,第一種函數(shù)原型如下:BOOLCreatePen(intnPenStyle,intnWidth,COLORREFcrColor);16第十六頁,共三十三頁,編輯于2023年,星期二Cpen類的使用步驟如下:(1)定義畫筆對(duì)象;(2)初始化畫筆對(duì)象;(3)將生成的新畫筆選入當(dāng)前設(shè)置上下文,同時(shí)保留舊的畫筆信息;(4)進(jìn)行繪圖;(5)恢復(fù)舊的畫筆信息。17第十七頁,共三十三頁,編輯于2023年,星期二8.5畫刷對(duì)象畫刷對(duì)象用來在繪圖輸出時(shí)填充一個(gè)封閉圖形,實(shí)際上定義了一個(gè)8像素×8像素大小的位圖,在繪圖時(shí),windows將多個(gè)這樣的位圖平鋪起來,填充封閉圖形。MFC中的CBrush類封裝了畫刷的功能。在創(chuàng)建畫刷時(shí),通常先定義CBrush對(duì)象,然后調(diào)用CreateSolidBrush,CreateaHatchBrush或CreatePattemBrush函數(shù),初始化畫刷對(duì)象。18第十八頁,共三十三頁,編輯于2023年,星期二CBrush類的使用步驟如下:(1)定義畫刷對(duì)象;(2)初始化畫刷對(duì)象;(3)將生成的新畫刷選入當(dāng)前設(shè)備上下文,同時(shí)保留舊的畫刷信息;(4)進(jìn)行繪圖;(5)恢復(fù)舊的畫刷信息。19第十九頁,共三十三頁,編輯于2023年,星期二畫筆與畫刷結(jié)構(gòu)(GDI對(duì)象中的繪圖)
CGdiObject
CBitmap
CBrush
CFont
CPalette
CPen
CRgn20第二十頁,共三十三頁,編輯于2023年,星期二1.畫筆的使用
構(gòu)造一支畫筆
Cpen();Cpen(intnPenStyle,intnWidth,COLORREFcrColor);
風(fēng)格寬度顏色
Cpenpen1(PS_SOLID,10,RGB(255,0,0));Cpen*SelectObject(Cpen*pPen);Cpen*poldPen=pDc->SeclectObject(&pen1);函數(shù)原形選入畫筆21第二十一頁,共三十三頁,編輯于2023年,星期二2.
畫刷的使用
構(gòu)造一支畫刷:
CBrush();CBrush(COLORREFcrColor);CBrush(intnIndex,COLORREFcrColor);
風(fēng)格
HS_VERTICAL垂直陰影線
HS_HORIZONTAL水平陰影線
選入畫刷:
CBrush*Brush;Brush=NewBrush(RGB(255,0,0));CBrush*poldBrush=pDc->SelectObject(&Brush);22第二十二頁,共三十三頁,編輯于2023年,星期二3.在繪圖過程中使用畫筆對(duì)象
voidCmyTestView::OnDraw(CDC*PDC){CmyTestDoc*PDoc=GetDocument();//得到文檔指針獲得數(shù)據(jù)
ASSERT_VALID(PDoc);
//todo:adddrawcodefornativedatahereintposition=0,x;for(x=1;x<=11;x++){CPenPen(PS_SOLID,x*2+1,RGB(0,255,0));CPen*oldPen=PDC→SelectObject(&Pen);position+=x*2+10;PDC→MoveTo(20,position);PDC→LineTo(400,position);PDC→SelectObject(oldPen);}}
23第二十三頁,共三十三頁,編輯于2023年,星期二24第二十四頁,共三十三頁,編輯于2023年,星期二
4.
在繪圖過程中使用畫刷對(duì)象
25第二十五頁,共三十三頁,編輯于2023年,星期二26第二十六頁,共三十三頁,編輯于2023年,星期二
①.曲線
voidCMyView::OnCurve(){ //TODO:Addyourcommandhandlercodehere CClientDC*pdc=newCClientDC(this); Cpenpen; pen.CreatePen(PS_SOLID,5,RGB(250,0,0)); CPen*oldpen=(CPen*)pdc->SelectObject(&pen); constdoublePI=3.14159; inti,cx=10,x2=50,y2,m=35,k; doublef,dt,t,q,a[100]; k=m/2; f=30.0; dt=0.004;8.6畫刷與畫筆的應(yīng)用27第二十七頁,共三十三頁,編輯于2023年,星期二
for(i=1;
溫馨提示
- 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. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 貴州大學(xué)《ERP軟件原理與應(yīng)用》2023-2024學(xué)年第一學(xué)期期末試卷
- 貴陽學(xué)院《有機(jī)化學(xué)I1》2023-2024學(xué)年第一學(xué)期期末試卷
- 貴陽信息科技學(xué)院《高級(jí)英語視聽說》2023-2024學(xué)年第一學(xué)期期末試卷
- 廣州珠江職業(yè)技術(shù)學(xué)院《英語聽說二》2023-2024學(xué)年第一學(xué)期期末試卷
- 廣州幼兒師范高等??茖W(xué)?!兜乩碚n件制作》2023-2024學(xué)年第一學(xué)期期末試卷
- 2025重慶市安全員C證考試(專職安全員)題庫(kù)附答案
- 廣州鐵路職業(yè)技術(shù)學(xué)院《數(shù)量經(jīng)濟(jì)學(xué)》2023-2024學(xué)年第一學(xué)期期末試卷
- 2025湖南建筑安全員《A證》考試題庫(kù)
- 2025安徽省建筑安全員-B證考試題庫(kù)附答案
- 2025湖南省安全員A證考試題庫(kù)及答案
- 部編人教版語文九年級(jí)上冊(cè)文言文課下注釋
- 2023-2024學(xué)年滬科版九年級(jí)上學(xué)期物理期末模擬試卷(含答案)
- 測(cè)繪生產(chǎn)成本費(fèi)用定額2022
- 卷揚(yáng)機(jī)專項(xiàng)施工方案
- 對(duì)外投資合作國(guó)別(地區(qū))指南 -泰國(guó)
- 2023年-2024年崗位安全教育培訓(xùn)試題及答案通用
- 口腔修復(fù)學(xué)(全套課件290p)課件
- 小學(xué)生心理問題的表現(xiàn)及應(yīng)對(duì)措施【全國(guó)一等獎(jiǎng)】
- 小學(xué)生科普人工智能
- 初中學(xué)段勞動(dòng)任務(wù)清單(七到九年級(jí))
- 退耕還林監(jiān)理規(guī)劃
評(píng)論
0/150
提交評(píng)論