Шаг 676 - CDC::EnumObjects

int EnumObjects(int nObjectType,int (CALLBACK EXPORT* lpfn)
	(LPVOID,LPARAM),LPARAM lpData);

Возвращаемое значение
Определяет последнее значение, возвращенное функцией повторного вызова. Значение, определяемое пользователем.

Параметры
nObjectType
Определяет тип объекта. Это может иметь значения OBJ_BRUSH или OBJ_PEN.
lpfn
Является адресом образца процедуры обеспеченной прикладной программой функции повторного вызова.
lpData
Указатель на обеспеченные прикладной программой данные. Данные переданы к функции повторного вызова наряду с объектной информацией.

Замечания
Перечисляет перья и кисти, доступные в контексте устройства. Для каждого объекта данного типа, функция повторного вызова, которую Вы проходите, вызвана с информацией для того объекта. Системные вызовы функций повторного вызова не больше объектов или функция повторного вызова возвращает 0.
Обратите внимание, что новые свойства Microsoft Visual C++ позволяют Вам использовать обычную функцию как функцию переданную к EnumObjects. Адрес, переданный к EnumObjects - указатель на функцию, экспортируемую с EXPORT и с соглашением о вызовах Паскаля. В прикладных программах защищенного режима, Вы не должны создать эту функцию с функцией Windows MakeProcInstance или освобождаете функцию после использования с функцией FreeProcInstance Windows.
Вы также не должны экспортировать имя функции в инструкции EXPORTS в файле определения модуля вашей прикладной программы. Вы можете взамен использовать модификатор функции EXPORT, как в

int CALLBACK EXPORT AFunction( LPSTR, LPSTR );
заставляет транслятор создавать соответствующую экспортную запись для экспорта имени без совмещения имен. Это работает для большинства потребностей. Для некоторых специальных случаев, типа экспорта функции порядковым или совмещения имен экспорт, Вы все еще должны использовать инструкцию EXPORTS в файле определения модуля.
Для компилирования программ Microsoft Foundation, Вы будете обычно использовать /GA и /GEs параметры транслятора. /Gw опция транслятора не используется с MFC классами. (Если Вы используете функцию Windows MakeProcInstance, Вы будете должны явно привести возвращенный указатель функции от FARPROC до типа, необходимого в этом API.) интерфейсы регистрации Повторные вызовы теперь тип-безопасны (Вы должны передать в указателе функции, который указывает на правый вид функции для специфического повторного вызова).

Пример

// Печатает некоторую информацию относительно пера, которые перечисляем

BOOL CALLBACK EnumObjectHandler(LPVOID lpLogObject, LPARAM /* lpData */)
{
	LOGPEN* pPen = (LOGPEN*) lpLogObject;
   
	switch (pPen->lopnStyle)
	{
	case PS_SOLID:
		TRACE0("PS_SOLID:      ");
		break;
	case PS_DASH:
		TRACE0("PS_DASH:       ");
		break;
	case PS_DOT:
		TRACE0("PS_DOT:        ");
		break;
	case PS_DASHDOT:
		TRACE0("PS_DASHDOT:    ");
		break;
	case PS_DASHDOTDOT:
		TRACE0("PS_DASHDOTDOT: ");
		break;
	case PS_NULL:
		TRACE0("PS_NULL:       ");
		break;
	case PS_INSIDEFRAME:
		TRACE0("PS_INSIDEFRAME:");
		break;
	default:
		TRACE0("unk style:");
	}

	TRACE2("Color: 0x%8.8X, Width: %d\n", pPen->lopnColor, pPen->lopnWidth);
	return TRUE;
}

// Получите заданный по умолчанию принтер, и перечислите перья

void CMyView::OnEnumPens()
{
	CPrintDialog dlg(FALSE);
	dlg.GetDefaults();
	HDC hdc = dlg.GetPrinterDC();

	if (hdc != NULL)
	{
		CDC dc;
		dc.Attach(hdc);
		VERIFY(dc.EnumObjects(OBJ_PEN, EnumObjectHandler, 0));
	}
}

Предыдущий Шаг | Следующий Шаг | Оглавление
Автор Каев Артем - 28.01.2002