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函数怎么使用。

 

 

 

 

猜你喜欢

转载自blog.csdn.net/ASZSYJ/article/details/82112727