win32之GDI2

时间:2024-03-19 20:02:36

今天通过画出具体的图形来展示win32的GDI函数如何来使用。

本次使用的开发工具是vs2013,语言C/C++,使用的是vs2013 自动生成的win32项目的框架,我们再继续在上面添加一些画图的代码,来展示画图函数的使用步骤。

首先还是先来粗略的概述GDI的相关知识点。

//gdi  图形设备接口
//使图形硬件和应用程序相互的隔离
//主要任务:负责系统与绘图程序之间的信息交换,处理windows程序的图形输出

 

//gdi是一个组件,里面有很多函数,大概分为5类
//1、取得和释放设备上下文的函数
//2、取得有关设备内容信息的函数
//3、绘图函数
//4、设定和取得设备上下文参数的函数
//5、调用gdi对象的函数

 

//gdi能处理的图形和图像,可以分为4类
//1、画线
//2、填充区域(画面)
//3、文字
//4、位图(win32中只能画位图,bmp格式的图片)

 

//通过gdi来画图形的步骤
//1、得到设备上下文函数(设备环境)
//2、修改设备属性
//3、绘图
//4、释放设备上下文句柄(设备环境)

 

//设备上下文(设备环境):dc
//是一种包含有关设备的绘制信息的windows的数据结构

 

//win32里面要得到设备上下文函数有两种方式
//1、wm_paint消息


//  窗口接到wm_paint的消息的情况有两种:一、窗口最初创建;二、窗口出现无效区域
//   有4种情况窗口会出现无效区域:a、窗口移动后或大小改变后;b、窗口隐藏后重新显示,

或者被其它窗口遮住了一部分
//  ,这一部分重新可见;c、调用InvalidateRect(使矩形失效)InvalidateRgn(使区域
//  失效);d、调用ScrollWindow(滚动窗口)ScrollDC(滚动DC)


//2、在wm_paint消息之外,得到设备上下文的函数 getdc,释放的函数releaseDc

1通过画笔画线

 //系统预设的画笔是黑色

使用以下两个函数演示默认画笔

MoveToEx(hdc, 50, 400, nullptr);

 LineTo(hdc, 400, 400);

通过左键消息响应画线

win32之GDI2

运行结果

win32之GDI2

我可以更改画笔颜色和风格

方式一:通过系统预设画笔

win32之GDI2

我们首先定义画笔句柄,然后获得系统预设对象,GetStockObject();参数如下表,可以看到系统预设的有画刷,有画笔,我们选择一个白色画笔,返回值需要强转。然后需要把我们获得的画笔选择进系统对象中

SelectObject(hdc, hPen); 就好像我们我们虽然有画笔了,但是我们要选择这只画笔才能画出效果,用完后要删除关联的画笔,否则关联的太多不删除的话,GDI会崩溃的,所有图像都会消失。效果入下(为了效果明显,使用了黑色背景);

win32之GDI2

win32之GDI2

方式二:自己创建画笔不使用系统预设的画笔

win32之GDI2

直接修改GetStockObject()函数为CreatePen(PS_SOLID, 5, RGB(255, 0, 0));其他同样

CreatePen(PS_SOLID, 5, RGB(255, 0, 0));这个函数第一个参数为画笔风格。第二个参数为画线粗细 , 第三个参数为画笔颜色

我使用的RGB宏来合成的颜色,红色

画笔风格入下表(我选择了PS_SOLID实线)

win32之GDI2

效果如图

win32之GDI2

对于画笔要注意一点的是:

//创建一个新的画笔
 //当第二个参数大于1时,第一个参数无论写成什么,都将是实线

介绍两个函数

// SetPixel(hdc, 100 + i, 100, 0x0000ff);//设置x,y位置的像素颜色

//GetPixel(hdc, 100 + i, 100) //获取x, y 位置的颜色

画笔这次就先介绍到这, 剩下的内容下次再继续介绍。