GDIGDI+從入門到精通-第二講_第1頁
GDIGDI+從入門到精通-第二講_第2頁
GDIGDI+從入門到精通-第二講_第3頁
GDIGDI+從入門到精通-第二講_第4頁
GDIGDI+從入門到精通-第二講_第5頁
已閱讀5頁,還剩60頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、第二講:統(tǒng)計報表的背景、文字與圖形的繪制主講人:闕海忠 UIPower CEO2LoadBitmap圖片的加載HBITMAP WINAPI LoadBitmapW(HINSTANCE hInstance,LPCWSTR lpBitmapName);函數(shù)的作用是從應(yīng)用程序工程資源中讀取位圖數(shù)據(jù)。第一個參數(shù)HINSTANCE,它是資源文件所在的模塊的實例句柄第二個參數(shù)BitmapName是位圖在資源中的ID名稱。3LoadImage圖片的加載LoadImage這個函數(shù)可以加載位圖、圖標(biāo)、光標(biāo)多種圖像數(shù)據(jù)。從資源加載hbmpBack = (HBITMAP) :LoadImage (hInst,MAK

2、EINTRESOURCE (IDB_BACK),IMAGE_BITMAP, 0, 0, LR_CREATEDIBSECTION | LR_LOADMAP3DCOLORS);4LoadImage圖片的加載從文件路徑加載hbmpBack = (HBITMAP) :LoadImage (NULL,_T(.1.bmp),IMAGE_BITMAP,0, 0,LR_LOADFROMFILE|LR_DEFAULTSIZE|LR_CREATEDIBSECTION);5位圖的銷毀位圖的銷毀是調(diào)用DeleteObject函數(shù)。:DeleteObject(hbmpBack);6BitBlt繪制位圖BOOL WINA

3、PI BitBlt (HDC hdc, /目標(biāo)DC的句柄 int x, int y, int cx, int cy, /目標(biāo)區(qū)域HDC hdcSrc, /源DC的句柄int x1,int y1, /源區(qū)域的左上角 DWORD rop /操作標(biāo)志,一般是SRCCOPY,是拷貝的意思。); 7總結(jié)一下繪制位圖的步驟獲得目標(biāo)DC句柄創(chuàng)建與目標(biāo)DC兼容的臨時內(nèi)存DC將位圖句柄選入到臨時內(nèi)存DC中使用BitBlt函數(shù)將臨時內(nèi)存DC中的位圖拷貝到目標(biāo)DC上來將位圖句柄選出臨時內(nèi)存DC銷毀臨時的內(nèi)存DC8獲得客戶區(qū)的大小BOOL WINAPI GetClientRect(HWND hWnd,LPRECT l

4、pRect);第一個參數(shù)傳入窗口的句柄。第二個參數(shù)傳入接收返回值Rect的指針。9StretchBlt拉伸函數(shù)BOOL WINAPI StretchBlt(HDC hdcDest, /目標(biāo)DC的句柄int xDest, int yDest, int wDest, int hDest, /目標(biāo)DC的區(qū)域HDC hdcSrc, /源DC的句柄int xSrc, int ySrc, int wSrc, _in int hSrc,/源DC的區(qū)域DWORD rop /操作標(biāo)志,一般為SRCCOPY,意思為拷貝); 10DrawText繪制文字int WINAPI DrawText(HDC hdc,/DC

5、的句柄LPCWSTR lpchText,/要繪制的文本int cchText,/要繪制的文本的長度LPRECT lprc,/繪制的目標(biāo)區(qū)域UINT format/繪制標(biāo)志, DT_SINGLELINE等);11CreateFontIndirect創(chuàng)建字體HFONT WINAPI CreateFontIndirectA( _in CONST LOGFONTA *lplf);HFONT WINAPI CreateFontIndirectW( _in CONST LOGFONTW *lplf);根據(jù)字體結(jié)構(gòu)體創(chuàng)建字體。12CreateFontIndirect創(chuàng)建字體#ifdef UNICODE#de

6、fine CreateFontIndirect CreateFontIndirectW#else#define CreateFontIndirect CreateFontIndirectA#endif / !UNICODE13CreateFontIndirect創(chuàng)建字體#ifdef UNICODEtypedef LOGFONTW LOGFONT;#elsetypedef LOGFONTA LOGFONT;#endif / UNICODEHFONT WINAPI CreateFontIndirect( _in CONST LOGFONT *lplf);14LOGFONTA字體結(jié)構(gòu)體typedef

7、 struct tagLOGFONTA LONG lfHeight; /指定需要的字體的高度 LONG lfWidth;/指定需要的字體的寬度 LONG lfEscapement; /指定需要的字體中,每個字符串的底線相對于水平線的角度 LONG lfOrientation; /指定每個字符的基線相對于頁底部的角度 LONG lfWeight; /在01000(如400為正常字體,700為黑體)的范圍內(nèi),指定字體所需的深淺程度。0為默認(rèn)值 15LOGFONTA字體結(jié)構(gòu)體 BYTE lfItalic; /如果要求的字體是傾斜的,則此參數(shù)為TRUE BYTE lfUnderline; /如果要求的

8、字體要加下劃線,則此參數(shù)為TRUE BYTE lfStrikeOut;/如果字體要加中劃線,則此參數(shù)TRUE BYTE lfCharSet;/指定字體所要求的字符集 BYTE lfOutPrecision; /指定所要求的輸出精度。輸出精度定義了輸出字體必須如何緊密匹配所要求的字體的高度、寬度、字符轉(zhuǎn)角、傾斜度和間距 16LOGFONTA字體結(jié)構(gòu)體 BYTE lfClipPrecision; /指定所需要的剪貼精度。剪貼精度定義了如何對落在剪貼區(qū)域外部的字符進(jìn)行剪貼 BYTE lfQuality;/指定字體所要求的輸出質(zhì)量 BYTE lfPitchAndFamily;/指定字體的間距和字體系列

9、 CHAR lfFaceNameLF_FACESIZE; /指向一個NULL為終止符的字符串。該串指定字體的名字 LOGFONTA, *PLOGFONTA;17文字顏色GDI的文字顏色相關(guān)的函數(shù)有2個:一個是GetTextColor用來獲得當(dāng)前DC的文本顏色;另外一個是SetTextColor用來設(shè)置當(dāng)前DC的文本顏色。COLORREF WINAPI SetTextColor(HDC hdc, COLORREF color);18背景模式通過SetBKMode設(shè)置DC的背景模式,相對應(yīng)的GetBKMode是用來獲取背景模式的。int SetBkMode(HDC hdc, int mode);參

10、數(shù)mode可以有TRANSPARENT值(透明)與OPAQUE值(不透明,默認(rèn)值)。返回值是hdc在設(shè)置之前的背景模式。19背景模式int GetBkMode(HDC hdc);返回值是hdc目前的背景模式。2021庫存字體庫存字體,可以通過GetStockObject函數(shù)獲取。GetStockObject(SYSTEM_FONT)獲取默認(rèn)的系統(tǒng)字體的句柄。在缺省情況下,系統(tǒng)使用該字體繪制菜單,文本。除SYSTEM_FONT外還可以設(shè)置如下參數(shù)。OEM_FIXED_FONT:原始設(shè)備制造商(OEM)相關(guān)固定間距(等寬)的字體。ANSI_FIXED_FONT:在Windows中為固定間距(等寬)

11、的系統(tǒng)字體。22庫存字體ANSI_VAR_FONT:在Windows中為變間距的系統(tǒng)字體。DEVICE_DEFAULT_FONT:在WindowsNT中為設(shè)備相關(guān)字體。SYSTEM_FIXED_FONT:固定間距(等寬)的系統(tǒng)字體,該字體僅提供給兼容16位的Windows版本。23TextOut繪制文字TextOut(HDC hdc, int nXStart, int nYStart, LPCTSTR lpString, int cbString)參數(shù)hdc就是要繪制文字的DC。參數(shù)nXStart就是文字要繪制的起點位置的X坐標(biāo)。參數(shù)nYStart就是文字要繪制的起點位置的Y坐標(biāo)。參數(shù)lpSt

12、ring就是要繪制的文字的字符串指針。參數(shù)cbString就是要繪制的文字的字符個數(shù)。24DrawText函數(shù)與TextOut函數(shù)的區(qū)別相比兩種繪制方式,發(fā)現(xiàn)DrawText是采用繪制區(qū)域跟繪制格式來控制繪制的位置,而TextOut是直接采用起始位置來控制繪制的位置,所以在自定義位置繪制時TextOut更靈活一些,而以布局式繪制時,DrawText更適合一些。此外DrawText還可以計算所繪制字符串的面積大小,還可以以省略號代替超出區(qū)域的文本。25DrawText函數(shù)與TextOut函數(shù)的區(qū)別DrawText(HDC hDC, LPCTSTR lpString, int nCount, LP

13、RECT lpRect, UINT uFormat);lpString:要繪制的字符串。nCount:要繪制的字符個數(shù),-1代表繪制以NULL結(jié)尾的字符串。lpRect:要繪制的區(qū)域。uFormat:要繪制的格式??梢允窍铝兄档慕M合。 DT_BOTTOM,文本底對齊。DT_CENTER,文本水平居中顯示。26DrawText函數(shù)與TextOut函數(shù)的區(qū)別DT_LEFT,文本左對齊。DT_VEENTER,文本垂直居中顯示。DT_RIGHT,文本右對齊。DT_SINGLELINE,只指定單個行?;剀嚭蛽Q行,均不打斷原有行。DT_TOP,文本頂對齊。DT_WORDBREAK,指定單詞間的中斷。如果字

14、符串中的一個單詞超出lpRect指向的矩形的右邊界時,則函數(shù)將在單詞之間自動切斷正文行。27DrawText函數(shù)與TextOut函數(shù)的區(qū)別DT_CALCRECT,確定矩形的寬度和高度,如果有多個正文行,DrawText則將使用由lpRect參數(shù)指定的矩形寬度,并且延伸矩形底部,直到能框住正文行的最后一行。如果只有一行正文,DrawText將修正此矩形的右邊,以便能框住此行正文的最后一個字符。帶入此參數(shù)后,DrawText不繪制字符串。DT_END_ELLIPSIS,如果字符串的長度超過矩形的范圍,它會被截斷并以省略號標(biāo)識。28SetPixel設(shè)置指定點的顏色COLORREF SetPixel(

15、HDC hDC, int X, int Y, COLORREF crColor);參數(shù)hDC就是所要繪制的點的DC。參數(shù)X就是所要繪制的點的坐標(biāo)X。參數(shù)Y就是所要繪制的點的坐標(biāo)Y。參數(shù)crColor就是所要設(shè)置的顏色。返回值就是設(shè)置顏色之前,點(X,Y)的顏色。比如設(shè)置點(100,200)的顏色為紅色,代碼如下:SetPixel(hdc, 100, 200, RGB(255,0,0);29GetPixel獲取指定點的顏色COLORREF GetPixel(HDC hDC, int X, int Y);參數(shù)hDC就是所要獲取的點的顏色的DC。參數(shù)X就是所要獲取的點的坐標(biāo)X。參數(shù)Y就是所要獲取的點

16、的坐標(biāo)Y。返回值就是點(X,Y)的顏色。30MoveToEx設(shè)置線的繪制起點MoveToEx(HDC hDC, int X, int Y, LPPOINT lpPoint);參數(shù)hDC就是所要設(shè)置起點位置的DC。參數(shù)X就是所要設(shè)置起點位置的X坐標(biāo)。參數(shù)Y就是所要設(shè)置起點位置的Y坐標(biāo)。參數(shù)lpPoint就是返回舊的起點坐標(biāo),參數(shù)為NULL時,表示不返回舊的起點坐標(biāo)。31LineTo畫線LineTo(HDC hDC, int X, int Y);參數(shù)hDC就是所要繪制的直線的DC。參數(shù)X就是所要繪制的直線的終點坐標(biāo)X。參數(shù)Y就是所要繪制的直線的終點坐標(biāo)Y。比如要繪制一條從(100,200)到(30

17、0,400)的直線,代碼如下:MoveToEx(hdc, 100, 200, NULL);LineTo(hdc, 300, 400);32Rectangle繪制矩形Rectangle(HDC hdc, int left, int top, int right, int bottom);參數(shù)hdc為要繪制的矩形的DC。參數(shù)left為要繪制的矩形的左邊界的位置。參數(shù)top為要繪制的矩形的上邊界的位置。參數(shù)right為要繪制的矩形的右邊界的位置。參數(shù)bottom為要繪制的矩形的底邊界的位置。33Rectangle繪制矩形比如要繪制一個左上角坐標(biāo)為(100,200),寬度高度分別為300,400的矩形

18、邊框,代碼如下:SelectObject(hdc, GetStockObject(NULL_BRUSH);Rectangle(hdc, 100, 200, 100+300, 200+400);34Ellipse繪制圓Ellipse(HDC hdc, int left,int top, int right, int bottom); 參數(shù)hdc為要繪制的圓的DC。參數(shù)left為圓的外切矩形的左邊界的位置。參數(shù)top為圓的外切矩形的頂邊界的位置。參數(shù)right為圓的外切矩形的右邊界的位置。參數(shù)bottom為圓的外切矩形的底邊界的位置。35Ellipse繪制圓比如要繪制一個外切矩形為RECT(100

19、,100,300,300)的圓的邊框,代碼如下:SelectObject(hdc, GetStockObject(NULL_BRUSH);Ellipse(hdc, 100, 100, 300, 300);36Pie繪制餅Pie(HDC hdc, int left, int top,int right, int bottom, int xr1, int yr1, int xr2,int yr2);參數(shù)hdc為要繪制的餅的DC。參數(shù)left為指定限定矩形左上角的X坐標(biāo)。參數(shù)top為指定限定矩形左上角的Y坐標(biāo)。參數(shù)right為指定限定矩形右下角的X坐標(biāo)。參數(shù)bottom為指定限定矩形右下角的Y坐標(biāo)。

20、37Pie繪制餅參數(shù)xr1為餅圖起點的徑線端點的X坐標(biāo)。 參數(shù)yr1為餅圖起點的徑線端點的Y坐標(biāo)。參數(shù)xr2為餅圖終點的徑線端點的X坐標(biāo)。參數(shù)yr2為餅圖終點的徑線端點的Y坐標(biāo)。38Pie繪制餅比如要繪制一個限定矩形為RECT(470,440,690,690),起點的徑線端點為(692,550),終點的徑線端點為(582,441)的餅的邊框,代碼如下:SelectObject(hdc, GetStockObject(NULL_BRUSH);Pie(hdc, 470, 440, 690, 690, 692, 550, 582, 441);39庫存畫筆的選用SelectObject(hdc, Ge

21、tStockObject(WHITE_PEN);獲取并選進(jìn)寬度為1,顏色為白色,樣式為實線的畫筆。SelectObject(hdc, GetStockObject(BLACK_PEN);獲取并選進(jìn)寬度為1,顏色為黑色,樣式為實線的畫筆。SelectObject(hdc, GetStockObject(NULL_PEN);獲取并選進(jìn)空的畫筆。40CreatePen創(chuàng)建畫筆HPEN CreatePen(int fnPenStyle, int nWidth, COLORREF crColor);參數(shù)fnPenStyle為畫筆的樣式,它可以是下列任何值之一:PS_SOLID,實心筆。PS_DASH,短

22、線式筆,要求筆=1。PS_DOT,點式筆,要求筆=1。PS_DASHDOT,虛線筆,要求筆=1。PS_DASHDOTDOT,雙虛線筆,要求筆=1。41CreatePen創(chuàng)建畫筆PS_NULL,筆不可見。PS_INSIDEFRAME,實心筆,但筆寬是向里擴(kuò)展。參數(shù)nWidth為畫筆的寬度。參數(shù)crColor為畫筆的顏色。42各種樣式的畫筆的繪畫效果43各種樣式的畫筆的繪畫效果44各種樣式的畫筆的繪畫效果45各種樣式的畫筆的繪畫效果46各種樣式的畫筆的繪畫效果47各種樣式的畫筆的繪畫效果48各種樣式的畫筆的繪畫效果49PS_SOLID與PS_INSIDEFRAME的區(qū)別當(dāng)寬度一樣時,兩者沒有區(qū)別。

23、如下圖三。PS_SOLID的寬度大于1時,就往線的兩邊擴(kuò)張。如圖一。PS_INSIDEFRAME的寬度大于1時,就往線的里邊擴(kuò)張,如圖二。50創(chuàng)建、使用跟銷毀自定義畫筆/創(chuàng)建自定義畫筆HPEN hPen = CreatePen(PS_SOLID, 1, RGB(42,187,203);/使用自定義畫筆HPEN hPenOld = (HPEN)SelectObject(hdc, hPen);MoveToEx(hdc, 78, 315, NULL);LineTo(hdc, 150, 170);/銷毀自定義畫筆SelectObject(hdc, hPenOld);DeleteObject(hPen)

24、;51庫存畫刷SelectObject(hdc, GetStockObject(WHITE_BRUSH);獲取并選進(jìn)白色畫刷SelectObject(hdc, GetStockObject(LTGRAY_BRUSH);獲取并選進(jìn)亮灰色畫刷SelectObject(hdc, GetStockObject(GRAY_BRUSH);獲取并選進(jìn)灰色畫刷SelectObject(hdc, GetStockObject(DKGRAY_BRUSH);獲取并選進(jìn)暗灰色畫刷SelectObject(hdc, GetStockObject(BLACK_BRUSH);獲取并選進(jìn)黑色畫刷SelectObject(hdc, GetStockObject(NULL_BRUSH);獲取并選進(jìn)空畫刷52填充圖形Rectangle函數(shù)用DC所選進(jìn)的畫刷來填充矩形的內(nèi)部。Ellipse函數(shù)用DC所選進(jìn)的畫刷來填充圓的內(nèi)部。Pie函數(shù)用DC所選進(jìn)的畫刷來填充餅的內(nèi)部。53CreateSolidBrush創(chuàng)建畫刷創(chuàng)建單色畫刷HBRUSH C

溫馨提示

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

最新文檔

評論

0/150

提交評論