Прикладная программа может извлечь атрибуты пера, кисти, палитры, шрифта или точечного рисунка при помощи вызова функции 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). |