应用程序可以通过调用GetCurrentObject和GetObject函数来检索笔,画笔,调色板,字体或位图的属性。GetCurrentObject函数返回一个将当前选定的对象识别到设备上下文中的句柄; GetObject函数返回一个描述对象的属性的结构。
以下示例显示应用程序如何检索当前画笔属性,并使用检索到的数据来确定是否需要选择新画笔。
HDC hdc; /* display DC handle */
HBRUSH hbrushNew, hbrushOld; /* brush handles */
HBRUSH hbrush; /* brush handle */
LOGBRUSH lb; /* logical-brush structure */
/*
*检索一个识别当前画笔的句柄。
*/
hbrush = GetCurrentObject(hdc, OBJ_BRUSH);
/*
*检索包含的LOGBRUSH结构
*当前刷属性。
*/
GetObject(hbrush, sizeof(LOGBRUSH), &lb);
/*
*如果当前的刷子不是固体黑色的刷子,
*用黑色黑色刷子代替。
*/
if ((lb.lbStyle != BS_SOLID)
|| (lb.lbColor != 0x000000)) {
hbrushNew = GetStockObject(BLACK_BRUSH);
hbrushOld = SelectObject(hdc, hbrushNew);
}
/ *用白色画笔执行绘画操作。*/
/*
*完成最后一次绘画操作
*用新的刷子,应用程序应该
*选择原来的刷回到
*设备上下文并删除新的画笔。
*在这个例子中,hbrushNew包含一个句柄
*到股票对象。没有必要(但它
*没有害处)调用库存中的DeleteObject
*对象。如果hbrush新包含一个画笔的句柄
*由一个函数创建,如CreateBrushIndirect,
*有必要调用DeleteObject。
*/
SelectObject(hdc, hbrushOld);
DeleteObject(hbrushNew);
请注意,首次调用SelectObject功能时,应用程序保存原始画笔句柄。保存此句柄,以便在使用新画笔完成最后一次绘画操作后,可以将原始画笔选择回设备上下文。将原始画笔选择回设备上下文后,新画笔将被删除,释放GDI堆中的内存。