GDI学习1

这篇文章中主要对CDC 和HDC做了说明,以及CDC和HDC直接的相互转换,http://www.cnblogs.com/cwbo-win/articles/3393891.html
GDI的介绍:GDI是图形设备接口,Windows图形编程就是针对Windows自带的图形设备接口函数库和设备环境(DC)进行操作。通过调用这些函数库中的函数来完成绘制工作。
GDI中常用对象:画笔、画刷、字体
画笔Pen:
在GDI中,用HPEN来表示画笔。H是代表句柄的意思。
在GDI中,画线,画边框(如矩形边框,圆边框,饼边框)都是采用画笔来操作的。
GDI默认的画笔是黑色,宽度为1,样式为实线的画笔。
默认画笔:
#define WHITE_PEN 6 //白色画笔
#define BLACK_PEN 7 //黑色画笔
#define NULL_PEN 8 //空画笔

画刷Brush:
在GDI中,用HBRUSH来表示画刷。H是代表句柄的意思。
在GDI中,填充矩形,填充圆,填充饼等以及刷窗口背景都是通过画刷来操作的。
GDI默认的画刷是白色的画刷。
默认画刷有
#define WHITE_BRUSH 0 // 白色画刷
#define LTGRAY_BRUSH 1 //亮灰色画刷
#define GRAY_BRUSH 2 //灰色画刷
#define DKGRAY_BRUSH 3 //暗灰色画刷
#define BLACK_BRUSH 4 //黑色画刷
#define NULL_BRUSH 5 //空画刷
#define HOLLOW_BRUSH NULL_BRUSH
字体Font:
在GDI中,用HFONT来表示字体。H是代表句柄的意思。
在GDI中,所有的文本绘制,都是要基于具体的字体对象来绘制的。
GDI中默认的字体,是系统等宽字体,比如对话框标题一般就采用这个字体。
区域Region:
在GDI中,用HRGN来表示区域。H是代表句柄的意思。
在窗口中,一个区域可以是椭圆形,多边形,或是更常见的矩形。
位图Bitmap:
在GDI中,用HBITMAP来表示位图。H是代表句柄的意思。
GDI的绘制,从大体上,分为图形绘制跟图像绘制。对于线,矩形,圆,饼等的绘制是属于图形绘制。而对位图的绘制是属于图像绘制。
颜色:
RGB格式中,R(0~255)红色分量,G(0~255)绿色分量,B(0~255)蓝色分量。没有透明度信息。通常RGB三个分量各占一个字节,所以RGB实际占用的是三个字节。
ARGB格式中,A(0~255)代表Alpha,代表透明度信息。后面的RGB就是红,绿,蓝分量。通常ARGB四个分量各点一个字节,所以ARGB实际占用的是四个字节
附:常用颜色RGB值链接:http://www.cnblogs.com/wuhen/articles/1396460.html

图片的加载LoadImage:

资源加载
    hbmpBack = (HBITMAP) ::LoadImage (hInst,MAKEINTRESOURCE (IDB_BACK),IMAGE_BITMAP, 0,  0, LR_CREATEDIBSECTION | LR_LOADMAP3DCOLORS);
文件路径加载
    hbmpBack = (HBITMAP) ::LoadImage (NULL,_T(".\\1.bmp"),IMAGE_BITMAP,0, 0,LR_LOADFROMFILE|LR_DEFAULTSIZE|LR_CREATEDIBSECTION);
位图的销毁。
    ::DeleteObject(hbmpBack);

画线:

    MoveToEx(HDC hDC, int X, int Y, LPPOINT lpPoint);
    LineTo(HDC hDC, int X, int Y);

Ellipse绘制圆:

    SelectObject(hdc, GetStockObject(NULL_BRUSH)); //选择画刷
    SelectObject(hdc, GetStockObject(WHITE_PEN));//选择画笔
    Ellipse(hdc, 100, 100, 300, 300);  // 2,3代表左上角坐标;4,5代表右下角坐标

Pie绘制饼
比如要绘制一个限定矩形为RECT(470,440,690,690),起点的径线端点为(692,550),终点的径线端点为(582,441)的饼的边框,代码如下:

SelectObject(hdc, GetStockObject(NULL_BRUSH));
Pie(hdc, 470, 440, 690, 690, 692, 550, 582, 441);

自定义画笔

HPEN CreatePen(int fnPenStyle, int nWidth, COLORREF crColor);
参数fnPenStyle为画笔的样式,它可以是下列任何值之一:
        PS_SOLID,实心笔,向两边扩张。
        PS_DASH,短线式笔,要求笔<=1。
        PS_DOT,点式笔,要求笔<=1。
        PS_DASHDOT,虚线笔,要求笔<=1。
        PS_DASHDOTDOT,双虚线笔,要求笔<=1。
        PS_NULL,笔不可见。
        PS_INSIDEFRAME,实心笔,但笔宽是向里扩展。
    参数nWidth为画笔的宽度。
    参数crColor为画笔的颜色。

自定义画笔的使用实例:
    HPEN hPen = CreatePen(PS_SOLID, 1, RGB(42,187,203));
    Pen(const Color &color, REAL width = 1.0f );

    //使用自定义画笔
    HPEN hPenOld = (HPEN)SelectObject(hdc, hPen);
    MoveToEx(hdc, 78, 315, NULL);
    LineTo(hdc, 150, 170);
    //销毁自定义画笔
    SelectObject(hdc, hPenOld);
    DeleteObject(hPen);

自定义画刷:
创建单色画刷
HBRUSH CreateSolidBrush(COLORREF color);
使用实例:
//创建自定义单色画刷
HBRUSH hbr = CreateSolidBrush(RGB(0,0,255));
//选进自定义单色画刷并备份旧画刷
HBRUSH hBrushOld = (HBRUSH)SelectObject(hdc, hbr);
//填充指定矩形
Rectangle(hdc, 480, 170, 520, 316);
创建影线画刷
HBRUSH CreateHatchBrush(int iHatch, COLORREF color);
参数iHatch为阴影类型:HS_BDIAGONAL:45度下斜线阴影(从左到右);HS_CROSS:十字交叉阴影;HS_DIAGCROSS:45度交叉阴影;HS_FDIAGONAL:45度下斜线阴影(从右到左),HS_HORIZONTAL:水平线阴影;HS_VERTICAL:重直线阴影。
参数color为阴影的颜色。

LinearGradientBrush创建渐变画刷
LinearGradientBrush(Point &point1, Point &point2, Color &color1, Color &color2);

    point1为渐变的起点坐标。
    point2为渐变的终点坐标。
    color1为起点的颜色。
    color2为终点的颜色。

主要是头文件以及附加依赖库
GDI+使用时主要头文件为:#include

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值