Freigeben über


Anwendungsinformationen und Anwendungsverwaltung

Wenn Sie eine Anwendung schreiben, erstellen Sie ein einzelnes CWinAppabgeleitetes Objekt. Manchmal möchten Sie informationen zu diesem Objekt von außerhalb des CWinAppabgeleiteten Objekts abrufen. Oder Sie benötigen möglicherweise Zugriff auf andere globale "Manager"-Objekte.

Die Microsoft Foundation-Klassenbibliothek bietet die folgenden globalen Funktionen, mit denen Sie diese Aufgaben ausführen können:

Anwendungsinformations- und Verwaltungsfunktionen

Name Description
AfxBeginThread Erstellt einen neuen Thread.
AfxContextMenuManager Zeigen Sie auf den globalen Kontextmenü-Manager.
AfxEndThread Beendet den aktuellen Thread.
AfxFindResourceHandle Führt die Ressourcenkette durch und sucht eine bestimmte Ressource nach Ressourcen-ID und Ressourcentyp.
AfxFreeLibrary Erhöht die Referenzanzahl des geladenen DLL-Moduls (Dynamic Link Library). Wenn die Referenzanzahl null erreicht, wird das Modul nicht zugeordnet.
AfxGetApp Gibt einen Zeiger auf das einzelne CWinApp Objekt der Anwendung zurück.
AfxGetAppName Gibt eine Zeichenfolge zurück, die den Namen der Anwendung enthält.
AfxGetInstanceHandle Gibt eine HINSTANCE Darstellung dieser Instanz der Anwendung zurück.
AfxGetMainWnd Gibt einen Zeiger auf das aktuelle Hauptfenster einer Nicht-OLE-Anwendung oder das direkte Framefenster einer Serveranwendung zurück.
AfxGetPerUserRegistration Verwenden Sie diese Funktion, um zu bestimmen, ob die Anwendung den Registrierungszugriff auf den HKEY_CURRENT_USER Knoten (HKCU) umleitet.
AfxGetResourceHandle Gibt eine HINSTANCE an die Quelle der Standardressourcen der Anwendung zurück. Wird verwendet, um direkt auf die Ressourcen der Anwendung zuzugreifen.
AfxGetThread Retrieves a pointer to the current CWinThread object.
AfxInitRichEdit Initialisiert das Rich-Edit-Steuerelement der Version 1.0 für die Anwendung.
AfxInitRichEdit2 Initialisiert die Version 2.0 und höher das Rich-Edit-Steuerelement für die Anwendung.
AfxIsExtendedFrameClass Bestimmt, ob das jeweilige Fenster ein erweitertes Rahmenobjekt ist.
AfxIsMFCToolBar Bestimmt, ob das angegebene Fenster ein Symbolleistenobjekt ist.
AfxKeyboardManager Pointer to the global keyboard manager.
AfxLoadLibrary Ordnet ein DLL-Modul zu und gibt ein Handle zurück, das verwendet werden kann, um die Adresse einer DLL-Funktion abzurufen.
AfxLoadLibraryEx Ordnet ein DLL-Modul mithilfe der angegebenen Optionen zu und gibt ein Handle zurück, mit dem die Adresse einer DLL-Funktion abgerufen werden kann.
AfxMenuTearOffManager Zeigen Sie auf den globalen Menü-Manager zum Abreißen.
AfxMouseManager Pointer to the global mouse manager.
AfxRegisterClass Registriert eine Fensterklasse in einer DLL, die MFC verwendet.
AfxRegisterWndClass Registriert eine Windows-Fensterklasse, um die automatisch von MFC registrierten Zusätze zu ergänzen.
AfxSetPerUserRegistration Legt fest, ob die Anwendung den Registrierungszugriff auf den HKEY_CURRENT_USER (HKCU) Knoten umleitet.
AfxSetResourceHandle Legt das HINSTANCE-Handle fest, bei dem die Standardressourcen der Anwendung geladen werden.
AfxShellManager Pointer to the global shell manager.
AfxSocketInit Wird in einer CWinApp::InitInstance Außerkraftsetzung aufgerufen, um Windows Sockets zu initialisieren.
AfxUserToolsManager Zeigen Sie auf den Manager für globale Benutzertools.
AfxWinInit Wird von der vom MFC bereitgestellten WinMain Funktion als Teil der CWinApp Initialisierung einer GUI-basierten Anwendung aufgerufen, um MFC zu initialisieren. Muss direkt für Konsolenanwendungen aufgerufen werden, die MFC verwenden.

AfxBeginThread

Rufen Sie diese Funktion auf, um einen neuen Thread zu erstellen.

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);

Parameters

pfnThreadProc
Zeigt auf die Steuerungsfunktion für den Arbeitsthread. Der Zeiger kann nicht sein NULL. Diese Funktion muss wie folgt deklariert werden:

UINT __cdecl MyControllingFunction( LPVOID pParam );

pThreadClass
Das RUNTIME_CLASS objekt, das von CWinThread.

pParam
Parameter, der an die Steuerungsfunktion übergeben werden soll.

nPriority
Die Priorität, die für den Thread festgelegt werden soll. Eine vollständige Liste und Beschreibung der verfügbaren Prioritäten finden Sie im SetThreadPriority Windows SDK.

nStackSize
Gibt die Stapelgröße für den neuen Thread in Bytes an. Mit dem Wert 0 wird die Stapelgröße standardmäßig so groß wie die des erstellenden Threads.

dwCreateFlags
Gibt ein zusätzliches Flag an, das die Erstellung des Threads steuert. Dieses Flag kann einen von zwei Werten enthalten:

  • CREATE_SUSPENDED Starten Sie den Thread mit einer Anhalteanzahl von 1. Verwenden Sie diese Eigenschaft CREATE_SUSPENDED , wenn Sie Memberdaten des CWinThread Objekts initialisieren möchten, z m_bAutoDelete . B. elemente der abgeleiteten Klasse, bevor der Thread gestartet wird. Nach Abschluss der Initialisierung können Sie CWinThread::ResumeThread den Thread starten. Der Thread wird erst ausgeführt, wenn CWinThread::ResumeThread er aufgerufen wird.

  • 0 Start the thread immediately after creation.

lpSecurityAttrs
Verweist auf eine SECURITY_ATTRIBUTES Struktur, die die Sicherheitsattribute für den Thread angibt. Wenn NULLdie gleichen Sicherheitsattribute wie der Erstellungsthread verwendet werden. Weitere Informationen zu dieser Struktur finden Sie im Windows SDK.

Return Value

Zeigen Sie auf das neu erstellte Threadobjekt, oder NULL wenn ein Fehler auftritt.

Remarks

Mit der ersten Form von AfxBeginThread wird ein Arbeitsthread erstellt. Mit der zweiten Form wird ein Thread erstellt, der als Benutzeroberflächenthread oder als Arbeitsthread dienen kann.

AfxBeginThread erstellt ein neues CWinThread Objekt, ruft seine CreateThread Funktion auf, um mit der Ausführung des Threads zu beginnen, und gibt einen Zeiger auf den Thread zurück. Während der gesamten Prozedur wird überprüft, ob alle Objekte ordnungsgemäß freigegeben werden, falls ein Teil des Erstellungsprozesses fehlschlagen sollte. Um den Thread zu beenden, rufen Sie innerhalb des Threads auf AfxEndThread , oder kehren Sie von der Steuerungsfunktion des Arbeitsthreads zurück.

Multithreading muss durch die Anwendung aktiviert werden, andernfalls erzeugt diese Funktion einen Fehler. Weitere Informationen zum Aktivieren von Multithreading finden Sie unter /MD, , /MT( /LD Verwenden der Laufzeitbibliothek).

Weitere Informationen AfxBeginThreadfinden Sie in den Artikeln Multithreading: Erstellen von Arbeitsthreads und Multithreading: Erstellen von Benutzeroberflächenthreads.

Example

Ein Beispiel hierfür finden Sie unter CSocket::Attach.

Requirements

Headerafxwin.h

AfxContextMenuManager

Zeigen Sie auf den globalen Kontextmenü-Manager.

Syntax

CContextMenuManager* afxContextMenuManager;

Requirements

Header:afxcontextmenumanager.h

AfxEndThread

Rufen Sie diese Funktion auf, um den aktuell ausgeführten Thread zu beenden.

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

Parameters

nExitCode
Gibt den Beendigungscode des Threads an.

bDelete
Löscht das Threadobjekt aus dem Arbeitsspeicher.

Remarks

Muss innerhalb des Threads aufgerufen werden, um beendet zu werden.

Weitere Informationen AfxEndThreadfinden Sie im Artikel Multithreading: Beenden von Threads.

Requirements

Headerafxwin.h

AfxFindResourceHandle

Wird AfxFindResourceHandle verwendet, um die Ressourcenkette zu durchlaufen und eine bestimmte Ressource nach Ressourcen-ID und Ressourcentyp zu suchen.

Syntax

HINSTANCE AFXAPI AfxFindResourceHandle( LPCTSTR lpszName,  LPCTSTR lpszType );

Parameters

lpszName
Ein Zeiger auf eine Zeichenfolge, die die Ressourcen-ID enthält.

lpszType
Ein Zeiger auf den Ressourcentyp. Eine Liste der Ressourcentypen finden Sie im FindResource Windows SDK.

Return Value

Ein Handle für das Modul, das die Ressource enthält.

Remarks

AfxFindResourceHandle findet die spezifische Ressource und gibt ein Handle an das Modul zurück, das die Ressource enthält. Die Ressource befindet sich möglicherweise in einer beliebigen MFC-Erweiterungs-DLL, die geladen wird. AfxFindResourceHandle teilt Ihnen mit, welche Ressource sie hat.

Die Module werden in dieser Reihenfolge durchsucht:

  1. Das Hauptmodul, wenn es sich um eine MFC-Erweiterungs-DLL handelt.

  2. Non-system modules.

  3. Language-specific modules.

  4. Das Hauptmodul, wenn es sich um eine System-DLL handelt.

  5. System modules.

Requirements

Header:afxwin.h

AfxFreeLibrary

Sowohl für jedes geladene Bibliotheksmodul als AfxFreeLibrary auch AfxLoadLibrary für jedes geladene Bibliotheksmodul wird eine Referenzanzahl verwaltet.

BOOL AFXAPI AfxFreeLibrary(HINSTANCE hInstLib);

Parameters

hInstLib
Ein Handle des geladenen Bibliotheksmoduls. AfxLoadLibrary gibt dieses Handle zurück.

Return Value

TRUEwenn die Funktion erfolgreich ist; andernfalls . FALSE

Remarks

AfxFreeLibrary erhöht die Referenzanzahl des geladenen DLL-Moduls (Dynamic Link Library). Wenn die Referenzanzahl null erreicht, wird das Modul aus dem Adressraum des aufrufenden Prozesses nicht zugeordnet, und der Handle ist nicht mehr gültig. Diese Verweisanzahl wird jedes Mal erhöht, wenn AfxLoadLibrary sie aufgerufen wird.

Vor dem Aufheben der Zuordnung eines Bibliotheksmoduls ermöglicht es dem System, die DLL von den prozessen zu trennen, die es verwenden. Dadurch erhält die DLL die Möglichkeit, ressourcen zu bereinigen, die für den aktuellen Prozess zugeordnet sind. Nachdem die Einstiegspunktfunktion zurückgegeben wurde, wird das Bibliotheksmodul aus dem Adressraum des aktuellen Prozesses entfernt.

Dient AfxLoadLibrary zum Zuordnen eines DLL-Moduls.

AfxFreeLibrary Verwenden Sie unbedingt und AfxLoadLibrary (anstelle der Win32-Funktionen FreeLibrary und LoadLibrary), wenn Ihre Anwendung mehrere Threads verwendet. Die Verwendung AfxLoadLibrary und AfxFreeLibrary stellt sicher, dass der Start- und Herunterfahren-Code, der ausgeführt wird, wenn die MFC-Erweiterungs-DLL geladen und entladen wird, den globalen MFC-Zustand nicht beschädigt.

Example

Ein Beispiel hierfür finden Sie unter AfxLoadLibrary.

Requirements

Headerafxdll_.h

AfxGetApp

Der von dieser Funktion zurückgegebene Zeiger kann verwendet werden, um auf Anwendungsinformationen zuzugreifen, z. B. den Hauptnachrichtenverteilungscode oder das oberste Fenster.

CWinApp* AFXAPI AfxGetApp();

Return Value

Ein Zeiger auf das einzelne CWinApp Objekt für die Anwendung.

Remarks

Wenn diese Methode zurückgegeben wird NULL, kann dies darauf hindeuten, dass das Hauptfenster der Anwendung noch nicht vollständig initialisiert wurde. Es kann auch auf ein Problem hinweisen.

Example

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

Requirements

Headerafxwin.h

AfxGetAppName

Die zurückgegebene Zeichenfolge kann für Diagnosenachrichten oder als Stamm für temporäre Zeichenfolgennamen verwendet werden.

LPCTSTR AFXAPI AfxGetAppName();

Return Value

Eine mit Null beendete Zeichenfolge, die den Namen der Anwendung enthält.

Example

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

Requirements

Headerafxwin.h

AfxGetInstanceHandle

Mit dieser Funktion können Sie das Instanzhandle der aktuellen Anwendung abrufen.

HINSTANCE  AFXAPI AfxGetInstanceHandle();

Return Value

An HINSTANCE der aktuellen Instanz der Anwendung. Wenn von einer dll aufgerufen wird, die mit der USRDLL-Version von MFC verknüpft ist, wird eine HINSTANCE an die DLL zurückgegeben.

Remarks

AfxGetInstanceHandle gibt immer die HINSTANCE ausführbare Datei (.EXE) zurück, es sei denn, sie wird aus einer DLL aufgerufen, die mit der USRDLL-Version von MFC verknüpft ist. In diesem Fall wird eine HINSTANCE an die DLL zurückgegeben.

Example

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

Requirements

Headerafxwin.h

AfxGetMainWnd

Wenn Ihre Anwendung ein OLE-Server ist, rufen Sie diese Funktion auf, um einen Zeiger auf das aktive Hauptfenster der Anwendung abzurufen. Verwenden Sie dieses Ergebnis, anstatt direkt auf das m_pMainWnd Element des Anwendungsobjekts zu verweisen.

CWnd* AFXAPI AfxGetMainWnd();

Return Value

Gibt einen Zeiger auf das Framefensterobjekt zurück, das das direkte aktive Dokument enthält, wenn der Server über ein Objekt verfügt, das innerhalb eines aktiven Containers aktiv ist.

Wenn kein Objekt vorhanden ist, das in einem Container aktiv ist oder Ihre Anwendung kein OLE-Server ist, gibt diese Funktion das m_pMainWnd Anwendungsobjekt zurück.

Wenn AfxGetMainWnd vom primären Thread der Anwendung aufgerufen wird, wird das Hauptfenster der Anwendung gemäß den oben genannten Regeln zurückgegeben. Wenn die Funktion von einem sekundären Thread in der Anwendung aufgerufen wird, gibt die Funktion das Hauptfenster zurück, das dem aufrufenden Thread zugeordnet ist.

Remarks

Wenn Ihre Anwendung kein OLE-Server ist, entspricht der Aufruf dieser Funktion dem direkten Verweisen auf das m_pMainWnd Element Ihres Anwendungsobjekts.

Example

//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);

Requirements

Headerafxwin.h

AfxGetPerUserRegistration

Verwenden Sie diese Funktion, um zu bestimmen, ob die Anwendung den Registrierungszugriff auf den HKEY_CURRENT_USER Knoten (HKCU) umleitet.

BOOL AFXAPI AfxGetPerUserRegistration();

Return Value

TRUE gibt an, dass die Registrierungsinformationen an den HKCU Knoten weitergeleitet werden. FALSE gibt an, dass die Anwendung Registrierungsinformationen in den Standardknoten schreibt. Der Standardknoten ist HKEY_CLASSES_ROOT (HKCR).

Remarks

Wenn Sie die Registrierungsumleitung aktivieren, leitet das Framework den Zugriff von HKCR zu HKEY_CURRENT_USER\Software\Classes. Nur die MFC- und ATL-Frameworks sind von der Umleitung betroffen.

Um zu ändern, ob die Anwendung den Registrierungszugriff umleitet, verwenden Sie AfxSetPerUserRegistration.

Requirements

Headerafxstat_.h

AfxGetResourceHandle

Verwenden Sie das HINSTANCE von dieser Funktion zurückgegebene Handle, um direkt auf die Ressourcen der Anwendung zuzugreifen, z. B. in Aufrufen der Windows-Funktion FindResource.

extern HINSTANCE  AfxGetResourceHandle();

Return Value

Ein HINSTANCE Handle, bei dem die Standardressourcen der Anwendung geladen werden.

Example

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

Requirements

Headerafxwin.h

AfxGetThread

Rufen Sie diese Funktion auf, um einen Zeiger auf das Objekt abzurufen, das CWinThread den aktuell ausgeführten Thread darstellt.

CWinThread* AfxGetThread();

Return Value

Zeiger auf den derzeit ausgeführten Thread; andernfalls NULL.

Remarks

Muss innerhalb des Threads aufgerufen werden.

Note

Wenn Sie ein MFC-Projekt portieren, das von Visual C++-Versionen 4.2, 5.0 oder 6.0 aufgerufen AfxGetThread wird, wird aufgerufenAfxGetThread, AfxGetApp wenn kein Thread gefunden wird. Gibt in neueren Versionen des Compilers zurückAfxGetThread, NULL wenn kein Thread gefunden wurde. Wenn Sie den Anwendungsthread benötigen, müssen Sie aufrufen AfxGetApp.

Example

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

Requirements

Headerafxwin.h

AfxInitRichEdit

Rufen Sie diese Funktion auf, um das Rich Edit-Steuerelement (Version 1.0) für die Anwendung zu initialisieren.

BOOL AFXAPI AfxInitRichEdit();

Remarks

Diese Funktion wird aus Gründen der Abwärtskompatibilität bereitgestellt. Neue Anwendungen sollten verwendet werden AfxInitRichEdit2.

AfxInitRichEdit wird geladen RICHED32.DLL , um Version 1.0 des Rich-Edit-Steuerelements zu initialisieren. Um Version 2.0 und 3.0 des Rich Edit-Steuerelements zu verwenden, RICHED20.DLL muss geladen werden. Sie wird geladen, indem Sie einen Anruf tätigen AfxInitRichEdit2.

Um Rich-Edit-Steuerelemente in vorhandenen Visual C++-Anwendungen auf Version 2.0 zu aktualisieren, öffnen Sie die . RC-Datei als Text, ändern Sie den Klassennamen jedes Rich-Edit-Steuerelements von "RICHEDIT" in "RichEdit20a". Ersetzen Sie dann den Anruf AfxInitRichEdit durch AfxInitRichEdit2.

Diese Funktion initialisiert auch die allgemeine Steuerelementbibliothek, wenn die Bibliothek noch nicht für den Prozess initialisiert wurde. Wenn Sie das Rich-Edit-Steuerelement direkt aus Ihrer MFC-Anwendung verwenden, rufen Sie diese Funktion auf, um sicherzustellen, dass MFC die Rich Edit Control Runtime ordnungsgemäß initialisiert hat. Wenn Sie die Create Methode von CRichEditCtrl, CRichEditView, oder CRichEditDoc, aufrufen, müssen Sie diese Funktion in der Regel nicht aufrufen, aber in einigen Fällen kann es erforderlich sein.

Requirements

Headerafxwin.h

AfxInitRichEdit2

Rufen Sie diese Funktion auf, um das Rich Edit-Steuerelement (Version 2.0 und höher) für die Anwendung zu initialisieren.

BOOL AFXAPI AfxInitRichEdit2();

Remarks

Rufen Sie diese Funktion auf, um die RICHED20.DLL Version 2.0 des Rich-Edit-Steuerelements zu laden und zu initialisieren. Wenn Sie die Create Methode von CRichEditCtrl, CRichEditView, oder CRichEditDoc, aufrufen, müssen Sie diese Funktion in der Regel nicht aufrufen, aber in einigen Fällen kann es erforderlich sein.

Requirements

Headerafxwin.h

AfxIsExtendedFrameClass

Bestimmt, ob das jeweilige Fenster ein erweitertes Rahmenobjekt ist.

Syntax

BOOL AFXAPI AfxIsExtendedFrameClass( CWnd* pWnd );

Parameters

pWnd
[in] Ein Zeiger auf ein Objekt, das von CWnd.

Return Value

TRUE wenn das angegebene Fenster ein erweitertes Frameobjekt ist; andernfalls FALSE.

Remarks

Diese Methode gibt TRUE zurück, wenn pWnd von einer der folgenden Klassen abgeleitet ist:

  • CFrameWndEx

  • CMDIFrameWndEx

  • COleIPFrameWndEx

  • COleDocIPFrameWndEx

  • CMDIChildWndEx

Diese Methode ist nützlich, wenn Sie überprüfen müssen, ob ein Funktions- oder Methodenparameter ein erweitertes Rahmenfenster ist.

Requirements

Header:afxpriv.h

AfxIsMFCToolBar

Bestimmt, ob das angegebene Fenster ein Symbolleistenobjekt ist.

Syntax

BOOL AFXAPI AfxIsMFCToolBar(CWnd* pWnd);

Parameters

pWnd
[in] Ein Zeiger auf ein Objekt, das von CWnd.

Return Value

TRUE wenn das angegebene Fenster ein Symbolleistenobjekt ist; andernfalls FALSE.

Remarks

Diese Methode gibt zurück TRUE , wenn pWnd sie von CMFCToolBar. Diese Methode ist nützlich, wenn Sie überprüfen müssen, ob es sich bei einem Funktions- oder Methodenparameter um ein CMFCToolBar Objekt handelt.

Requirements

Header:afxpriv.h

AfxKeyboardManager

Pointer to the global keyboard manager.

Syntax

CKeyboardManager* afxKeyboardManager;

Requirements

Header:afxkeyboardmanager.h

AfxLoadLibrary

Dient AfxLoadLibrary zum Zuordnen eines DLL-Moduls.

HINSTANCE AFXAPI AfxLoadLibrary(LPCTSTR lpszModuleName);

Parameters

lpszModuleName
Verweist auf eine mit Null beendete Zeichenfolge, die den Namen des Moduls enthält (entweder eine .DLL oder .EXE Datei). Der angegebene Name ist der Dateiname des Moduls.

Wenn die Zeichenfolge einen Pfad angibt, die Datei aber nicht im angegebenen Verzeichnis vorhanden ist, schlägt die Funktion fehl.

Wenn kein Pfad angegeben und die Dateinamenerweiterung weggelassen wird, wird die Standarderweiterung .DLL angefügt. Die Dateinamenzeichenfolge kann jedoch ein nachfolgendes Punktzeichen (.) enthalten, um anzugeben, dass der Modulname keine Erweiterung hat. Wenn kein Pfad angegeben ist, verwendet die Funktion die Suchreihenfolge für Desktopanwendungen.

Return Value

Wenn die Funktion erfolgreich ist, ist der Rückgabewert ein Handle für das Modul. Bei Einem Fehler lautet NULLder Rückgabewert .

Remarks

Es gibt ein Handle zurück, das verwendet GetProcAddress werden kann, um die Adresse einer DLL-Funktion abzurufen. AfxLoadLibrary kann auch verwendet werden, um andere ausführbare Module zuzuordnen.

Jeder Prozess verwaltet eine Referenzanzahl für jedes geladene Bibliotheksmodul. Diese Bezugsanzahl wird jedes Mal erhöht, wenn AfxLoadLibrary sie aufgerufen wird und jedes Mal AfxFreeLibrary erhöht wird, wenn sie aufgerufen wird. Wenn die Referenzanzahl null erreicht, wird das Modul aus dem Adressraum des aufrufenden Prozesses nicht zugeordnet, und der Handle ist nicht mehr gültig.

AfxLoadLibrary Verwenden Sie unbedingt und AfxFreeLibrary (anstelle der Win32-Funktionen LoadLibrary und FreeLibrary), wenn Ihre Anwendung mehrere Threads verwendet, und wenn sie dynamisch eine MFC-Erweiterungs-DLL lädt. Die Verwendung AfxLoadLibrary und AfxFreeLibrary stellt sicher, dass der Start- und Herunterfahren-Code, der ausgeführt wird, wenn die MFC-Erweiterungs-DLL geladen und entladen wird, den globalen MFC-Zustand nicht beschädigt.

Die Verwendung AfxLoadLibrary in einer Anwendung erfordert, dass Sie dynamisch eine Verknüpfung mit der DLL-Version von MFC herstellen. Die Headerdatei für AfxLoadLibrary, Afxdll_.hist nur enthalten, wenn MFC mit der Anwendung als DLL verknüpft ist. Diese Anforderung ist entwurfsbedingt, da Sie eine Verknüpfung mit der DLL-Version von MFC herstellen müssen, um MFC-Erweiterungs-DLLs zu verwenden oder zu erstellen.

Example

// 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();
}

Requirements

Headerafxdll_.h

AfxLoadLibraryEx

Dient AfxLoadLibraryEx zum Zuordnen eines DLL-Moduls.

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

Parameters

lpFileName
Verweist auf eine mit Null beendete Zeichenfolge, die den Namen des Moduls enthält (entweder eine .DLL oder .EXE Datei). Der angegebene Name ist der Dateiname des Moduls.

Wenn die Zeichenfolge einen Pfad angibt, die Datei aber nicht im angegebenen Verzeichnis vorhanden ist, schlägt die Funktion fehl.

Wenn kein Pfad angegeben und die Dateinamenerweiterung weggelassen wird, wird die Standarderweiterung .DLL angefügt. Die Dateinamenzeichenfolge kann jedoch ein nachfolgendes Punktzeichen (.) enthalten, um anzugeben, dass der Modulname keine Erweiterung hat. Wenn kein Pfad angegeben ist, verwendet die Funktion die Suchreihenfolge für Desktopanwendungen.

hFile
Dieser Parameter ist für die zukünftige Verwendung reserviert. Muss ein NULL sein.

dwFlags
Die Aktion, die beim Laden des Moduls ausgeführt werden soll. Wenn keine Kennzeichnungen angegeben werden, ist das Verhalten dieser Funktion identisch mit der AfxLoadLibrary Funktion. Die möglichen Werte dieses Parameters werden in der LoadLibraryEx Dokumentation beschrieben.

Return Value

Wenn die Funktion erfolgreich ist, ist der Rückgabewert ein Handle für das Modul. Bei Einem Fehler lautet NULLder Rückgabewert .

Remarks

AfxLoadLibraryEx gibt ein Handle zurück, das verwendet GetProcAddress werden kann, um die Adresse einer DLL-Funktion abzurufen. AfxLoadLibraryEx kann auch verwendet werden, um andere ausführbare Module zuzuordnen.

Jeder Prozess verwaltet eine Referenzanzahl für jedes geladene Bibliotheksmodul. Diese Bezugsanzahl wird jedes Mal erhöht, wenn AfxLoadLibraryEx sie aufgerufen wird und jedes Mal AfxFreeLibrary erhöht wird, wenn sie aufgerufen wird. Wenn die Referenzanzahl null erreicht, wird das Modul aus dem Adressraum des aufrufenden Prozesses nicht zugeordnet, und der Handle ist nicht mehr gültig.

AfxLoadLibraryEx Verwenden Sie unbedingt und AfxFreeLibrary (anstelle der Win32-Funktionen LoadLibraryEx und FreeLibrary), wenn Ihre Anwendung mehrere Threads verwendet und wenn sie eine MFC-Erweiterungs-DLL dynamisch lädt. Die Verwendung AfxLoadLibraryEx und AfxFreeLibrary stellt sicher, dass der Start- und Herunterfahren-Code, der ausgeführt wird, wenn die MFC-Erweiterungs-DLL geladen und entladen wird, den globalen MFC-Zustand nicht beschädigt.

Die Verwendung AfxLoadLibraryEx in einer Anwendung erfordert, dass Sie dynamisch eine Verknüpfung mit der DLL-Version von MFC herstellen. Die Headerdatei für AfxLoadLibraryEx, Afxdll_.hist nur enthalten, wenn MFC mit der Anwendung als DLL verknüpft ist. Diese Anforderung ist entwurfsbedingt, da Sie eine Verknüpfung mit der DLL-Version von MFC herstellen müssen, um MFC-Erweiterungs-DLLs zu verwenden oder zu erstellen.

Requirements

Headerafxdll_.h

AfxMenuTearOffManager

Zeigen Sie auf den globalen Menü-Manager zum Abreißen.

Syntax

CMenuTearOffManager* g_pTearOffMenuManager;

Requirements

Header:afxmenutearoffmanager.h

AfxMouseManager

Pointer to the global mouse manager.

Syntax

CMouseManager* afxMouseManager;

Requirements

Header:afxmousemanager.h

AfxRegisterClass

Verwenden Sie diese Funktion, um Fensterklassen in einer DLL zu registrieren, die MFC verwendet.

BOOL AFXAPI AfxRegisterClass(WNDCLASS* lpWndClass);

Parameters

lpWndClass
Zeigen Sie auf eine WNDCLASS Struktur, die Informationen zur zu registrierenden Fensterklasse enthält. Weitere Informationen zu dieser Struktur finden Sie im Windows SDK.

Return Value

TRUE wenn die Klasse erfolgreich registriert wurde; andernfalls FALSE.

Remarks

Wenn Sie diese Funktion verwenden, wird die Registrierung der Klasse automatisch aufgehoben, wenn die DLL entladen wird.

In Nicht-DLL-Builds wird der AfxRegisterClass Bezeichner als Makro definiert, das der Windows-Funktion RegisterClasszugeordnet ist, da Klassen, die in einer Anwendung registriert sind, automatisch nicht registriert werden. Wenn Sie anstelle dessen AfxRegisterClassverwendenRegisterClass, kann Ihr Code sowohl in einer Anwendung als auch in einer DLL ohne Änderung verwendet werden.

Example

// 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");
}

Requirements

Headerafxwin.h

AfxRegisterWndClass

Ermöglicht es Ihnen, Ihre eigenen Fensterklassen zu registrieren.

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

Parameters

nClassStyle
Gibt den Windows-Klassenstil oder die Kombination von Formatvorlagen an, die mit dem Bitwise-OR (|)-Operator für die Fensterklasse erstellt werden. Eine Liste der Klassenstile finden Sie in der WNDCLASS Struktur im Windows SDK. Wenn NULL, werden die Standardwerte wie folgt festgelegt:

  • Legt die Mausart fest , CS_DBLCLKSdie Doppelklicknachrichten an die Fensterprozedur sendet, wenn der Benutzer auf die Maus doppelklickt.

  • Legt die Pfeilcursorformatvorlage auf den Windows-Standard IDC_ARROWfest.

  • Legt den Hintergrundpinsel auf NULLfest, sodass das Fenster den Hintergrund nicht löscht.

  • Legt das Symbol auf das Standardmäßige Windows-Logosymbol mit waving-Flag fest.

hCursor
Gibt ein Handle für die Cursorressource an, die in jedem Fenster installiert werden soll, das aus der Fensterklasse erstellt wird. If you use the default of 0, you'll get the standard IDC_ARROW cursor.

hbrBackground
Gibt ein Handle für die Pinselressource an, die in jedem Fenster installiert werden soll, das aus der Fensterklasse erstellt wird. If you use the default of 0, you'll have a NULL background brush, and by default, your window won't erase its background while processing WM_ERASEBKGND.

hIcon
Gibt ein Handle für die Symbolressource an, die in jedem Fenster installiert werden soll, das aus der Fensterklasse erstellt wird. If you use the default of 0, you'll get the standard, waving-flag Windows logo icon.

Return Value

Eine mit Null beendete Zeichenfolge, die den Klassennamen enthält. Sie können diesen Klassennamen an die Create Memberfunktion in CWnd oder andereCWnd- ****abgeleitete Klassen übergeben, um ein Fenster zu erstellen. Der Name wird von der Microsoft Foundation Class Library generiert.

Note

Der Rückgabewert ist ein Zeiger auf einen statischen Puffer. Um diese Zeichenfolge zu speichern, weisen Sie sie einer CString Variablen zu.

Remarks

Die Microsoft Foundation-Klassenbibliothek registriert automatisch mehrere Standardfensterklassen für Sie. Rufen Sie diese Funktion auf, wenn Sie Ihre eigenen Fensterklassen registrieren möchten.

Der für eine Klasse registrierte Name hängt ausschließlich von AfxRegisterWndClass den Parametern ab. Wenn Sie mehrere Male mit identischen Parametern aufrufen AfxRegisterWndClass , registriert sie nur eine Klasse für den ersten Aufruf. Spätere Aufrufe AfxRegisterWndClass mit identischen Parametern geben den bereits registrierten Klassennamen zurück.

Wenn Sie mehrere AfxRegisterWndClassabgeleitete Klassen mit identischen Parametern aufrufenCWnd, statt eine separate Fensterklasse für jede Klasse abzurufen, teilt jede Klasse dieselbe Fensterklasse. Diese Freigabe kann Probleme verursachen, wenn die CS_CLASSDC Klassenformatvorlage verwendet wird. Anstelle mehrerer CS_CLASSDC Fensterklassen haben Sie nur eine CS_CLASSDC Fensterklasse. Alle C++-Fenster, die diese Klasse verwenden, verwenden denselben DC. Um dieses Problem zu vermeiden, rufen Sie AfxRegisterClass auf, um die Klasse zu registrieren.

Weitere Informationen zur Fensterklassenregistrierung und zur Funktion finden Sie im Technischen Hinweis AfxRegisterWndClass.

Example

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();
}

Requirements

Headerafxwin.h

AfxSetPerUserRegistration

Legt fest, ob die Anwendung den Registrierungszugriff auf den HKEY_CURRENT_USER (HKCU) Knoten umleitet.

void AFXAPI AfxSetPerUserRegistration(BOOL bEnable);

Parameters

bEnable
[in] TRUE gibt an, dass die Registrierungsinformationen an den HKCU Knoten weitergeleitet werden. FALSE gibt an, dass die Anwendung Registrierungsinformationen in den Standardknoten schreibt. Der Standardknoten ist HKEY_CLASSES_ROOT (HKCR).

Remarks

Vor Windows Vista verwendeten Anwendungen, die häufig auf die Registrierung zugegriffen haben, den HKEY_CLASSES_ROOT Knoten. Bei Windows Vista oder höheren Betriebssystemen müssen Sie jedoch eine Anwendung im Modus mit erhöhten Rechten ausführen, um zu HKCRschreiben.

Mit dieser Methode kann Ihre Anwendung die Registrierung lesen und schreiben, ohne im Modus mit erhöhten Rechten ausgeführt zu werden. Es funktioniert durch Umleiten des Registrierungszugriffs von HKCR zu HKCU. Weitere Informationen finden Sie unter Linker Property Pages.

Wenn Sie die Registrierungsumleitung aktivieren, leitet das Framework den Zugriff von HKCR zu HKEY_CURRENT_USER\Software\Classes. Nur die MFC- und ATL-Frameworks sind von der Umleitung betroffen.

Die Standardimplementierung greift auf die Registrierung unter HKCR.

Requirements

Headerafxstat_.h

AfxSetResourceHandle

Verwenden Sie diese Funktion, um das HINSTANCE Handle festzulegen, das bestimmt, wo die Standardressourcen der Anwendung geladen werden.

void AFXAPI AfxSetResourceHandle(HINSTANCE hInstResource);

Parameters

hInstResource
Die Instanz oder das Modul behandeln eine .EXE- oder DLL-Datei, aus der die Ressourcen der Anwendung geladen werden.

Example

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

Requirements

Headerafxwin.h

AfxShellManager

Pointer to the global shell manager.

Syntax

CShellManager* afxShellManager;

Requirements

Header:afxshellmanager.h

AfxSocketInit

Rufen Sie diese Funktion in Ihrer CWinApp::InitInstance Außerkraftsetzung auf, um Windows Sockets zu initialisieren.

BOOL AfxSocketInit(WSADATA* lpwsaData = NULL);

Parameters

lpwsaData
Ein Zeiger auf eine WSADATA Struktur. Wenn lpwsaData nicht gleich NULL, wird die Adresse der WSADATA Struktur durch den Aufruf von WSAStartup. Diese Funktion stellt außerdem sicher, dass sie WSACleanup vor dem Beenden der Anwendung aufgerufen wird.

Return Value

Ist ungleich null (0), wenn die Funktion erfolgreich ausgeführt wird, andernfalls null (0).

Remarks

Wenn Sie MFC-Sockets in sekundären Threads in einer statisch verknüpften MFC-Anwendung verwenden, müssen Sie in jedem Thread aufrufen AfxSocketInit , der Sockets zum Initialisieren der Socketbibliotheken verwendet. Standardmäßig AfxSocketInit wird nur im primären Thread aufgerufen.

Requirements

Headerafxsock.h

AfxUserToolsManager

Zeigen Sie auf den Manager für globale Benutzertools.

Syntax

CUserToolsManager* afxUserToolsManager;

Requirements

Header:afxusertoolsmanager.h

AfxWinInit

Diese Funktion wird von der MFC-bereitgestellten WinMain Funktion als Teil der CWinApp Initialisierung einer GUI-basierten Anwendung aufgerufen, um MFC zu initialisieren.

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

Parameters

hInstance
Das Handle des derzeit ausgeführten Moduls.

hPrevInstance
Ein Handle zu einer vorherigen Instanz der Anwendung. Bei einer Win32-basierten Anwendung ist dieser Parameter immer NULL.

lpCmdLine
Verweist auf eine mit Null beendete Zeichenfolge, die die Befehlszeile für die Anwendung angibt.

nCmdShow
Gibt an, wie das Hauptfenster einer GUI-Anwendung angezeigt wird.

Remarks

Für eine Konsolenanwendung, die die von MFC bereitgestellte WinMain Funktion nicht verwendet, müssen Sie direkt aufrufen AfxWinInit , um MFC zu initialisieren.

Wenn Sie sich selbst aufrufen AfxWinInit , sollten Sie eine Instanz einer CWinApp Klasse deklarieren. Bei einer Konsolenanwendung können Sie ihre eigene Klasse CWinApp nicht ableiten und stattdessen eine Instanz direkt CWinApp verwenden. Diese Technik ist geeignet, wenn Sie sich entschließen, alle Funktionen für Ihre Anwendung in Ihrer Implementierung mainzu belassen.

Note

Wenn ein Aktivierungskontext für eine Assembly erstellt wird, verwendet MFC eine Manifestressource, die vom Benutzermodul bereitgestellt wird. Der Aktivierungskontext wird in AfxWinInit. Weitere Informationen finden Sie unter Unterstützung für Aktivierungskontexte im MFC-Modulstatus.

Example

#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;
}

Requirements

Headerafxwin.h

See also

Makros und Globalen
CWinApp Klasse
CContextMenuManager Klasse
CWnd Klasse
CFrameWndEx Klasse
CMFCToolBar Klasse
CKeyboardManager Klasse
CMenuTearOffManager Klasse
CMouseManager Klasse
CShellManager Klasse
CUserToolsManager Klasse