[Win32]画笔和规则区域填充

本文介绍了Win32环境下如何使用画笔进行线的绘制,包括创建、选择和删除画笔的操作,以及自定义画笔的样式和颜色。此外,还详细阐述了区域填充的原理,包括背景模式、空隙颜色的设置以及多边形填充模式的使用。通过对逻辑画笔的理解,开发者可以更好地控制屏幕和打印机的图形输出。

1. DC设备环境中的对象:

    1) DC中总共包含6种图形设备对象:画笔、画刷、位图、区域、字体和调色板;

    2) 这也就是说一个程序中最多只能创建这6中图形对象(当然每种可以创建多个);

    3) 一个DC环境同一时间每种图形对象只能有一个对应,要使用某个对象必须把该对象选入DC中,例如:不能同时使用白笔和黑笔,同一时间只能用一种颜色的笔,要使用它就得先将其选入DC中(除了调色板外其它所有对象都通过SelectObject函数选入DC环境中);

    4) 使用GDI对象时的三条法则:

         i) 最终应当删除用户创建的所有GDI对象;

         ii) 当GDI对象已经被选入DC中正在使用时不得删除该对象;

         iii) 不要删除备用对象(即Windows已经定义好的StockObject);


2. 使用现有画笔:

    1) 画笔用来画线,画笔决定了线条的颜色、宽度和样式,样式可以是实线、点线或虚线;

    2) 默认画笔为BLACK_PEN,宽度为1个像素的实心黑色线条,三种备用画笔为BLACK_PEN、WHITE_PEN、NULL_PEN(最后一种就是什么多不画,即无色);

    3) 和画刷HBRUSH一样,画笔也具有自己的句柄类型HPEN,这些GDI句柄都是在windef.h中声明;

    4) 获取和选入画笔:

HGDIOBJ SelectObject( // 同时返回上一个被使用的同种类型的GDI对象句柄
					 HDC		hdc,
					 HGDIOBJ	hgdiobj // 将该GDI对象选入DC中
	);

// 使用方法
HPEN	hPen;

hPen = (HPEN)GetStockObject( WHITE_PEN ); // 创建
SelectObject( hdc, hPen ); // 选中
// 这就意味着只有当另一种画笔被选入或者当前画笔被释放掉(删除掉)后该画笔才无效
// 该函数调用之后画的线都是白色的

// 另一种使用方法
hPen = (HPEN)SelectObject( hdc, GetStockObject( WHITE_PEN ) ); // 选中的同时返回原来的画笔
SelectObject( hdc, hPen ); // 还原原画笔


3. 使用自定义画笔:

    1) 当然也可以定义自己的画笔(不仅仅只是备用的黑色和白色以及实心1像素宽),可以定义其它颜色、宽度、样式等;

    2) 使用CreatePen和CreatePenIndrect函数创建画笔:

HPEN CreatePen( // 直接在内存中创建画笔资源
	int fnPenStyle,    // 宏,画笔的风格,即样式(实线、虚线等)
	int nWidth,        // 宽度,以像素点为单位
	COLORREF crColor   // 颜色
	);

// 通常一个GDI图形对象占很大的内存资源,如果同时创建多个这样的对象会非常耗资源
// 从而影响程序的性能,因此,如果为了根据运行的需要,要一次性创建很多画笔的时候
// 以下这个函数将成为不二的选择

HPEN CreatePenIndirect( // 创建逻辑画笔
					    // 不会
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值