Isolamento da biblioteca de controles comuns do MFC
A biblioteca de controles comuns agora é isolada dentro do MFC, permitindo que diferentes módulos (como DLLs do usuário) para usar diferentes versões da biblioteca de controles comuns, especificando a versão em seus manifestos.
Um aplicativo MFC (ou código de usuário chamado pelo MFC) faz chamadas para a biblioteca de controles comuns APIs através das funções de wrapper chamadas Afxnomedafunção, onde nomedafunção é o nome de uma API de controles comuns.Essas funções de wrapper são definidas no afxcomctl32.h e afxcomctl32.inl.
Você pode usar o AFX_COMCTL32_IF_EXISTS e AFX_COMCTL32_IF_EXISTS2 macros (definidas em afxcomctl32.h) para determinar se a biblioteca de controles comuns implementa uma determinada API em vez da chamada GetProcAddress.
Tecnicamente, você pode fazer chamadas para APIs de biblioteca de controles comuns através de uma classe de wrapper, CComCtlWrapper (definido em afxcomctl32.h).CComCtlWrappertambém é responsável para o carregamento e descarregamento de Comctl32. dll.O estado do módulo MFC contém um ponteiro para uma instância de CComCtlWrapper.Você pode acessar a classe de wrapper usando o afxComCtlWrapper macro.
Observe que a chamada API controles comuns diretamente (sem usar as funções de wrapper do MFC) de um MFC aplicativo ou usuário DLL funcionará na maioria dos casos, porque o aplicativo do MFC ou usuário DLL está vinculado à biblioteca de controles comuns ele solicitado no manifesto).No entanto, o próprio código MFC tem usar invólucros, porque o código do MFC pode ser chamado a partir de DLLs de usuário com diferentes versões de biblioteca de controles comuns.