第五章 圖形和文本輸出_第1頁
第五章 圖形和文本輸出_第2頁
第五章 圖形和文本輸出_第3頁
第五章 圖形和文本輸出_第4頁
第五章 圖形和文本輸出_第5頁
已閱讀5頁,還剩43頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第五章圖形和文本輸出第一頁,共四十八頁,編輯于2023年,星期四圖形設(shè)備接口GDI(graphicsdeviceinterface)矢量圖形創(chuàng)建線和填充圖形光柵圖形位圖文本輸出以邏輯坐標(biāo)為單位計算文本輸出位置第二頁,共四十八頁,編輯于2023年,星期四繪圖工具GDI對象-GdiObjectCGdiObject是一個抽象類,該類不能直接定義對象。必須使用它的派生類第三頁,共四十八頁,編輯于2023年,星期四設(shè)備上下文DC

devicecontextGDI創(chuàng)建用來代表設(shè)備連接的數(shù)據(jù)結(jié)構(gòu)主要功能:允許應(yīng)用程序使用一個輸出設(shè)備提供窗口應(yīng)用程序,設(shè)備驅(qū)動,和輸出設(shè)備之間的連接保存當(dāng)前信息,例如在一個窗口內(nèi)繪圖使用的顏色,畫筆的寬度、畫刷的類型等等保存窗口剪取區(qū)域(clippingregion),限制程序輸出到輸出設(shè)備中窗口覆蓋的區(qū)域第四頁,共四十八頁,編輯于2023年,星期四設(shè)備上下文類-CDCCObjectCDCCClientDCCMetaFileDCCPanitDCCWindowDC第五頁,共四十八頁,編輯于2023年,星期四OnDraw函數(shù)voidCMyView::OnDraw(CDC*pDC){ CMyDoc*pDoc=GetDocument(); ASSERT_VALID(pDoc);

//TODO:adddrawcodefornativedatahere

pDC->TextOut(1,1,”helloworld!”);}第六頁,共四十八頁,編輯于2023年,星期四WM_PAINT消息產(chǎn)生WM_PAINT消息的場合通常有

窗口移動后及最大化,最小化后的刷新。

被覆蓋區(qū)域的刷新,如下拉菜單覆蓋的區(qū)域。

無效區(qū)域產(chǎn)生后的刷新,如執(zhí)行滾動條操作,將一區(qū)域移動至不可見。

第七頁,共四十八頁,編輯于2023年,星期四WM_PAINT消息人為地生成一個繪制消息,重繪窗口的方法:Invalidate(true);CRectrect(1,1,300,300);InvalidateRect(&Rect,true);第八頁,共四十八頁,編輯于2023年,星期四獲取設(shè)備上下文的方法接受一個參數(shù)為指向CDC對象的指針

voidCMyView::OnDraw(CDC*pDC);

構(gòu)造CClientDC對象

CClientDCdc(this);

第九頁,共四十八頁,編輯于2023年,星期四接受一個參數(shù)為指向CDC對象的指針voidCMyView::OnDraw(CDC*pDC){ CMyDoc*pDoc=GetDocument(); ASSERT_VALID(pDoc);

//TODO:adddrawcodefornativedatahere//在坐標(biāo)為10,10的位置上畫一點,顏色黑色

pDC->SetPixel(CPoint(10,10),RGB(0,0,0));}參數(shù)為指向CDC對象的指針第十頁,共四十八頁,編輯于2023年,星期四構(gòu)造CClientDC對象構(gòu)造CClientDC對象

VoidCMyView::OnLButtonDown(UNITnFlags,CPointpoint){//TODO:adddrawcodefornativedatahereCClientDCdc(this);//this指針將CMyView賦值給創(chuàng)建的dc對象

dc.SetPixel(point,RGB(255,0,0));CView::OnLButtonDown(nFlags,point);}第十一頁,共四十八頁,編輯于2023年,星期四任務(wù)1編寫一個單文檔MFC(EXE)程序,在視圖類增加成員變量,追蹤鼠標(biāo)的左鍵雙擊位置的坐標(biāo),并輸出詳見例5-1

第十二頁,共四十八頁,編輯于2023年,星期四處理文本

設(shè)置文本顏色

設(shè)置文本顯示屬性

設(shè)置字體

格式化文本

文本輸出函數(shù)

圖形和文本并沒有明顯的界限第十三頁,共四十八頁,編輯于2023年,星期四設(shè)置文本顏色COLORREFSetTextColor(COLORREFcrColor);

COLORREFSetBkColor(COLORREFcrColor);

第十四頁,共四十八頁,編輯于2023年,星期四顏色的表示第十五頁,共四十八頁,編輯于2023年,星期四//基本三元色COLORREFcrRed=RGB(255,0,0);COLORREFcrGreen=RGB(0,255,0);COLORREFcrBlue=RGB(0,0,255)//16-color設(shè)備支持顏色constCOLORREFg_crBlack=RGB(0,0,0);constCOLORREFg_crYellow=RGB(255,255,0);constCOLORREFg_crDkYellow=RGB(128,128,0);constCOLORREFg_crRed=RGB(255,0,0);constCOLORREFg_crDkRed=RGB(128,0,0);constCOLORREFg_crMagenta=RGB(255,0,255);constCOLORREFg_crDkMagenta=RGB(128,0,128);constCOLORREFg_crBlue=RGB(0,0,255);constCOLORREFg_crDkBlue=RGB(0,0,128);第十六頁,共四十八頁,編輯于2023年,星期四voidCMyView::OnDraw(CDC*pDC){ CMyDoc*pDoc=GetDocument(); ASSERT_VALID(pDoc);

pDC->SetTextColor(RGB(255,0,0)); pDC->SetBkColor(RGB(0,0,0)); CStringstr;str.Format("鼠標(biāo)左鍵雙擊的位置是[%d,%d]",

m_LPoint.x,m_LPoint.y);pDC->TextOut(0,0,str);}第十七頁,共四十八頁,編輯于2023年,星期四設(shè)置文本顯示屬性

函數(shù)說明SetBkModeGetBkMode設(shè)置和獲取背景模式SetTextAlignGetTextAlign設(shè)置和獲取對齊方式SetTextJusttificationSetTextCharaterExtra調(diào)整文本第十八頁,共四十八頁,編輯于2023年,星期四設(shè)置字體

定義CFont對象調(diào)用CreateFont函數(shù)創(chuàng)建字體將創(chuàng)建的字體對象選入DC,并保存前一個被選入DC的字體對象第十九頁,共四十八頁,編輯于2023年,星期四voidCMyView::OnDraw(CDC*pDC){ CMyDoc*pDoc=GetDocument(); ASSERT_VALID(pDoc); CFontNewFont; NewFont.CreateFont(65,65,0,0,FW_DONTCARE,true,false,false,DEFAULT_CHARSET,OUT_CHARACTER_PRECIS,CLIP_CHARACTER_PRECIS,DEFAULT_QUALITY,DEFAULT_PITCH|FF_DONTCARE,"黑體"); CFont*pOldFont; pOldFont=pDC->SelectObject(&NewFont); pDC->TextOut(10,10,"字體效果");}第二十頁,共四十八頁,編輯于2023年,星期四格式化文本

文本測量函數(shù)

GetTextExtent獲取字符串高度和寬度GetTextMetrics

獲取Textmetric類型數(shù)據(jù),包含具體的字體測量信息第二十一頁,共四十八頁,編輯于2023年,星期四第二十二頁,共四十八頁,編輯于2023年,星期四文本輸出函數(shù)

函數(shù)說明TextOut在屏幕的固定位置用當(dāng)前設(shè)定的顏色、字體、對齊方式輸出文本TabbedTextOut與TextOut的功能相似,唯一差別是可以為支持制表符而定義一組制表站位置DrawText在一個區(qū)域中顯示并格式化文本ExtTextOut與TextOut的功能相似,但可以使用該函數(shù)刪去超出矩形的正文,用正文背景填充矩形,調(diào)整字符間隔。

第二十三頁,共四十八頁,編輯于2023年,星期四任務(wù)2閱讀單文檔MFC(EXE)程序EXAM5_2中處理文本顯示的OnDraw函數(shù)。請分析每一行的文本串作了哪些文本屬性設(shè)置、格式設(shè)置和字體設(shè)置。詳見例5-2

第二十四頁,共四十八頁,編輯于2023年,星期四

文本屬性格式化字體文本串1紅色

默認字體文本串2綠色求下一行位置高度30,寬度10,粗體,黑體字文本串3藍色求同行字符串尾部位置

文本串4灰色求下一行位置高度30,斜體,下劃線,大號字分析結(jié)果:第二十五頁,共四十八頁,編輯于2023年,星期四任務(wù)1文本處理詳見實驗1第二十六頁,共四十八頁,編輯于2023年,星期四處理繪圖

簡單的圖形輸出

庫存對象

設(shè)置繪圖坐標(biāo)系

創(chuàng)建和使用自定義畫筆和畫刷

第二十七頁,共四十八頁,編輯于2023年,星期四點

pDC->SetPixel(CPoint(200,200),RGB(255,0,0));//在[200,200]的位置畫一個紅點

第二十八頁,共四十八頁,編輯于2023年,星期四線

pDC->MoveTo(0,0);//在視圖的左上角一個X pDC->LineTo(100,100); pDC->MoveTo(0,100); pDC->LineTo(100,0);第二十九頁,共四十八頁,編輯于2023年,星期四矩形

CRectrect(0,0,100,100); //畫一個長100、寬100的矩形pDC->Rectangle(&rect);第三十頁,共四十八頁,編輯于2023年,星期四圓和橢圓

CRectrect(0,0,100,100);//在矩形內(nèi)畫圓pDC->Ellipse(&rect);CRectrect(0,0,50,100);//在矩形內(nèi)畫橢圓pDC->Ellipse(&rect);第三十一頁,共四十八頁,編輯于2023年,星期四多邊形

CPointpoly[4];//畫一個平行四邊形poly[0]=CPoint(0,0);poly[1]=CPoint(50,50);poly[2]=CPoint(50,100);poly[3]=CPoint(0,50);pDC->Polygon(poly,4);

第三十二頁,共四十八頁,編輯于2023年,星期四其它圖形

CDC::Pie畫餅圖CDC::Chord畫弦CDC::FillRect用指定顏色填充矩形且不畫邊線CDC::Draw3DRect用于繪制名種3D邊框CDC::RoundRect畫圓角矩形

第三十三頁,共四十八頁,編輯于2023年,星期四庫存對象

庫存對象是由操作系統(tǒng)維護的用于繪制屏幕的常用對象包括庫存畫筆,畫刷,字體等使用SelectStockObject可以方便直接選擇庫存對象,修改系統(tǒng)默認值第三十四頁,共四十八頁,編輯于2023年,星期四程序清單5-12voidCExam5View::OnDraw(CDC*pDC){ CExam5Doc*pDoc=GetDocument(); ASSERT_VALID(pDoc); //TODO:adddrawcodefornativedatahereCRectrect; rect.SetRect(CPoint(0,0),CPoint(200,200)); pDC->SelectStockObject(WHITE_PEN);//選用白色畫筆

pDC->SelectStockObject(GRAY_BRUSH);//選用灰色畫刷

pDC->Rectangle(rect);pDC->MoveTo(0,0); pDC->LineTo(200,200); pDC->MoveTo(0,200); pDC->LineTo(200,0);}第三十五頁,共四十八頁,編輯于2023年,星期四設(shè)置繪圖坐標(biāo)系如果要把一幅大小為400mm×800mm的圖畫在500像素×200 像素的windows窗口中,我們把前者稱為邏輯坐標(biāo),后者稱為設(shè)備坐標(biāo)。

邏輯坐標(biāo)設(shè)備坐標(biāo)400mm800mm500像素200像素像素、厘米、毫米、英寸…原點第三十六頁,共四十八頁,編輯于2023年,星期四映像模式

MM_TEXT默認的映像模式,原點在左上角,向右x增加,向下y增加

固定比例的映射模式

向右x增加,向下y減少

可變比例的映射模式

允許改變比例因子和原點。在用戶改變窗口大小時,繪制的內(nèi)容會隨之改變。如果改變一個軸的比例,則所繪的圖像也會在其它軸上相應(yīng)的改變。

第三十七頁,共四十八頁,編輯于2023年,星期四修改映射模式CClientDCdc;intOldMode=dc.SetMapMode(MM_LOMETRIC);第三十八頁,共四十八頁,編輯于2023年,星期四移動邏輯坐標(biāo)系的原點

CRectrect;GetClientRect(rect);pDC->SetViewportOrg(rect.width()/2,rect.height()/2);第三十九頁,共四十八頁,編輯于2023年,星期四使用邏輯坐標(biāo)和設(shè)備坐標(biāo)的場合

MFC的CDC繪圖函數(shù)都使用邏輯坐標(biāo)為參數(shù)CWnd的成員函數(shù)一般使用設(shè)備坐標(biāo)為參數(shù)返回鼠標(biāo)位置作為屏幕位置測試時,一般使用設(shè)備坐標(biāo)第四十頁,共四十八頁,編輯于2023年,星期四設(shè)備坐標(biāo)系統(tǒng)分類工作區(qū)(viewport)坐標(biāo)系統(tǒng)

窗口(Windows)坐標(biāo)系統(tǒng)

屏幕(Screen)坐標(biāo)系統(tǒng)

MFC使用ClientToScreen和ScreenToClient兩個函數(shù),用于完成工作區(qū)坐標(biāo)和屏幕坐標(biāo)之間的轉(zhuǎn)換工作。CDC也提供了成員函數(shù)LPToDP和DPToLP完成兩種坐標(biāo)之間的轉(zhuǎn)換。

溫馨提示

  • 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)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論