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 로 내보낸 함수에 대 한 포인터입니다 내보내기 및 파스칼 호출 규칙을 합니다. 보호 모드 응용 프로그램에 Windows에서이 함수를 만들 필요가 MakeProcInstance 함수 또는 함수를 사용한 후 약속을 FreeProcInstance Windows 함수.
함수 이름을 내보낼도 하지 않습니다는 내보내기 응용 프로그램의 모듈 정의 파일에서 문을. 대신 사용할 수 있는 내보내기 한정자로 작동
int 콜백 내보내기 AFunction**(LPSTR**, LPSTR);
내보내기에 대 한 적절 한 내보내기 레코드 없이 별칭 이름 생성 하 게. 이것은 대부분의 요구 사항에 적용 됩니다. 함수 내보내기, 별칭 또는 서 수 내보내기 일부 특수 한 경우에도 사용 해야는 내보내기 모듈 정의 파일에서 문을.
Mfc 프로그램 컴파일하는 데, 일반적으로 /GA 및 /GEs 컴파일러 옵션을 사용 합니다. /Gw 컴파일러 옵션은 mfc는 사용 하지 않습니다. (Windows 함수를 사용 하지 경우 MakeProcInstance, 반환 된 함수 포인터를 명시적으로 캐스팅 해야 합니다 farproc이 이 API에 필요한 형식입니다.) 이제 형식 안전 콜백 등록 인터페이스입니다 (오른쪽 종류에 대 한 특정 콜백 함수를 가리키는 함수 포인터를 전달 해야 합니다).
또한 모든 콜백 함수 콜백을 경계에서 예외가 throw 될 수 있으므로 Windows 수를 반환 하기 전에 Mfc 예외 트래핑 해야 참고. 예외에 대 한 자세한 내용은 예외.
예제
// 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