CDC::EnumObjects
列舉型別 (Enumeration) 畫筆和筆刷可用的裝置內容。
int EnumObjects(
int nObjectType,
int ( CALLBACK * lpfn )( LPVOID, LPARAM ),
LPARAM lpData
);
參數
nObjectType
指定物件型別。 它可以具有值 OBJ_BRUSH 或 OBJ_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