Informations sur l'application et gestion

Lorsque vous écrivez une application, vous créez un objet dérivé unique CWinApp. Parfois, vous souhaiterez peut-être obtenir des informations sur cet objet en dehors de l’objet CWinAppdérivé. Vous pouvez également avoir besoin d’accéder à d’autres objets « manager » globaux.

La bibliothèque de classes Microsoft Foundation fournit les fonctions globales suivantes pour vous aider à accomplir ces tâches :

Fonctions d’information et de gestion des applications

Nom Description
AfxBeginThread Crée un thread.
AfxContextMenuManager Pointeur vers le gestionnaire de menu contextuel global.
AfxEndThread Met fin au thread actuel.
AfxFindResourceHandle Guide la chaîne de ressources et localise une ressource spécifique par ID de ressource et type de ressource.
AfxFreeLibrary Décrémente le nombre de références du module DLL (Dynamic-Link Library) chargé. Lorsque le nombre de références atteint zéro, le module n’est pas mappé.
AfxGetApp Retourne un pointeur vers l’objet unique CWinApp de l’application.
AfxGetAppName Retourne une chaîne qui contient le nom de l’application.
AfxGetInstanceHandle Retourne une HINSTANCE valeur représentant cette instance de l’application.
AfxGetMainWnd Retourne un pointeur vers la fenêtre « principale » actuelle d’une application non OLE ou la fenêtre frame sur place d’une application serveur.
AfxGetPerUserRegistration Utilisez cette fonction pour déterminer si l’application redirige l’accès au Registre vers le HKEY_CURRENT_USER nœud (HKCU).
AfxGetResourceHandle Retourne une HINSTANCE valeur à la source des ressources par défaut de l’application. Permet d’accéder directement aux ressources de l’application.
AfxGetThread Récupère un pointeur vers l’objet CWinThread actuel.
AfxInitRichEdit Initialise le contrôle d’édition enrichi version 1.0 pour l’application.
AfxInitRichEdit2 Initialise la version 2.0 et les versions ultérieures du contrôle d’édition enrichi pour l’application.
AfxIsExtendedFrameClass Détermine si la fenêtre donnée est un objet frame étendu.
AfxIsMFCToolBar Détermine si la fenêtre donnée est un objet de barre d’outils.
AfxKeyboardManager Pointeur vers le gestionnaire de clavier global.
AfxLoadLibrary Cartes un module DLL et retourne un handle qui peut être utilisé pour obtenir l’adresse d’une fonction DLL.
AfxLoadLibraryEx Cartes un module DLL à l’aide des options spécifiées et retourne un handle qui peut être utilisé pour obtenir l’adresse d’une fonction DLL.
AfxMenuTearOffManager Pointeur vers le gestionnaire de menus déchirurant global.
AfxMouseManager Pointeur vers le gestionnaire de souris global.
AfxRegisterClass Inscrit une classe de fenêtre dans une DLL qui utilise MFC.
AfxRegisterWndClass Inscrit une classe de fenêtre Windows pour compléter celles inscrites automatiquement par MFC.
AfxSetPerUserRegistration Définit si l’application redirige l’accès au Registre vers le HKEY_CURRENT_USER nœud (HKCU).
AfxSetResourceHandle Définit le handle HINSTANCE où les ressources par défaut de l’application sont chargées.
AfxShellManager Pointeur vers le gestionnaire d’interpréteur de commandes global.
AfxSocketInit Appelé dans un CWinApp::InitInstance remplacement pour initialiser les sockets Windows.
AfxUserToolsManager Pointeur vers le gestionnaire d’outils utilisateur global.
AfxWinInit Appelé par la fonction fournie WinMain par MFC, dans le cadre de l’initialisation CWinApp d’une application basée sur l’interface graphique utilisateur, pour initialiser MFC. Doit être appelé directement pour les applications console qui utilisent MFC.

AfxBeginThread

Appelez cette fonction pour créer un thread.

CWinThread* AfxBeginThread(
    AFX_THREADPROC pfnThreadProc,
    LPVOID pParam,
    int nPriority = THREAD_PRIORITY_NORMAL,
    UINT nStackSize = 0,
    DWORD dwCreateFlags = 0,
    LPSECURITY_ATTRIBUTES lpSecurityAttrs = NULL);

CWinThread* AfxBeginThread(
    CRuntimeClass* pThreadClass,
    int nPriority = THREAD_PRIORITY_NORMAL,
    UINT nStackSize = 0,
    DWORD dwCreateFlags = 0,
    LPSECURITY_ATTRIBUTES lpSecurityAttrs = NULL);

Paramètres

pfnThreadProc
Pointe vers la fonction de contrôle du thread de travail. Le pointeur ne peut pas être NULL. Cette fonction doit être déclarée comme suit :

UINT __cdecl MyControllingFunction( LPVOID pParam );

pThreadClass
D’un RUNTIME_CLASS objet dérivé de CWinThread.

pParam
Paramètre à passer à la fonction de contrôle.

nPriority
Priorité à définir pour le thread. Pour obtenir la liste complète et la description des priorités disponibles, consultez SetThreadPriority le Kit de développement logiciel (SDK) Windows.

nStackSize
Spécifie la taille en octets de la pile pour le nouveau thread. Si 0, la taille de la pile est par défaut de la même taille que celle du thread de création.

dwCreateFlags
Spécifie un indicateur supplémentaire qui contrôle la création du thread. Cet indicateur peut contenir l’une des deux valeurs suivantes :

  • CREATE_SUSPENDED Démarrez le thread avec un nombre d’interruptions d’un. Utilisez cette option CREATE_SUSPENDED si vous souhaitez initialiser des données membres de l’objet CWinThread , telles que m_bAutoDelete ou des membres de votre classe dérivée, avant que le thread ne commence à s’exécuter. Une fois votre initialisation terminée, utilisez CWinThread::ResumeThread cette option pour démarrer le thread en cours d’exécution. Le thread ne s’exécute pas tant qu’il CWinThread::ResumeThread n’est pas appelé.

  • 0 Démarrez le thread immédiatement après la création.

lpSecurityAttrs
Pointe vers une SECURITY_ATTRIBUTES structure qui spécifie les attributs de sécurité du thread. Si NULL, les mêmes attributs de sécurité que le thread de création sont utilisés. Pour plus d’informations sur cette structure, consultez le Kit de développement logiciel (SDK) Windows.

Valeur de retour

Pointeur vers l’objet thread nouvellement créé ou NULL en cas d’échec.

Notes

La première forme de création d’un thread de AfxBeginThread travail. Le deuxième formulaire crée un thread qui peut servir de thread d’interface utilisateur ou de thread de travail.

AfxBeginThread crée un CWinThread objet, appelle sa CreateThread fonction pour commencer à exécuter le thread et retourne un pointeur vers le thread. Les vérifications sont effectuées tout au long de la procédure pour s’assurer que tous les objets sont désalloués correctement si une partie de la création échoue. Pour mettre fin au thread, appelez AfxEndThread à partir du thread ou revenez de la fonction de contrôle du thread de travail.

Le multithreading doit être activé par l’application ; sinon, cette fonction échoue. Pour plus d’informations sur l’activation de multithreading, consultez /MD, /MT( /LD Utiliser la bibliothèque d’exécution) .

Pour plus d’informations sur AfxBeginThread, consultez les articles Multithreading : Création de threads de travail et de multithreading : création de threads d’interface utilisateur.

Exemple

Consultez l’exemple pour CSocket::Attach.

Spécifications

En-têteafxwin.h

AfxContextMenuManager

Pointeur vers le gestionnaire de menu contextuel global.

Syntaxe

CContextMenuManager* afxContextMenuManager;

Spécifications

En-têteafxcontextmenumanager.h:

AfxEndThread

Appelez cette fonction pour terminer le thread en cours d’exécution.

void AFXAPI AfxEndThread(
    UINT nExitCode,
    BOOL bDelete  = TRUE);

Paramètres

nExitCode
Spécifie le code de sortie du thread.

bDelete
Supprime l’objet thread de la mémoire.

Notes

Doit être appelé à partir du thread pour être arrêté.

Pour plus d’informations sur AfxEndThread, consultez l’article Multithreading : Fin des threads.

Spécifications

En-têteafxwin.h

AfxFindResourceHandle

Permet AfxFindResourceHandle de parcourir la chaîne de ressources et de localiser une ressource spécifique par ID de ressource et type de ressource.

Syntaxe

HINSTANCE AFXAPI AfxFindResourceHandle( LPCTSTR lpszName,  LPCTSTR lpszType );

Paramètres

lpszName
Pointeur vers une chaîne contenant l’ID de ressource. lpszType
Pointeur vers le type de ressource. Pour obtenir la liste des types de ressources, consultez FindResource le Kit de développement logiciel (SDK) Windows.

Valeur de retour

Handle du module qui contient la ressource.

Notes

AfxFindResourceHandle recherche la ressource spécifique et retourne un handle au module qui contient la ressource. La ressource peut se trouver dans n’importe quelle DLL d’extension MFC chargée. AfxFindResourceHandle indique quelle ressource est présente.

Les modules sont recherchés dans cet ordre :

  1. Le module principal, s’il s’agit d’une DLL d’extension MFC.

  2. Modules non système.

  3. Modules spécifiques au langage.

  4. Le module principal, s’il s’agit d’une DLL système.

  5. Modules système.

Spécifications

En-têteafxwin.h:

AfxFreeLibrary

Les deux AfxFreeLibrary et AfxLoadLibrary conservent un nombre de références pour chaque module de bibliothèque chargé.

BOOL AFXAPI AfxFreeLibrary(HINSTANCE hInstLib);

Paramètres

hInstLib
Handle du module de bibliothèque chargé. AfxLoadLibrary retourne ce handle.

Valeur de retour

TRUE si la fonction réussit ; sinon, FALSE.

Notes

AfxFreeLibrary décrémente le nombre de références du module DLL (Dynamic-Link Library) chargé. Lorsque le nombre de références atteint zéro, le module n’est pas mappé à partir de l’espace d’adressage du processus appelant et le handle n’est plus valide. Ce nombre de références est incrémenté chaque fois AfxLoadLibrary qu’il est appelé.

Avant de démapper un module de bibliothèque, le système permet à la DLL de se détacher des processus qui l’utilisent. Cela permet à la DLL de propre ressources allouées pour le processus actuel. Une fois la fonction de point d’entrée retournée, le module de bibliothèque est supprimé de l’espace d’adressage du processus actuel.

Permet AfxLoadLibrary de mapper un module DLL.

Veillez à utiliser AfxFreeLibrary et AfxLoadLibrary (au lieu des fonctions FreeLibrary Win32 et LoadLibrary) si votre application utilise plusieurs threads. L’utilisation AfxLoadLibrary et AfxFreeLibrary la garantie que le code de démarrage et d’arrêt qui s’exécute lorsque la DLL d’extension MFC est chargée et déchargée n’endommage pas l’état MFC global.

Exemple

Consultez l’exemple pour AfxLoadLibrary.

Spécifications

En-têteafxdll_.h

AfxGetApp

Le pointeur retourné par cette fonction peut être utilisé pour accéder aux informations d’application telles que le code de distribution de messages principal ou la fenêtre la plus haute.

CWinApp* AFXAPI AfxGetApp();

Valeur de retour

Pointeur vers l’objet unique CWinApp de l’application.

Notes

Si cette méthode retourne NULL, il peut indiquer que la fenêtre principale de l’application n’a pas encore été entièrement initialisée. Il peut également indiquer un problème.

Exemple

// Print the application's executable filename.
TRACE(_T("Executable filename = %s\n"), AfxGetApp()->m_pszExeName);

Spécifications

En-têteafxwin.h

AfxGetAppName

La chaîne retournée peut être utilisée pour les messages de diagnostic ou comme racine pour les noms de chaînes temporaires.

LPCTSTR AFXAPI AfxGetAppName();

Valeur de retour

Chaîne terminée par null contenant le nom de l’application.

Exemple

// Print the application name to the debugger output window.
TRACE(_T("Application name is %s\n"), AfxGetAppName());

Spécifications

En-têteafxwin.h

AfxGetInstanceHandle

Cette fonction vous permet de récupérer le handle d’instance de l’application actuelle.

HINSTANCE  AFXAPI AfxGetInstanceHandle();

Valeur de retour

À HINSTANCE l’instance actuelle de l’application. Si elle est appelée à partir d’une DLL liée à la version USRDLL de MFC, une HINSTANCE DLL est retournée.

Notes

AfxGetInstanceHandle retourne toujours le HINSTANCE fichier exécutable (.EXE), sauf s’il est appelé à partir d’une DLL liée à la version USRDLL de MFC. Dans ce cas, elle retourne une HINSTANCE dll.

Exemple

// Print the application instance handle to the debugger output window.
TRACE(_T("Application instance handle is 0x%0X\n"), AfxGetInstanceHandle());

Spécifications

En-têteafxwin.h

AfxGetMainWnd

Si votre application est un serveur OLE, appelez cette fonction pour récupérer un pointeur vers la fenêtre principale active de l’application. Utilisez ce résultat au lieu de faire directement référence au m_pMainWnd membre de l’objet d’application.

CWnd* AFXAPI AfxGetMainWnd();

Valeur de retour

Retourne un pointeur vers l’objet de fenêtre frame qui contient le document actif sur place, si le serveur possède un objet actif à l’intérieur d’un conteneur actif.

S’il n’existe aucun objet actif sur place dans un conteneur ou si votre application n’est pas un serveur OLE, cette fonction retourne l’objet m_pMainWnd de votre application.

Si AfxGetMainWnd elle est appelée à partir du thread principal de l’application, elle retourne la fenêtre principale de l’application en fonction des règles ci-dessus. Si la fonction est appelée à partir d’un thread secondaire dans l’application, la fonction retourne la fenêtre principale associée au thread qui a effectué l’appel.

Notes

Si votre application n’est pas un serveur OLE, l’appel de cette fonction équivaut directement à faire référence au m_pMainWnd membre de votre objet d’application.

Exemple

//The following line send a WM_CLOSE message
//   to the Application's main window. This will cause the
//   Application to exit.
AfxGetMainWnd()->PostMessage(WM_CLOSE, 0, 0);

Spécifications

En-têteafxwin.h

AfxGetPerUserRegistration

Utilisez cette fonction pour déterminer si l’application redirige l’accès au Registre vers le HKEY_CURRENT_USER nœud (HKCU).

BOOL AFXAPI AfxGetPerUserRegistration();

Valeur de retour

TRUE indique que les informations de Registre sont dirigées vers le HKCU nœud. FALSE indique que l’application écrit des informations de Registre dans le nœud par défaut. Le nœud par défaut est HKEY_CLASSES_ROOT (HKCR).

Notes

Si vous activez la redirection de Registre, l’infrastructure redirige l’accès vers HKCRHKEY_CURRENT_USER\Software\Classes. Seuls les frameworks MFC et ATL sont affectés par la redirection.

Pour modifier si l’application redirige l’accès au Registre, utilisez AfxSetPerUserRegistration.

Spécifications

En-têteafxstat_.h

AfxGetResourceHandle

Utilisez le HINSTANCE handle retourné par cette fonction pour accéder directement aux ressources de l’application, par exemple dans les appels à la fonction FindResourceWindows.

extern HINSTANCE  AfxGetResourceHandle();

Valeur de retour

Handle HINSTANCE où les ressources par défaut de l’application sont chargées.

Exemple

//Load the menu specifying the module handle where resource is to be
//found & resource ID
HMENU hMenu = ::LoadMenu(AfxGetResourceHandle(), MAKEINTRESOURCE(IDR_MAINFRAME));

Spécifications

En-têteafxwin.h

AfxGetThread

Appelez cette fonction pour obtenir un pointeur vers l’objet CWinThread représentant le thread en cours d’exécution.

CWinThread* AfxGetThread();

Valeur de retour

Pointeur vers le thread en cours d’exécution ; sinon NULL.

Notes

Doit être appelé à partir du thread.

Remarque

Si vous transférez un projet MFC appelant AfxGetThread à partir de Visual C++ versions 4.2, 5.0 ou 6.0, AfxGetThread appelle AfxGetApp si aucun thread n’est trouvé. Dans les versions plus récentes du compilateur, AfxGetThread retourne NULL si aucun thread n’a été trouvé. Si vous souhaitez que le thread d’application, vous devez appeler AfxGetApp.

Exemple

//Print the current thread ID in the Debug Window
TRACE(_T("Current Thread ID = 0x%X\n"), AfxGetThread()->m_nThreadID);

Spécifications

En-têteafxwin.h

AfxInitRichEdit

Appelez cette fonction pour initialiser le contrôle d’édition enrichi (version 1.0) de l’application.

BOOL AFXAPI AfxInitRichEdit();

Notes

Cette fonction est fournie pour la compatibilité descendante. Les nouvelles applications doivent utiliser AfxInitRichEdit2.

AfxInitRichEdit charge RICHED32.DLL pour initialiser la version 1.0 du contrôle d’édition enrichi. Pour utiliser la version 2.0 et 3.0 du contrôle d’édition enrichi, RICHED20.DLL vous devez être chargé. Il est chargé en effectuant un appel à AfxInitRichEdit2.

Pour mettre à jour des contrôles de modification enrichis dans les applications Visual C++ existantes vers la version 2.0, ouvrez le fichier . Fichier RC sous forme de texte, remplacez le nom de classe de chaque contrôle d’édition enrichi par «RICHEDIT » par «RichEdit20a ». Remplacez ensuite l’appel par AfxInitRichEditAfxInitRichEdit2.

Cette fonction initialise également la bibliothèque de contrôles communs, si la bibliothèque n’a pas déjà été initialisée pour le processus. Si vous utilisez le contrôle de modification enrichi directement à partir de votre application MFC, appelez cette fonction pour vous assurer que MFC a correctement initialisé le runtime de contrôle d’édition enrichi. Si vous appelez la Create méthode de CRichEditCtrl, CRichEditViewou CRichEditDoc, vous n’avez généralement pas besoin d’appeler cette fonction, mais dans certains cas, il peut être nécessaire.

Spécifications

En-têteafxwin.h

AfxInitRichEdit2

Appelez cette fonction pour initialiser le contrôle d’édition enrichi (version 2.0 et ultérieure) de l’application.

BOOL AFXAPI AfxInitRichEdit2();

Notes

Appelez cette fonction pour charger et initialiser la RICHED20.DLL version 2.0 du contrôle d’édition enrichi. Si vous appelez la Create méthode de CRichEditCtrl, CRichEditViewou CRichEditDoc, vous n’avez généralement pas besoin d’appeler cette fonction, mais dans certains cas, il peut être nécessaire.

Spécifications

En-têteafxwin.h

AfxIsExtendedFrameClass

Détermine si la fenêtre donnée est un objet frame étendu.

Syntaxe

BOOL AFXAPI AfxIsExtendedFrameClass( CWnd* pWnd );

Paramètres

pWnd
[in] Pointeur vers un objet dérivé de CWnd.

Valeur de retour

TRUE si la fenêtre fournie est un objet frame étendu ; sinon FALSE.

Notes

Cette méthode retourne TRUE si pWnd dérive de l’une des classes suivantes :

  • CFrameWndEx

  • CMDIFrameWndEx

  • COleIPFrameWndEx

  • COleDocIPFrameWndEx

  • CMDIChildWndEx

Cette méthode est utile quand vous devez valider le fait qu’un paramètre de fonction ou de méthode est une fenêtre frame étendue.

Spécifications

En-têteafxpriv.h:

AfxIsMFCToolBar

Détermine si la fenêtre donnée est un objet de barre d’outils.

Syntaxe

BOOL AFXAPI AfxIsMFCToolBar(CWnd* pWnd);

Paramètres

pWnd
[in] Pointeur vers un objet dérivé de CWnd.

Valeur de retour

TRUE si la fenêtre fournie est un objet de barre d’outils ; sinon FALSE.

Notes

Cette méthode retourne TRUE si pWnd elle dérive de CMFCToolBar. Cette méthode est utile lorsque vous devez valider qu’une fonction ou un paramètre de méthode est un CMFCToolBar objet.

Spécifications

En-têteafxpriv.h:

AfxKeyboardManager

Pointeur vers le gestionnaire de clavier global.

Syntaxe

CKeyboardManager* afxKeyboardManager;

Spécifications

En-têteafxkeyboardmanager.h:

AfxLoadLibrary

Permet AfxLoadLibrary de mapper un module DLL.

HINSTANCE AFXAPI AfxLoadLibrary(LPCTSTR lpszModuleName);

Paramètres

lpszModuleName
Pointe vers une chaîne terminée par null qui contient le nom du module (fichier .DLL ou .EXE). Le nom spécifié est le nom du fichier du module.

Si la chaîne spécifie un chemin d’accès, mais que le fichier n’existe pas dans le répertoire spécifié, la fonction échoue.

Si un chemin d’accès n’est pas spécifié et que l’extension de nom de fichier est omise, la DLL par défaut est ajoutée. Toutefois, la chaîne de nom de fichier peut inclure un caractère de point de fin (.) pour indiquer que le nom du module n’a pas d’extension. Quand aucun chemin d’accès n’est spécifié, la fonction utilise l’ordre de recherche pour les applications de bureau.

Valeur de retour

Si la fonction réussit, la valeur de retour est un handle pour le module. En cas d’échec, la valeur de retour est NULL.

Notes

Elle retourne un handle qui peut être utilisé pour GetProcAddress obtenir l’adresse d’une fonction DLL. AfxLoadLibrary peut également être utilisé pour mapper d’autres modules exécutables.

Chaque processus conserve un nombre de références pour chaque module de bibliothèque chargé. Ce nombre de références est incrémenté chaque fois AfxLoadLibrary qu’il est appelé et décrémenté chaque fois AfxFreeLibrary qu’il est appelé. Lorsque le nombre de références atteint zéro, le module n’est pas mappé à partir de l’espace d’adressage du processus appelant et le handle n’est plus valide.

Veillez à utiliser AfxLoadLibrary et AfxFreeLibrary (au lieu des fonctions LoadLibrary Win32 et FreeLibrary) si votre application utilise plusieurs threads et s’il charge dynamiquement une DLL d’extension MFC. L’utilisation AfxLoadLibrary et AfxFreeLibrary l’insures que le code de démarrage et d’arrêt qui s’exécute lorsque la DLL d’extension MFC est chargée et déchargée n’endommage pas l’état MFC global.

L’utilisation AfxLoadLibrary dans une application vous oblige à lier dynamiquement la version DLL de MFC. Le fichier d’en-tête pour AfxLoadLibrary, Afxdll_.hest inclus uniquement si MFC est lié à l’application en tant que DLL. Cette exigence est par conception, car vous devez établir un lien vers la version DLL de MFC pour utiliser ou créer des DLL d’extension MFC.

Exemple

// The following shows how to create a MDI based application
// using a generic CView derived class that is implemented in
// a dynamically loaded MFC Extension DLL.

typedef CRuntimeClass *(*GETDLLVIEW)();

BOOL CUserApp::InitInstance()
{
   // Standard Application Wizard generated initialization excluded.
// Register the application's document templates.  Document templates
//  serve as the connection between documents, frame windows and views

//Load MFC Extension DLL based view class.
m_hViewDll = AfxLoadLibrary(szMyViewDllPath);
if (!m_hViewDll)
{
   CString str;
   str.Format(_T("Error: Cannot find component %s"), szMyViewDllPath);
   AfxMessageBox(str);
   return FALSE;
}

GETDLLVIEW GetMyView = (GETDLLVIEW)GetProcAddress(m_hViewDll, "GetMyView");
ASSERT(GetMyView != NULL);

CMultiDocTemplate *pDocTemplate;
pDocTemplate = new CMultiDocTemplate(IDR_NVC_MFC_DLLUserTYPE,
                                     RUNTIME_CLASS(CUserDoc),
                                     RUNTIME_CLASS(CChildFrame), // custom MDI child frame
                                     GetMyView());
if (!pDocTemplate)
   return FALSE;
AddDocTemplate(pDocTemplate);

// Standard Application Wizard generated initialization excluded.
return TRUE;
}

int CUserApp::ExitInstance()
{
   if (NULL != m_hViewDll)
   {
      AfxFreeLibrary(m_hViewDll);
      m_hViewDll = NULL;
   }

   return CWinApp::ExitInstance();
}

Spécifications

En-têteafxdll_.h

AfxLoadLibraryEx

Permet AfxLoadLibraryEx de mapper un module DLL.

HINSTANCE AFXAPI AfxLoadLibraryEx(LPCTSTR lpFileName, HANDLE hFile, DWORD dwFlags);

Paramètres

lpFileName
Pointe vers une chaîne terminée par null qui contient le nom du module (fichier .DLL ou .EXE). Le nom spécifié est le nom du fichier du module.

Si la chaîne spécifie un chemin d’accès, mais que le fichier n’existe pas dans le répertoire spécifié, la fonction échoue.

Si un chemin d’accès n’est pas spécifié et que l’extension de nom de fichier est omise, la DLL par défaut est ajoutée. Toutefois, la chaîne de nom de fichier peut inclure un caractère de point de fin (.) pour indiquer que le nom du module n’a pas d’extension. Quand aucun chemin d’accès n’est spécifié, la fonction utilise l’ordre de recherche pour les applications de bureau.

hFile
Ce paramètre est réservé à un usage futur. Il doit être NULL.

dwFlags
Action à entreprendre lors du chargement du module. Si aucun indicateur n’est spécifié, le comportement de cette fonction est identique à la AfxLoadLibrary fonction. Les valeurs possibles de ce paramètre sont décrites dans la LoadLibraryEx documentation.

Valeur de retour

Si la fonction réussit, la valeur de retour est un handle pour le module. En cas d’échec, la valeur de retour est NULL.

Notes

AfxLoadLibraryEx retourne un handle qui peut être utilisé pour GetProcAddress obtenir l’adresse d’une fonction DLL. AfxLoadLibraryEx peut également être utilisé pour mapper d’autres modules exécutables.

Chaque processus conserve un nombre de références pour chaque module de bibliothèque chargé. Ce nombre de références est incrémenté chaque fois AfxLoadLibraryEx qu’il est appelé et décrémenté chaque fois AfxFreeLibrary qu’il est appelé. Lorsque le nombre de références atteint zéro, le module n’est pas mappé à partir de l’espace d’adressage du processus appelant et le handle n’est plus valide.

Veillez à utiliser AfxLoadLibraryEx et AfxFreeLibrary (au lieu des fonctions LoadLibraryEx Win32 et FreeLibrary) si votre application utilise plusieurs threads et s’il charge dynamiquement une DLL d’extension MFC. L’utilisation AfxLoadLibraryEx et AfxFreeLibrary la garantie que le code de démarrage et d’arrêt qui s’exécute lorsque la DLL d’extension MFC est chargée et déchargée n’endommage pas l’état MFC global.

L’utilisation AfxLoadLibraryEx dans une application vous oblige à lier dynamiquement la version DLL de MFC. Le fichier d’en-tête pour AfxLoadLibraryEx, Afxdll_.hest inclus uniquement si MFC est lié à l’application en tant que DLL. Cette exigence est par conception, car vous devez établir un lien vers la version DLL de MFC pour utiliser ou créer des DLL d’extension MFC.

Spécifications

En-têteafxdll_.h

AfxMenuTearOffManager

Pointeur vers le gestionnaire de menus déchirurant global.

Syntaxe

CMenuTearOffManager* g_pTearOffMenuManager;

Spécifications

En-têteafxmenutearoffmanager.h:

AfxMouseManager

Pointeur vers le gestionnaire de souris global.

Syntaxe

CMouseManager* afxMouseManager;

Spécifications

En-têteafxmousemanager.h:

AfxRegisterClass

Utilisez cette fonction pour inscrire des classes de fenêtre dans une DLL qui utilise MFC.

BOOL AFXAPI AfxRegisterClass(WNDCLASS* lpWndClass);

Paramètres

lpWndClass
Pointeur vers une WNDCLASS structure contenant des informations sur la classe de fenêtre à inscrire. Pour plus d’informations sur cette structure, consultez le Kit de développement logiciel (SDK) Windows.

Valeur de retour

TRUE si la classe est correctement inscrite ; sinon FALSE.

Notes

Si vous utilisez cette fonction, la classe est automatiquement annulée lorsque la DLL est déchargée.

Dans les builds non DLL, l’identificateur AfxRegisterClass est défini en tant que macro qui est mappée à la fonction RegisterClassWindows, car les classes inscrites dans une application sont automatiquement annulées. Si vous utilisez AfxRegisterClass au lieu de RegisterClass, votre code peut être utilisé sans modifier à la fois dans une application et dans une DLL.

Exemple

// Register your unique class name that you wish to use
WNDCLASS wndcls;

memset(&wndcls, 0, sizeof(WNDCLASS));   // start with NULL defaults

wndcls.style = CS_DBLCLKS | CS_HREDRAW | CS_VREDRAW;

//you can specify your own window procedure
wndcls.lpfnWndProc = ::DefWindowProc; 
wndcls.hInstance = AfxGetInstanceHandle();
wndcls.hIcon = LoadIcon(wndcls.hInstance, MAKEINTRESOURCE(IDI_MYICON));
wndcls.hCursor = LoadCursor(wndcls.hInstance, MAKEINTRESOURCE(IDC_ARROW));
wndcls.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1);
wndcls.lpszMenuName = NULL;

// Specify your own class name for using FindWindow later
wndcls.lpszClassName = _T("MyNewClass");

// Register the new class and trace if it fails
if(!AfxRegisterClass(&wndcls))
{
   TRACE("Class Registration Failed\n");
}

Spécifications

En-têteafxwin.h

AfxRegisterWndClass

Permet d'enregistrer vos propres classes de fenêtre.

LPCTSTR AFXAPI AfxRegisterWndClass(
    UINT nClassStyle,
    HCURSOR hCursor = 0,
    HBRUSH hbrBackground = 0,
    HICON hIcon = 0);

Paramètres

nClassStyle
Spécifie le style de classe Windows ou la combinaison de styles, créé à l’aide de l’opérateur bitwise-OR (|) pour la classe de fenêtre. Pour obtenir la liste des styles de classe, consultez la WNDCLASS structure dans le Kit de développement logiciel (SDK) Windows. Si NULL, les valeurs par défaut sont définies comme suit :

  • Définit le style CS_DBLCLKSde la souris sur , qui envoie des messages en double-clic à la procédure de fenêtre lorsque l’utilisateur double-clique sur la souris.

  • Définit le style de curseur de flèche sur la norme IDC_ARROWWindows .

  • Définit le pinceau NULLd’arrière-plan sur , de sorte que la fenêtre n’efface pas son arrière-plan.

  • Définit l'icône du logo Windows standard en forme de drapeau flottant.

hCursor
Spécifie un handle pour la ressource curseur à installer dans chaque fenêtre créée à partir de la classe de fenêtre. Si vous utilisez la valeur par défaut 0, vous obtenez le curseur standard IDC_ARROW .

hbrBackground
Spécifie un handle de la ressource pinceau à installer dans chaque fenêtre créée à partir de la classe de fenêtre. Si vous utilisez la valeur par défaut 0, vous disposez d’un NULL pinceau d’arrière-plan et, par défaut, votre fenêtre n’efface pas son arrière-plan lors du traitement WM_ERASEBKGND.

hIcon
Spécifie un handle de la ressource icône à installer dans chaque fenêtre créée à partir de la classe de fenêtre. Si vous utilisez la valeur par défaut de 0, vous obtenez l’icône de logo Windows avec indicateur standard.

Valeur de retour

Chaîne de caractères se terminant par null et contenant le nom de la classe. Vous pouvez passer ce nom de classe à la Create fonction membre dans CWnd ou à d’autres classes dérivées **CWnd-*** pour créer une fenêtre. Le nom est généré par la bibliothèque MFC.

Remarque

La valeur de retour est un pointeur vers une mémoire tampon statique. Pour enregistrer cette chaîne, attribuez-lui une variable CString.

Notes

La bibliothèque MFC stocke automatiquement plusieurs classes de fenêtre standard pour vous. Appelez cette fonction si vous souhaitez stocker vos propres classes de fenêtre.

Le nom enregistré pour une classe par AfxRegisterWndClass dépend uniquement des paramètres. Si vous appelez AfxRegisterWndClass plusieurs fois avec des paramètres identiques, seule une classe lors du premier appel est enregistrée. Les appels ultérieurs vers des AfxRegisterWndClass paramètres identiques retournent le nom de classe déjà inscrit.

Si vous appelez AfxRegisterWndClass plusieurs CWndclasses dérivées avec des paramètres identiques, au lieu d’obtenir une classe de fenêtre distincte pour chaque classe, chaque classe partage la même classe de fenêtre. Ce partage peut entraîner des problèmes si le style de CS_CLASSDC classe est utilisé. Au lieu de plusieurs CS_CLASSDC classes de fenêtre, vous ne trouverez qu’une CS_CLASSDC seule classe de fenêtre. Toutes les fenêtres C++ qui utilisent cette classe partagent le même contrôleur de domaine. Pour éviter ce problème, appelez AfxRegisterClass pour inscrire la classe.

Reportez-vous à la note technique TN001 : Inscription de classe de fenêtre pour plus d’informations sur l’inscription de classe de fenêtre et la AfxRegisterWndClass fonction.

Exemple

CString strMyClass;

// load stock cursor, brush, and icon for
// my own window class

try
{
   strMyClass = AfxRegisterWndClass(
       CS_VREDRAW | CS_HREDRAW,
       ::LoadCursor(NULL, IDC_ARROW),
       (HBRUSH)::GetStockObject(WHITE_BRUSH),
       ::LoadIcon(NULL, IDI_APPLICATION));
}
catch (CResourceException *pEx)
{
   AfxMessageBox(_T("Couldn't register class! (Already registered?)"));
   pEx->Delete();
}

Spécifications

En-têteafxwin.h

AfxSetPerUserRegistration

Définit si l’application redirige l’accès au Registre vers le HKEY_CURRENT_USER nœud (HKCU).

void AFXAPI AfxSetPerUserRegistration(BOOL bEnable);

Paramètres

bEnable
[in] TRUE indique que les informations de Registre sont dirigées vers le HKCU nœud. FALSE indique que l’application écrit des informations de Registre dans le nœud par défaut. Le nœud par défaut est HKEY_CLASSES_ROOT (HKCR).

Notes

Avant Windows Vista, les applications qui ont accédé au Registre utilisent couramment le HKEY_CLASSES_ROOT nœud. Toutefois, avec les systèmes d’exploitation Windows Vista ou ultérieurs, vous devez exécuter une application en mode avec élévation de privilèges pour écrire HKCRdans .

Cette méthode permet à votre application de lire et d’écrire dans le Registre sans s’exécuter en mode avec élévation de privilèges. Il fonctionne en redirigeant l’accès au Registre à partir de HKCRHKCU. Pour plus d'informations, consultez Linker Property Pages.

Si vous activez la redirection de Registre, l’infrastructure redirige l’accès vers HKCRHKEY_CURRENT_USER\Software\Classes. Seuls les frameworks MFC et ATL sont affectés par la redirection.

L’implémentation par défaut accède au Registre sous HKCR.

Spécifications

En-têteafxstat_.h

AfxSetResourceHandle

Utilisez cette fonction pour définir le HINSTANCE handle qui détermine où les ressources par défaut de l’application sont chargées.

void AFXAPI AfxSetResourceHandle(HINSTANCE hInstResource);

Paramètres

hInstResource
Instance ou handle de module vers un fichier .EXE ou DLL à partir duquel les ressources de l’application sont chargées.

Exemple

// This code is taken from CMyApp::InitInstance
HINSTANCE hRes = NULL;
hRes = LoadLibrary(_T("Resource.dll"));
if (hRes)
   AfxSetResourceHandle(hRes);

Spécifications

En-têteafxwin.h

AfxShellManager

Pointeur vers le gestionnaire d’interpréteur de commandes global.

Syntaxe

CShellManager* afxShellManager;

Spécifications

En-têteafxshellmanager.h:

AfxSocketInit

Appelez cette fonction dans votre CWinApp::InitInstance remplacement pour initialiser les sockets Windows.

BOOL AfxSocketInit(WSADATA* lpwsaData = NULL);

Paramètres

lpwsaData
Pointeur vers une WSADATA structure. Si lpwsaData ce n’est pas le NULLcas, l’adresse de la WSADATA structure est remplie par l’appel à WSAStartup. Cette fonction garantit également qu’elle WSACleanup est appelée pour vous avant la fin de l’application.

Valeur de retour

Une valeur différente de zéro si la fonction réussit ; sinon, 0.

Notes

Lorsque vous utilisez des sockets MFC dans des threads secondaires dans une application MFC liée statiquement, vous devez appeler AfxSocketInit chaque thread qui utilise des sockets pour initialiser les bibliothèques de sockets. Par défaut, AfxSocketInit il est appelé uniquement dans le thread principal.

Spécifications

En-têteafxsock.h

AfxUserToolsManager

Pointeur vers le gestionnaire d’outils utilisateur global.

Syntaxe

CUserToolsManager* afxUserToolsManager;

Spécifications

En-têteafxusertoolsmanager.h:

AfxWinInit

Cette fonction est appelée par la fonction fournie WinMain par MFC, dans le cadre de l’initialisation CWinApp d’une application basée sur l’interface utilisateur graphique, pour initialiser MFC.

BOOL AFXAPI AfxWinInit(
    HINSTANCE hInstance,
    HINSTANCE hPrevInstance,
    LPTSTR lpCmdLine,
    int nCmdShow);

Paramètres

hInstance
Handle du module en cours d’exécution.

hPrevInstance
Handle vers une instance précédente de l’application. Pour une application Win32, ce paramètre est toujours NULL.

lpCmdLine
Pointe vers une chaîne terminée par null spécifiant la ligne de commande de l’application.

nCmdShow
Spécifie la façon dont la fenêtre principale d’une application GUI s’affiche.

Notes

Pour une application console, qui n’utilise pas la fonction fournie par WinMain MFC, vous devez appeler AfxWinInit directement pour initialiser MFC.

Si vous vous appelez AfxWinInit vous-même, vous devez déclarer une instance d’une CWinApp classe. Pour une application console, vous pouvez choisir de ne pas dériver votre propre classe CWinApp et utiliser plutôt une instance de CWinApp directement. Cette technique est appropriée si vous décidez de laisser toutes les fonctionnalités de votre application dans votre implémentation de main.

Remarque

Lorsqu’il crée un contexte d’activation pour un assembly, MFC utilise une ressource manifeste fournie par le module utilisateur. Le contexte d’activation est créé dans AfxWinInit. Pour plus d’informations, consultez Prise en charge des contextes d’activation dans l’état du module MFC.

Exemple

#include <afx.h>
#include <afxdb.h>

int _tmain(int /*argc*/, TCHAR * /*argv[]*/, TCHAR * /*envp[]*/)
{
   int nRetCode = 0;

   // initialize MFC and print and error on failure
   if (!AfxWinInit(::GetModuleHandle(NULL), NULL, ::GetCommandLine(), 0))
   {
      // TODO: change error code to suit your needs
      _tprintf(_T("Fatal Error: MFC initialization failed\n"));
      nRetCode = 1;
   }
   else
   {
      // try to connect to an ODBC database that doesn't exist
      // (this wouldn't work at all without initializing MFC)

      CDatabase db;
      try
      {
         db.Open(_T("This Databsae Doesn't Exist"));

         // we shouldn't realistically get here

         _tprintf_s(_T("Successful!\n")
                    _T("Closing ...\n"));
         db.Close();
         _tprintf_s(_T("Closed!"));
      }
      catch (CDBException *pEx)
      {
         // we got an exception! print an error message
         // (this wouldn't work without initializing MFC)

         TCHAR sz[1024];

         _tprintf_s(_T("Error: "));
         if (pEx->GetErrorMessage(sz, 1024))
            _tprintf_s(sz);
         else
            _tprintf_s(_T("No error message was available"));
         _tprintf_s(_T("\n"));

         pEx->Delete();

         nRetCode = 1;
      }
   }

   return nRetCode;
}

Spécifications

En-têteafxwin.h

Voir aussi

Macros et globals
CWinApp Classe
CContextMenuManager Classe
CWnd Classe
CFrameWndEx Classe
CMFCToolBar Classe
CKeyboardManager Classe
CMenuTearOffManager Classe
CMouseManager Classe
CShellManager Classe
CUserToolsManager Classe