windows编程笔记【八】画笔与画刷

在使用winAPI绘图的话,先要定义画笔和画刷:

他们都是GUI中所定义的图形对象。

HPEN CreatePen(int 样式, int 宽度, RGB(255, 0, 0)); //建立画笔
HBRUSH CreateHatchBrush(int 样式, RGB(255, 0, 0)); //建立阴影画刷
HBRUSH CreateHatchBrush(int 宽度, RGB(0, 255, 0)); //建立单色画刷

 返回值都是H开头,说明他们都是句柄,我们把这个句柄在绘图DC里使用它们即可。

HGDIOBJ SelectObject(HDC hdc,HGDIOBJ GDI对象); //选用GDI对象
BOOL DeleteObject(HGDIOBJ GDI 对象); //删除GDI对象

 

首先定义一些变量,定义一下画刷画笔句柄

HPEN hPen[7]; //画笔句柄
HBRUSH hBru[7]; //画刷句柄
int sPen[7] = { PS_SOLID,PS_DASH,PS_DOT,PS_DASHDOT,PS_DASHDOTDOT,PS_NULL,PS_INSIDEFRAME };//画笔样式
int sBru[6] = { HS_VERTICAL,HS_HORIZONTAL,HS_CROSS,HS_DIAGCROSS,HS_FDIAGONAL,HS_BDIAGONAL };//画刷样式

 

新建两个函数:

void MyPrint(HDC hdc)
{


	int y, x1, x2;
	for (int i = 0; i < 7; i++)
	{
		y = (i + 1) * 30;
		SelectObject(hdc, hPen[i]);
		MoveToEx(hdc, 30, y, NULL); //移动目标
		LineTo(hdc, 100, y); //画线
	}
	x1 = 120;
	x2 = 180;

	for (int i = 0; i < 7; i++)
	{

		SelectObject(hdc, hBru[i]);
		Rectangle(hdc, x1, 30, x2, y); //画矩形

		x1 += 70;
		x2 += 70;
	}
}

BOOL InitInstance(HINSTANCE hinstance)
{
	HWND hwnd;
	HDC hdc;
	if (!(hwnd = CreateWindowEx(NULL,
		"WINCLASS1",	//winclass.lpszClassName设置的字符,是类的别名。
		"YouWindows",	//窗口的名称
		WS_OVERLAPPEDWINDOW | WS_VISIBLE,	//一些窗口属性
		0, 0,			//窗口位置
		600, 450,		//窗口宽高
		NULL,			//父窗口句柄
		NULL,			//附属窗口句柄
		hinstance,		//WinMain第一个实参,程序句柄。
		NULL			//null就可以了
	)))
		return false;

	for (int i = 0; i < 7; i++)
	{
		hPen[i] = CreatePen(sPen[i], 1, RGB(255, 0, 0));
		if (i != 6)
			hBru[i] = CreateHatchBrush(sBru[i], RGB(255, 0, 0));
		else
			hBru[i] = CreateHatchBrush(sBru[i], RGB(0, 255, 0));
	}

	hdc = GetDC(hwnd);
	MyPrint(hdc);
	ReleaseDC(hwnd, hdc);
}

 即打印出画刷

说明文档:制作类似windows画笔的程序 功能: 文件—— 新建 打开 保存 另存为 页面设置——布大小变化 退出 编辑—— 剪切 复制 粘贴 删除选定区域(但是背景变成黑色的了?!) 查看—— 工具栏、状态栏、颜料盒的显示与隐藏 大尺寸、常规尺寸、自定义尺寸的缩放 图像—— 翻转功能实现(包括水平、垂直翻转,以及180度旋转,90与270度旋转理论上亦实现了,只是速度有些慢,只能适用于小图形) 图像反色 颜色—— 编辑颜色功能实现 帮助—— 弹出信息框 界面: 突出显示按件 鼠标移动显示坐标 使用铅笔在布上任意绘,且可以变化颜色 橡皮擦功能实现(橡皮擦大小的变化可以通过改变笔粗细后改变) 拾色器功能实现 油漆桶功能实现 直线、笔功能实现 屏幕输入文字 放大镜功能实现!!(——强烈注意:它又名奇异镜> <……即使用之后,所有画图功能(比如颜色反色出现,橡皮变成铅笔……填充的色块可以叠加……,O(∩_∩)O哈哈~所以使用之后,记得退出程序,重新开启……) 可以空心或实心的矩形 可以空心或实心的椭圆和圆 喷枪功能实现(只是在画笔变粗时,效果会有些恶心……,建议通过笔,选择1,然后使用) 另:支持各种快捷键,如ctrl+S/ctrl+x 等,详情请见菜单栏。 使用的API函数与ActiveX控件: API函数: GetCursorPos GetDC GetPixel RoundRect ActiveX控件: 通用对话框控件, 位于“Microsoft CommonDialog Control 6.0” 中
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值