這次介紹win32裏的GDI,GDI是win32裏非常好玩的一些函數,通過這些函數我們可以繪製出各種好看的圖形。包括貼圖。本次我們先介紹一部分GDI,下一次我們繼續介紹GDI
本次使用的開發工具是vs2013,語言C/C++,使用的是win32項目。
一.GDI概念
概念: 圖形設備接口(API),Graphics Device Interface。他是微軟設計的一套API,GDI是windows圖形顯示程序與實際物理設備之間的一個橋樑。使用者不需要關心硬件設備,只管調用API就好
GDI的特點:不直接訪問物理顯示硬件,通過”設備環境”的抽象接口訪問
程序與硬件(顯示器等)交互時,必須獲得與相對應設備環境。
使用者不用關心物理設備類型
設備環境(Device Context):簡稱DC,也叫做設備上下文,設備描敘表。DC就是程序可以進行繪圖的地方:例如我們要在平屏幕繪圖,設備就屏幕吧,而dc就是屏幕上的繪圖層
設備句柄:設備上下文句柄,設備環境句柄,簡稱HDC.如果需要繪圖,首先得得到句柄,繪圖完成之後必須釋放句柄
基本概念:
位圖:位的矩形數據,這些位對應顯示設備上的像素,簡稱BMP(bitmap),可以分爲設備相關位圖(DIB)和設備無關位圖(DIB) ,我們一般使用的是DIB.
文字:GDI支持TrueType字體,這種字體是在填充輪廓線基礎上建立的。實際上就是TTF後綴的字體
顏色: RGB R=0~255,G = 0~255, R = 0~255;紅綠藍,例如RGB(123,234,123)
二. 取得獲取上下文句柄API
第一對好基友:
BeginPaint(窗口句柄, PAINTSTRUCT結構體指針;); 返回設備句柄
EndPaint(窗口句柄, 結構體指針);
第二對好基友:
GetDC(窗口句柄);//返回上下文句柄
ReleaseDC(窗口句柄,設備句柄);
三.圖形繪製
3.1畫筆
HPEN CreatePen(int nPenStyle, int nWidth, COLORREF crColor);
參數1:樣式 PS_SOLID實現實線PS_DASH短線
PS_DOT點 PS_DASHDOT 短線點
第二個參數: 畫筆的寬度
第三個參數: 顏色RGB,直接構建 COLORREF color = RGB(255,255,255)
3.2畫刷
實心畫刷:HBRUSH CreateSolidBrush(顏色)
陰影畫刷: HBRUSH CreateHatchBrush(樣式,顏色)
HS_BDIAGONAL---正斜線, HS_FDIAGONAL----反斜線
HS_DIAGCROSS---正反交叉 HS_CROSS---井字格
位圖畫刷: CreatePatternBrush(位圖句柄)
HBITMAP hBmp = LoadBitmap( g_hInstance,MAKEINTRESOURCE(IDB_BITMAP1) );
HBRUSH hBrush = CreatePatternBrush( hBmp );
3.3設定設備上下文參數
直白點就是把畫筆等應用到DC中
Selectobject(設備上下文句柄,需要選擇的句柄);//畫刷句柄,文字等
deleteSObject(需要刪除的其他句柄); //刪除句柄,釋放內存
3.4畫點
COLORREF SetPixel(設備句柄,x,y,RGB);//返回原來點顏色
GetPixel()獲取某個點的顏色
3.5 畫線
LineTo(設備環境句柄,終點x,終點y) true劃線成功 否則失敗
MoveToEx(設備環境句柄,起點x,起點Y,NULL);
3.6畫圓
BOOL Ellipse(HDC hdc, int nLeftRect, int nTopRect,
nRightRect, int nBottomRect);//參數左頂右底
3.7畫矩形
Rectangle(上下文句柄,左角x,左角y,右下x,右下y);
成功返回非0,讀法:
RoundRect( DC: HDC; X1, Y1, X2, Y2, X3, Y3)’//圓角矩形點1、點2是構成矩形的座標; X3是圓角寬度、Y3是圓角高度3.8畫圖
1 得到dc
2 創建兼容dc
3 加載位圖
LoadImage(實例句柄,位圖名,圖片類型,寬,高,加載方式);
4.選用位圖對象 selectobject()
5.進行貼圖 bitblt()
刷新區域
ValidateRect(窗口句柄,const RECT * L);//更新窗口,第二個參數NULL
3.9文字
文字輸出函數:
TextOut(文字輸出DC句柄,x座標,y座標,字符串指針,字符串個數)
DrawText(設備句柄,字符串,字符串長度,LPRECT繪製區域,繪製模式)
繪製模式如下:
DT_BOTTOM--底部對齊,和DT_SINGLELINE一起使用
DT_LETF DT_RIGHT DT_TOP DT_SINGLELINE 單行顯示
設置文字顏色:COLORREF SetTextColor(設備句柄,顏色)
設置文字背景透明:SetBKMode(設備句柄,模式)
模式:QPAQUE 不透明 TRANSPARENT----透明
創建字體:
BOOL CreateFont( int nHeight邏輯高度,
int nWidth邏輯寬度,
int nEscapement顯示角度, //顯示的坡度
int nOrientation字體角度, //水平上字體的斜角度
int nWeight字體磅數,
BYTE bItalic是否斜體,
BYTE bUnderline是否下劃線,
BYTE cStrikeOut是否刪除線,
BYTE nCharSet所需字符集
BYTE nOutPrecision輸出精度,
BYTEnClipPrecision裁剪精度,
BYTE nQuality輸出質量,
BYTE nPitchAndFamily字符間距的字符集,
LPCTSTR lpszFacename字體名稱 );
BOOL PolyTextOut(HDC hdc, CONST POLYTEXT *pptxt, int cStrings);
功能:在指定設備環境下以當前所選的字體和正文顏色繪製多個字符串。
CreateFontIndirect 可以用來設置字體屬性等
下一篇博客,通過畫出具體的圖形來介紹這些GDI函數怎麼使用。