版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
MFC程序設(shè)計(jì)窗口繪圖作者:李季主要內(nèi)容DC相關(guān)概念和知識(shí)畫直線和曲線畫封閉圖形畫筆和CPen類畫刷和CBrush類畫文本字體和CFont類刪除GDI對(duì)象取消對(duì)GDI對(duì)象的選定概述GDI利用DC(設(shè)備上下文、設(shè)備描述表、設(shè)備內(nèi)容、設(shè)備環(huán)境)將各程序的輸出限制在自己的窗口中DC(DeviceContext)Windows程序在屏幕、打印機(jī)或其他輸出設(shè)備上畫圖時(shí),它并不是將像素直接輸出到設(shè)備上.而是將圖繪制到由DC表示的邏輯意義上的“顯示乎面”上去。設(shè)備描述表是一種數(shù)據(jù)結(jié)構(gòu),它包含GDI需要的所有關(guān)于顯示平面情況的描述字段,包括相連的物理設(shè)備和各種各樣的狀態(tài)信息。設(shè)備描述表除了可作為通往各種輸出設(shè)備的橋梁之外,還封裝了程序用來產(chǎn)生輸出的GDI函數(shù)。專門用途的設(shè)備描述表類類名描述CPaintDC用于在窗口用戶區(qū)畫圖(僅限于OnPoint處理程序)CClientDC用于在窗口用戶區(qū)畫圖(除OnPaint外的任何處理程序)CWindowDC用于在窗口內(nèi)任意地方畫圖,包括非客戶區(qū)CMetaFileDC用于向GDI元文件畫圖CPaintDCCPaintDCdc(this);//DosomedrawingCPaintDC*pDC=newCPaintDC(this);//DosomedrawingdeletepDC;響應(yīng)WM_PAINT消息坐標(biāo)系設(shè)備坐標(biāo)系:Windows的各種不同類型的設(shè)備所使用的坐標(biāo)系,屬于笛卡爾坐標(biāo)系。單位為像素又稱設(shè)備單位。X、Y軸正方向分別是右、下。邏輯坐標(biāo)系:現(xiàn)實(shí)世界所使用的坐標(biāo)系,屬于笛卡爾坐標(biāo)系。單位為公制、英制或自制單位,如毫米、英寸等,又稱邏輯單位。X軸正方向是右,Y軸正方向不定,是映射模式而定。注:當(dāng)映射模式起作用時(shí),使用的是邏輯單位。窗口與視口窗口:原始圖形區(qū)域,從現(xiàn)實(shí)世界角度所看到的圖形,采用邏輯坐標(biāo)描述。視口:計(jì)算機(jī)屏幕上一塊顯示區(qū)域,從數(shù)據(jù)世界角度而言,采用設(shè)備坐標(biāo)描述。窗口與視口不同對(duì)象顯示范圍抽象設(shè)備坐標(biāo)原點(diǎn)設(shè)備坐標(biāo)系對(duì)象句柄用戶區(qū)對(duì)象用戶區(qū)左上角用戶區(qū)坐標(biāo)系GetDC()或BeginPaint()全窗口對(duì)象窗口左上角全窗口坐標(biāo)系GetWindowsDC()屏幕對(duì)象屏幕左上角屏幕坐標(biāo)系HDChDC=CreateDC("DISPLAY",NULL,NULL,NULL);屏幕對(duì)象CClientDCdc(NULL);或CWindowDCdc(NULL);主要設(shè)備描述表屬性AttributeDefaultSetwithGetwith文本顏色BlackSetTextColorGetTextColor背景顏色WhiteSetBKColorGetBKColor背景模式OPAQUESetBKModeGetBKMode映射模式MM_TEXTSetMapModeGetMapMode繪圖模式R2_COPYENSetROP2GetROP2當(dāng)前位置(0,0)MoveToGetCurrentPosition當(dāng)前畫筆BLACK_PENSelectObjectSelectObject當(dāng)前畫刷CDC::SelectObjectSelectObjectSelectObject當(dāng)前字體CDC::SelectObjectSelectObjectSelectObjectGDI對(duì)象畫筆Pen——CPen畫刷Brush——CBrush字體Font——CFont位圖Bitmap——CBitmap調(diào)色板Palette——CPalette區(qū)域Region——CRgn繪圖模式調(diào)用CDC::SetROP2(setrasteroperationto縮寫形式)設(shè)置繪圖模式調(diào)用CDC::GetROP2得到當(dāng)前繪圖模式繪圖模式繪圖模式執(zhí)行的運(yùn)算繪圖模式執(zhí)行的運(yùn)算R2_NOPdest=destR2_MERGENOTPENdest=(NOTsrc)ORdestR2_NOTdest=NOTdestR2_MASKNOTPENdest=(NOTsrc)ANDdestR2_BLACKdest=BLACKR2_MERGEPENdest=destORsrcR2_WHITEdest=WHITKR2_NOTMERGEPENdest=NOT(destORsrc)R2_COPYPENdest=srcR2_MASKPENdest=destANDsrcR2_NOTCOPYPENdest=NOTsrcR2_NOTMASKPENdest=NOT(destANDsrc)R2_MERGEPENNOTdest=(NOTdest)ORsrcR2_XORPENdest=srcXORdestR2_MASKPENNOTdest=(NOTdest)ANDsrcR2_NOTXORPENdest=NOT(srcXORdest)注:dest:目的—屏幕;src:源—筆映射模式設(shè)備描述表的屬性確定從邏輯坐標(biāo)值到設(shè)備坐標(biāo)值的轉(zhuǎn)換方式邏輯坐標(biāo)值:傳送給CDC輸出函數(shù)的設(shè)備坐標(biāo)值:窗口中相應(yīng)的像素點(diǎn)位置映射模式映射模式一個(gè)邏輯單位對(duì)應(yīng)的距離X和Y軸的方向MM_TEXT1像素右、下MM_LOMETRIC0.1毫米右、上MM_HIMETRIC0.01毫米右、上MM_LOENGLISH0.01英寸右、上MM_HIENGLISH0.001英寸右、上MM_TWIPS1/1440英寸右、上MM_ISOTROPIC用戶自定義(x和y同等縮放)用戶自定義MM_ANISOTROPIC用戶自定義(x和y獨(dú)立縮放)用戶自定義映射模式GDI中一個(gè)點(diǎn)的大小為1/72英寸Twip表示”一個(gè)點(diǎn)的二十分之一”缺省時(shí),映射方式為MM_TEXT,即邏輯單位等于物理單位映射模式左上角原點(diǎn)位置保持不變,即設(shè)備坐標(biāo)和邏輯坐標(biāo)缺省原點(diǎn)都為(0,0)。SetMapMode()設(shè)置映射模式例如:dc.SetMapMode(MM_LOMETRIC);GetMapMode()獲得當(dāng)前映射模式設(shè)置范圍SetWindowExt()設(shè)置窗口范圍(邏輯坐標(biāo)系),以邏輯單位計(jì)算。SetViewportExt()設(shè)置視口范圍(設(shè)備坐標(biāo)系),以設(shè)備單位或像素點(diǎn)計(jì)算。自定義模式MM_ISOTROPIC模式下先調(diào)用SetWindowExt()MM_ANISOTROPIC不分次序坐標(biāo)轉(zhuǎn)換CDC::LPtoDP將邏輯坐標(biāo)值轉(zhuǎn)換為設(shè)備坐標(biāo)值xViewport=(xWindow-xWinOrg)*xViewExt/xWinExt+xViewOrgyViewport=(yWindow-yWinOrg)*yViewExt/yWinExt+yViewOrgCDC::DPtoLP將設(shè)備坐標(biāo)值轉(zhuǎn)換為邏輯坐標(biāo)值xWindow=(xViewport-xViewOrg)*xWinExt/xViewExt+xWinOrgyWindow=(yViewport-yViewOrg)*yWinExt/xViewExt+yWinOrg移動(dòng)原點(diǎn)SetWindowOrg()設(shè)置窗口的原點(diǎn)(即邏輯坐標(biāo)系原點(diǎn))SetViewportOrg()設(shè)置視口的原點(diǎn)(即設(shè)備坐標(biāo)系原點(diǎn))移動(dòng)原點(diǎn)將原點(diǎn)移到窗口中心點(diǎn)辦法一:CRectrect;
GetClientRect(&rect);
dc.SetViewporOrg(rect.Width/2,rect.Height()/2);移動(dòng)原點(diǎn)將原點(diǎn)移到窗口中心點(diǎn)辦法二:CRectrect; GetClientRect(&rect); CPointpoint(rect.Width()/2,rect.Height()/2); dc.SetMapMode(MM_LOENGLISH); dc.DPtoLP(&point); SetWindowOrg(-point.x,-point.y);畫直線和曲線函數(shù)說明MoveTo在畫線前設(shè)定當(dāng)前位置LineTo從當(dāng)前位置畫一條線到指定位置,并將當(dāng)前位置移至線的終點(diǎn)Polyline將一系列點(diǎn)用線段連接起來PolylineTo從當(dāng)前位置開始將一系列點(diǎn)用線段連接起來,并將當(dāng)前位置移至折線的終點(diǎn)Arc畫一個(gè)弧ArcTo畫一個(gè)弧并將當(dāng)前位置移至弧的終點(diǎn)PolyBezier畫一條或多條貝塞爾樣條曲線PolyBezierTo畫一條或多條貝塞爾樣條曲線,并將當(dāng)前位置移至最后一段樣條曲線的終點(diǎn)PolyDraw通過一組點(diǎn)畫一系列線段和貝賽爾樣條曲線,并將當(dāng)前位置移至最后一個(gè)線段或樣條曲線的終點(diǎn)畫封閉圖形函數(shù)說明Ellipse畫一個(gè)圓或橢圓Chord畫一個(gè)弧并連接兩個(gè)端點(diǎn)Pie畫一個(gè)弧并將兩個(gè)端點(diǎn)與橢圓中心連接Polygon連接一組點(diǎn)形成一個(gè)多邊形Rectangle畫一個(gè)帶直角的矩形RoundRect畫一個(gè)帶圓角的矩形畫筆和CPen類利用畫筆繪畫的方法:第一步:創(chuàng)建畫筆第二步:利用CDC::SelecteObject將其選入設(shè)備上下文中畫筆的創(chuàng)建CPenpen(PS_SOLID,1,RGB(255,0,0));CPenpen; pen.CreatePen(PS_SOLID,1,RGB(255,0,0));CPenpen; LOGPENlp; lp.lopnStyle=PS_SOLID; lp.lopnWidth.x=1; lp.lopnColor=RGB(255,0,0); pen.CreatePenIndirect(&lp);
畫筆屬性——樣式標(biāo)識(shí)符樣式PS_SOLIDPS_DASHPS_DOTPS_DASHDOTPS_DASHDOTDOTPS_NULLPS_INSIDEFRAME畫筆屬性——樣式用20單位寬的PS_SOLID畫筆畫圖用20單位寬的PS_INSIDEFRAME畫筆畫圖畫筆屬性——筆寬筆寬度以邏輯單位給出PS_SOLID、PS_NULL、PS_INSIDEFRAMW筆可任意邏輯寬度PS_DASH、PS_DOT、PS_DASHDOT、PS_DASHDOTDOT筆只能1個(gè)邏輯單位寬筆寬置為0,會(huì)產(chǎn)生筆寬為1個(gè)像素點(diǎn)的筆畫筆屬性——顏色顏色RGB顏色RGB黑000淺灰192192192藍(lán)00192亮藍(lán)00255綠01920亮綠02550青0192192亮青0255255紅19200亮紅25500品紅1920192亮品紅2550255黃1921920亮黃2552550深灰128128128白255255255畫刷和CBrush類利用畫刷繪畫的方法:第一步:創(chuàng)建畫刷第二步:利用CDC::SelecteObject將其選入設(shè)備上下文中畫刷的創(chuàng)建CBrushbrush(RGB(255,0,0));CBrushbrush; brush.CreateSolidBrush(RGB(255,0,0));CBrushbrush; LOGBRUSHlp; lp.lbStyle=BS_SOLID; lp.lbColor=RGB(255,0,0); brush.CreateBrushIndirect(&lp);畫刷類型單色型畫刷CreateSolidBrush()陰影線型畫刷CreateHatchBrush()圖案型畫刷CreatePatternBrush()CreateDIBPatternBrush()陰影型畫刷類型樣式類型樣式HS_BDIAGONALHS_FDIAGONALHS_CROSSHS_DIAGCROSSHS_HORIZONTALHS_VERTICAL畫文本函數(shù)說明DrawText在格式化矩形中顯示文本TextOut在當(dāng)前或指定位置輸出一行文本TabbledTextOut輸出一行含有制表符的文本ExtTextOut輸出一行文本,并有選擇地給矩形填充背景色或改變字符間距GetTextExtent計(jì)算當(dāng)前字體下一個(gè)字符串的寬度GetTabbedTextExtent計(jì)算當(dāng)前字體下含有制表符字符串的寬度GetTextMetrics返回當(dāng)前字體的字體度量(字符高度\字符平均寬度等)SetTextAlign給TextOut和其他輸出函數(shù)設(shè)定對(duì)齊參數(shù)SetTextJustification確定對(duì)齊一串文本時(shí)需要增加的寬度SetTextColor設(shè)定設(shè)備描述表的文本輸出顏色SetBkColor設(shè)定設(shè)備描述表的背景色,即確定輸出字符背后的填充色字體和CFont類利用字體繪畫的方法:第一步:創(chuàng)建字體第二步:利用CDC::SelecteObject將其選入設(shè)備上下文中字體的創(chuàng)建CFontfont; font.CreatePointFont(120,_T(“TimesNewRoman”));CFontfont; font.CreateFont(0,0,0,0,FW_NORMAL,0,0,0,DEFAULT_CHARSET,OUT_CHARACTER_PRECIS,CLIP_CHARACTER_PRECIS,DEFAULT_QUALITY,DEFAULT_PITCH|FF_DONTCARE,_T(“TimesNewRoman”));CFontfont; LOGFONTlf; ::ZeroMemory(&lf,sizeof(lf)); lf.lfHeight=120; lf.lfWeight=FW_BOLD; lf.lfIta
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024物業(yè)資產(chǎn)讓與擔(dān)保合同 資產(chǎn)方與受讓方協(xié)議
- 二零二四年免租金科研機(jī)構(gòu)租賃合同規(guī)范文本3篇
- 2025年管道檢測(cè)與修復(fù)水管安裝合同樣本3篇
- 2025年酒店布草租賃與智能化管理服務(wù)合同2篇
- 二零二五年度草料種植基地土壤治理合同3篇
- 二零二五年度租賃房屋租賃保證金監(jiān)管服務(wù)合同范本3篇
- 2025年校園體育設(shè)施平整施工合同6篇
- 二零二五年度數(shù)據(jù)中心場(chǎng)地租賃合同及數(shù)據(jù)安全保障與服務(wù)標(biāo)準(zhǔn)3篇
- 二零二五惠州法務(wù)專員招聘與法律知識(shí)普及培訓(xùn)合同3篇
- 2024金融機(jī)構(gòu)貸款擔(dān)保合同
- 《水下拋石基床振動(dòng)夯實(shí)及整平施工規(guī)程》
- 化學(xué)-廣東省廣州市2024-2025學(xué)年高一上學(xué)期期末檢測(cè)卷(一)試題和答案
- 2025四川中煙招聘高頻重點(diǎn)提升(共500題)附帶答案詳解
- 2025年云南大理州工業(yè)投資(集團(tuán))限公司招聘31人管理單位筆試遴選500模擬題附帶答案詳解
- 風(fēng)電危險(xiǎn)源辨識(shí)及控制措施
- 《教師職業(yè)道德與政策法規(guī)》課程教學(xué)大綱
- EHS工程師招聘筆試題與參考答案(某大型央企)2024年
- 營(yíng)銷策劃 -麗亭酒店品牌年度傳播規(guī)劃方案
- 兒童傳染病預(yù)防課件
- 護(hù)理組長(zhǎng)年底述職報(bào)告
- 集裝箱活動(dòng)房供需合同
評(píng)論
0/150
提交評(píng)論