CDC::EnumObjects

枚举钢笔和画笔可在设备上下文。

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

参数

  • nObjectType
    指定目标类型。它可以具有值 OBJ_BRUSHOBJ_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基础程序,通常使用/GA和/GEs编译器选项。/Gw编译器选项不使用Microsoft基础选件类。(如果使用Windows功能 MakeProcInstance,您将需要显式转换从 FARPROC 的返回的函数指针到此API需要的类型。)回调注册接口现在为类型安全的(在指向正确类型的特定回调的函数)的函数指针必须通过。

另外请注意所有回调函数必须在返回之前捕获Microsoft基础异常。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