Isolamento da biblioteca de controles comuns do MFC

Observação

A biblioteca Microsoft Foundation Classes (MFC) continua a ser suportada. No entanto, já não estamos a adicionar funcionalidades nem a atualizar a documentação.

A biblioteca Common Controls agora está isolada no MFC, permitindo que diferentes módulos (como DLLs de usuário) usem versões diferentes da biblioteca Common Controls especificando a versão em seus manifestos.

Um aplicativo MFC (ou código de usuário chamado por MFC) faz chamadas para APIs de biblioteca de controles comuns por meio de funções de wrapper chamadas AfxFunctionName, onde FunctionName é o nome de uma API de controles comuns. Essas funções de wrapper são definidas em afxcomctl32.h e afxcomctl32.inl.

Você pode usar as macros AFX_COMCTL32_IF_EXISTS e AFX_COMCTL32_IF_EXISTS2 (definidas em afxcomctl32.h) para determinar se a biblioteca Common Controls implementa uma determinada API em vez de chamar GetProcAddress.

Tecnicamente, você faz chamadas para APIs da Common Controls Library por meio de uma classe CComCtlWrapper wrapper (definida em afxcomctl32.h). CComCtlWrapper é também responsável pela carga e pela descarga de comctl32.dll. O estado do Módulo MFC contém um ponteiro para uma instância de CComCtlWrapper. Você pode acessar a classe wrapper usando a afxComCtlWrapper macro.

Observe que chamar a API de controles comuns diretamente (não usando as funções de wrapper MFC) de um aplicativo MFC ou DLL de usuário funcionará na maioria dos casos, porque o aplicativo MFC ou a DLL do usuário está vinculada à biblioteca Common Controls solicitada em seu manifesto). No entanto, o próprio código MFC tem que usar os wrappers, porque o código MFC pode ser chamado a partir de DLLs de usuário com diferentes versões de biblioteca Common Controls.