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 で必要な型に返された関数ポインターをキャストする必要があります)。これで、コールバックの登録のインターフェイスは、タイプ セーフでポインター (右の種類の特定のコールバックの関数を指します) 関数に渡す必要があります。
また、例外がコールバックの境界を越えてスローできないため、すべてのコールバック関数が Windows ことをに戻す前に 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));
}
}
必要条件
ヘッダー: afxwin.h