Windows SDK(三)GDI图形绘制基础

GDI介绍

GDI:图形设备接口:Windows的子系统,负责在视讯显示器和打印机上显示图形。

GDI常见名词解释:

直线

曲线

填入区域:直线或曲线构成的封闭区域,可以用画刷进行填充

位图:点阵图像

文字

映像模式:不同尺寸绘图的形式

图元:以二级制形式存储的GDI集合

绘图区域:允许绘制任意形状的绘图区域

路径:GDI内部存储直线或曲线的集合

剪裁:剪出不同区域

调色盘:输出设备允许使用颜色的范围 打印

HDC:设备上下文即用于绘制到屏幕、打印机或者图元文件。

Windows SDK(三)GDI图形绘制基础_第1张图片

如图:最外侧是屏幕区域,名称减号叉号等是窗口区域,除此以外是客户区

窗口区左上角是坐标轴x,y等于0的位置,向右向下xy增大

设备环境(DC):设备上下文缩写,程序里可以进行绘制的部分

接下来讲述如何应用GDI来进行绘图

绘制入口

在桌面程序中找到该处

case WM_PAINT: 

{

    PAINTSTRUCT ps;

    HDC hdc = BeginPaint(hWnd, &ps);

    HDC hdc = BgeinPaINT(hWnd, &ps) 在桌面程序的此处进行绘制,此处我们填入一个封装好的

    HDC hdc2 = GetDC(hWnd); 两种接受窗口句柄的方式

    MyPaint(hdc); 此处为绘制窗口的函数

    ReleaseDC(hWnd,hdc2);  释放窗口句柄

}

绘制开始

BOOL MyPaint(HDC hDC){}  此处是绘制窗口的函数,此时可见,该函数并没有被书写

设置背景板

SetBkMode(hDC, TRANSPARENT); 设置透明背景色,不加的话,输出字体的背景一直是白色的

设置画笔

画笔用于绘画图像的边框

HPEN hBluePen = CreatePen(PS_SOLID, 3, RGB(0, 0, 255)); 创建画笔,参数依次 笔样式 划线

的宽度 划线的颜色:三原色

画笔的选择

HGDIOBJ hGdiObj = SelectObject(hDC, hBluePen); 选择画笔,参数依次设备上下文句柄 画笔

画笔位置初始化

此处设置画笔起始位置:

POINT pt = { 0 }; 画笔当前位置的指针

MoveToEx(hDC, 100, 100, &pt); 移动画笔到起点 参数依次 设备上下文句柄 起点的xy轴 接受画

笔当前位置结构的指针

线条的绘画

LineTo(hDC, 200, 400); 此函数用于绘制线条 参数依次 句柄 xy最终位置坐标

画笔矩形的绘画

Rectangle(hDC, 150, 100, 300, 200); 此函数绘制矩形 参数依次 句柄 左上右下顶点的坐标

画刷初始化

画刷用于填充图像颜色等等,此处介绍两种不同的画刷

HBRUSH hSolidBrush = CreateSolidBrush(RGB(0, 0, 255)); 创建实心画刷 参数为三原色

HBRUSH hHatchBrush = CreateHatchBrush(HS_DIAGCROSS, RGB(0, 0, 255)); 创建阴影画刷

参数依次 阴影形式 三原色

画刷矩形的绘画

HGDIOBJ hGdiObj2 = SelectObject(hDC, hHatchBrush); 选择阴影画刷

Rectangle(hDC, 150, 100, 300, 200); 绘制矩形 该函数临近原则,最近的hdc选择是哪个就用哪

个,此处是阴影画刷

DeleteObject(hGdiObj2); 使用完毕后,删除选择的工具,此处为阴影画刷

弧线的绘画

弧线输出:设计思路 n个点连成弧线

POINT pi[4] = {

10,120,

180,300,

300,180,

120,10

}; 申请多个点的数组

PolyBezier(hDC, pi, 4);  曲线绘制:参数依次 句柄 点位置 点数数量

圆的绘画

设计思路:一个矩形的对角点,延申出来圆

Arc(hDC, 100, 200, 200, 100, 350, 50, 350, 350); 用于存储点集合 参数依次 正方形两个对角点 圆

的起点终

点径向线的xy坐标,根据坐标的不同画出的圆可以闭口或不闭口

普通字体的输出

SetTextColor(hDC, RGB(0, 0, 255)); 设置字体颜色 参数依次句柄 三原色

TextOut(hDC, 100, 100, L"rkvir", wcslen(L"rkvir")); 窗口写字 参数依次 句柄 xy坐标 要输出的话 输

出话的长度

高级字体的输出

HFONT hFont = CreateFont(100, 50, 0, 0, 0, 0, 0, 0, GB2312_CHARSET, 0, 0, 0, 0, L"宋体"); 参

数依次 字体的高度 宽度 剩下填0 字符集即字符编码 剩下填0 本地字体

SetTextColor(hDC, RGB(255, 0, 255)); 设置文字的颜色

选择字体

SelectObject(hDC, hFont); 选择字体

输出文字位置初始化

RECT rect; 定义输入文字的位置

SetRect(&rect, 30, 300, 400, 200); 设置文字位置的具体参数:上下左右

文字输出

DrawText(hDC, L"这是一个实例", -1, &rect, DT_NOCLIP); 文字输出:参数依次 句柄 要输出的文

字 -1此处文字以00结尾,可以用-1表该文字多长都可以,若不以00结尾,则填写文字实际长度 文

字位置:包含上下左右

DeleteObject(hFont); 文字输出完毕后,释放字体内存

位图的设置

加载位图

HBITMAP hBitMap = (HBITMAP)LoadImage(NULL, L"bg.bmp", IMAGE_BITMAP, 500, 500,

LR_LOADFROMFILE);  将位图加载进来:以位图句柄接收 LoadImage需要类型强转 参数依次

NULL 相对路径:该图像文件需要在源程序文件夹中 默认类型 大小 声明从文件来

设置dc

HDC hMemoryDC = CreateCompatibleDC(hDC); 2.设置一个兼容设备环境的内存dc

选择对象

SelectObject(hMemoryDC, hBitMap); 3.选择对象 参数依次 句柄 位图句柄

贴图

BitBlt(hDC, 0, 0, 500, 500, hMemoryDC, 0, 0, SRCCOPY);4.贴图 参数依次 目标句柄 目标被贴矩

形左上角xy坐标 源位图和目标矩形的宽度和高度 源位图句柄 原位图左上角xy坐标 操作代码:F1

跟进去该函数查看参数选择

你可能感兴趣的:(windows)