Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
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_SUSPENDEDStarten Sie den Thread mit einer Anhalteanzahl von 1. Verwenden Sie diese EigenschaftCREATE_SUSPENDED, wenn Sie Memberdaten desCWinThreadObjekts initialisieren möchten, zm_bAutoDelete. B. elemente der abgeleiteten Klasse, bevor der Thread gestartet wird. Nach Abschluss der Initialisierung können SieCWinThread::ResumeThreadden Thread starten. Der Thread wird erst ausgeführt, wennCWinThread::ResumeThreader 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:
Das Hauptmodul, wenn es sich um eine MFC-Erweiterungs-DLL handelt.
Non-system modules.
Language-specific modules.
Das Hauptmodul, wenn es sich um eine System-DLL handelt.
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:
CFrameWndExCMDIFrameWndExCOleIPFrameWndExCOleDocIPFrameWndExCMDIChildWndEx
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