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( // 创建逻辑画笔
// 不会

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

被折叠的 条评论
为什么被折叠?



