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 CWinApp
dé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 nouveau 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 |
Mappe un module DLL et retourne un handle qui peut être utilisé pour obtenir l’adresse d’une fonction DLL. |
AfxLoadLibraryEx |
Mappe 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 optionCREATE_SUSPENDED
si vous souhaitez initialiser des données membres de l’objetCWinThread
, telles quem_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, utilisezCWinThread::ResumeThread
cette option pour démarrer le thread en cours d’exécution. Le thread ne s’exécute pas tant qu’ilCWinThread::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ête afxwin.h
AfxContextMenuManager
Pointeur vers le gestionnaire de menu contextuel global.
Syntaxe
CContextMenuManager* afxContextMenuManager;
Spécifications
En-tête : afxcontextmenumanager.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ête afxwin.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 :
Le module principal, s’il s’agit d’une DLL d’extension MFC.
Modules non système.
Modules spécifiques au langage.
Le module principal, s’il s’agit d’une DLL système.
Modules système.
Spécifications
En-tête : afxwin.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 donne à la DLL la possibilité de nettoyer les 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ête afxdll_.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ête afxwin.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ête afxwin.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ête afxwin.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ête afxwin.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 HKCR
HKEY_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ête afxstat_.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 FindResource
Windows.
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ête afxwin.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ête afxwin.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 AfxInitRichEdit
AfxInitRichEdit2
.
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
, CRichEditView
ou 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ête afxwin.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
, CRichEditView
ou 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ête afxwin.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ête : afxpriv.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ête : afxpriv.h
AfxKeyboardManager
Pointeur vers le gestionnaire de clavier global.
Syntaxe
CKeyboardManager* afxKeyboardManager;
Spécifications
En-tête : afxkeyboardmanager.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 (un 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, l’extension par défaut .DLL 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_.h
est 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ête afxdll_.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 (un 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, l’extension par défaut .DLL 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. Cela 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_.h
est 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ête afxdll_.h
AfxMenuTearOffManager
Pointeur vers le gestionnaire de menus déchirurant global.
Syntaxe
CMenuTearOffManager* g_pTearOffMenuManager;
Spécifications
En-tête : afxmenutearoffmanager.h
AfxMouseManager
Pointeur vers le gestionnaire de souris global.
Syntaxe
CMouseManager* afxMouseManager;
Spécifications
En-tête : afxmousemanager.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 RegisterClass
Windows, 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ête afxwin.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_DBLCLKS
de 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_ARROW
Windows .Définit le pinceau
NULL
d’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 CWnd
classes 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ête afxwin.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 HKCR
dans .
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 HKCR
HKCU
. Pour plus d'informations, consultez Linker Property Pages.
Si vous activez la redirection de Registre, l’infrastructure redirige l’accès vers HKCR
HKEY_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ête afxstat_.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ête afxwin.h
AfxShellManager
Pointeur vers le gestionnaire d’interpréteur de commandes global.
Syntaxe
CShellManager* afxShellManager;
Spécifications
En-tête : afxshellmanager.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 NULL
cas, 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ête afxsock.h
AfxUserToolsManager
Pointeur vers le gestionnaire d’outils utilisateur global.
Syntaxe
CUserToolsManager* afxUserToolsManager;
Spécifications
En-tête : afxusertoolsmanager.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ête afxwin.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