Поделиться через


CDC::EnumObjects

Перечисляет пера и кисти, доступные в контексте устройства.

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

Параметры

  • nObjectType
    Указывает тип объекта. Он может иметь значения OBJ_BRUSH или OBJ_PEN.

  • lpfn
    Адрес процедура- экземпляра приложение- заданной функции обратного вызова. См. раздел "примечания" ниже.

  • lpData
    Указывает на приложение- предоставляемым данным. Данные, передаваемые в функции обратного вызова вместе с данными объекта.

Возвращаемое значение

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

Заметки

Для каждого объекта данного типа функция обратного вызова, что прохождение Вызываются со сведениями для этого объекта. Системные вызовы функции обратного вызова, пока в ней не будут больше нет объектов или передачи 0 функции обратного вызова.

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

Кроме того, не следует экспортировать имя функции в модуль- выписке EXPORTS в файле определения приложения. Вместо этого можно использовать модификатор функции EXPORT, как в выражениях

int CALLBACK EXPORT AFunction**(LPSTR**, LPSTR);

вызвать компилятора создать правильную запись экспорта для экспорта именем без псевдонимов. Это работает в большинстве необходимостей. В некоторых особых случаях, как экспортировать функцию порядковому номеру или элиайсингом экспортировать все же нужно использовать выписку EXPORTS в файле модуль- определения.

Для компилирование программ Microsoft foundation, обычно помощью параметров компилятора /GA и /GEs. Параметр компилятора /Gw не используется с классами Microsoft foundation. (При использовании функции Windows MakeProcInstance, необходимо явно привести возвращенный указатель функции из FARPROC к нужному типу данного API). Интерфейсы регистрации обратного вызова, теперь типобезопасный (необходимо передать указатель функции, указывающий вправо типу функции для конкретного обратного вызова).

Также обратите внимание, что все функции обратного вызова исключения должны поглотить Microsoft foundation перед возвратом к Windows, поскольку исключения нельзя вызвать через границы обратного вызова. Дополнительные сведения об исключениях см. в статье исключения.

Пример

// print some info about a pen we're ready to enumerate
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;
}

// get the default printer and enumerate the pens it has 
void CDCView::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));
   }
}

Требования

Header: afxwin.h

См. также

Ссылки

Класс CDC

Диаграмма иерархии

EnumObjects