共用方式為


CDC::EnumObjects

列舉型別 (Enumeration) 畫筆和筆刷可用的裝置內容。

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

參數

  • nObjectType
    指定物件型別。 它可以具有值 OBJ_BRUSHOBJ_PEN

  • lpfn
    是由應用程式所提供的回呼函式的程序執行個體的位址。 請參閱<備註>一節。

  • lpData
    為應用程式提供的資料點。 將資料傳遞至回呼函式與物件相關資訊。

傳回值

指定 回呼函式。傳回的最後一個值。 其意義是使用者定義的。

備註

針對特定型別的每一個物件,您傳遞呼叫與該物件相關資訊的回呼函式。 系統會在該處的回呼函式沒有其他物件或回呼函式傳回 0。

請注意 Microsoft Visual C++ 新功能可讓您使用一般函式做為函式傳遞至 EnumObjects。 這個位址傳遞至 EnumObjects 是函式的指標使用匯出 匯出 和使用 Pascal 呼叫慣例。 以受保護模式應用程式中,您不需要建立具有 Windows MakeProcInstance 函式之這個函式或釋放與 FreeProcInstance Windows 函式的函式之後使用。

您也不需要匯出一 EXPORTS 陳述式的函式名稱在應用程式的模組定義檔。 您可以使用 匯出 函式修飾詞,做為

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

讓編譯器名稱發出結束的適當的匯出資料錄,而不使用別名。 對於大部分的作業需求。 對於某些特殊情況,例如依序數匯出或別名的函式匯出,則在模組定義檔仍需要使用 EXPORTS 陳述式。

如需編譯 MFC 程式,您通常會使用/GA 和/GEs 編譯器選項。 /Gw 編譯器選項不適用於 Microsoft Foundation Class。 (如果您使用 Windows 函式 MakeProcInstance,您必須明確轉型從 FARPROC 傳回的函式指標到這個 API 所需的型別)。回呼註冊介面現在是型別安全 (您在指向種類正確的特定回呼的函式) 的函式指標必須傳遞。

同時也請注意任何回呼函式必須在傳回之前截取 Microsoft Foundation 例外狀況加入至 視窗中,,因為例外狀況回呼無法跨界限來擲回。 如需例外狀況的詳細資訊,請參閱本文 例外狀況

範例

// 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