CDC::EnumObjects
Enumera os menus e pincéis disponíveis em um contexto de dispositivo.
int EnumObjects(
int nObjectType,
int ( CALLBACK * lpfn )( LPVOID, LPARAM ),
LPARAM lpData
);
Parâmetros
nObjectType
Especifica o tipo de objeto. Pode ter valores OBJ_BRUSH ou OBJ_PEN.lpfn
É o endereço de procedimento - o instância de função de retorno de chamada aplicativo fornecida. Consulte a seção “comentários” abaixo.lpData
Pontos a dados fornecidos aplicativo. Os dados são passados à função de retorno de chamada junto com informações do objeto.
Valor de retorno
Especifica o último valor retornado por função de retorno de chamada. Seu significado é definido pelo usuário.
Comentários
Para cada objeto de um determinado tipo, a função de retorno de chamada que você passe é chamado com informações para o objeto. O sistema chama a função de retorno de chamada até que não há mais nenhum objeto ou função de retorno de chamada retorna 0.
Observe que os novos recursos do Microsoft Visual C++ permitem que você usar uma função comum como a função passado para EnumObjects. O endereço passado para EnumObjects é um ponteiro para uma função exportada com EXPORTAR e com a convenção de chamada de Pascal. Em aplicativos de proteger- modo, você não tem que criar esta função com a função de MakeProcInstance do windows ou liberar após o uso da função com a função do windows de FreeProcInstance .
Você também não precisa exportar o nome de função em uma instrução de EXPORTS módulo no arquivo de definição do seu aplicativo. Você pode usar o modificador da função de EXPORTAR , como em
int CALLBACK EXPORT AFunction**(LPSTR**, LPSTR);
para fazer com que o compilador emitir o registro adequado de exportação para exportação por nome sem serrilha. Isso funciona para a maioria precisa. Para alguns casos especiais, como exportar uma função por ordinal ou por serrilha exportação, você ainda precisará usar uma instrução de EXPORTS em um arquivo de módulo definição.
Para compilar programas do Microsoft foundation, você geralmente usará as opções de compilador /GA e /GEs. A opção de compilador /Gw não é usada com as classes de base da Microsoft. (Se você usar a função do windows MakeProcInstance, você precisará converter explicitamente o ponteiro de função de FARPROC retornado para o tipo necessário em este API.) As interfaces de registro de retorno de chamada agora são fortemente tipadas (você deve passar em um ponteiro de função que aponta para o tipo correto de função para o retorno de chamada específico).
Observe também que todas as funções de retorno de chamada devem interceptar exceções de Microsoft foundation antes de retornar ao, desde que as exceções não podem ser lançadas através dos limites de retorno de chamada. Para obter mais informações sobre as exceções, consulte o artigo Exceções.
Exemplo
// 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));
}
}
Requisitos
Cabeçalho: afxwin.h