win32之GDI_1

這次介紹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函數怎麼使用。

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章