Прикладная программа может извлечь атрибуты пера, кисти, палитры, шрифта или точечного рисунка при помощи вызова функции GetCurrentObject и GetObject. Функция GetCurrentObject возвращает дескриптор, идентифицирующий объект, в настоящий момент выбранный в контекст устройства (DC); функция GetObject возвращает структуру, которая описывает атрибуты объекта.
Пример ниже показывает, как приложение может извлечь текущие атрибуты кисти и использовать извлеченные данные, чтобы выявить, необходимо ли выбирать новую кисть.
HDC hdc; // дескриптор DC дисплея
HBRUSH hbrushNew, hbrushOld; // дескрипторы кисти
HBRUSH hbrush; // дескриптор кисти
LOGBRUSH lb; // структура логической кисти
// Извлекаем дескриптор, идентифицирующий текущую кисть.
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
// для стандартного объекта. Если параметр hbrushNew содержал
// дескриптор кисти, созданный такой функцией как
// CreateBrushIndirect, оно должно немедленно вызвать DeleteObject.
SelectObject(hdc, hbrushOld);
DeleteObject(hbrushNew);
|
|
Обратите внимание! на то, что приложение сохраняет первоначальный дескриптор кисти при вызове функции SelectObject с самого начала. Этот дескриптор сохраняется так, чтобы первоначальная кисть могла выбираться обратно в контекст устройства (DC) после того, как новой кистью будет закончена последняя операция закрашивания. После того, как первоначальная кисть выбирается снова в контекст устройства, новая кисть удаляется, освобождая память в динамической памяти графического интерфейса устройства (GDI). |