Anwendungsinformationen und Anwendungsverwaltung
Wenn Sie eine Anwendung schreiben, erstellen Sie ein einzelnes CWinApp
abgeleitetes Objekt. Manchmal möchten Sie informationen zu diesem Objekt von außerhalb des CWinApp
abgeleiteten 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 | Beschreibung |
---|---|
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 |
Ruft einen Zeiger auf das aktuelle CWinThread -Objekt ab. |
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 |
Zeigen Sie auf den globalen Tastatur-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 |
Zeigen Sie auf den globalen Maus-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 |
Zeigen Sie auf den globalen 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);
Parameter
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 EigenschaftCREATE_SUSPENDED
, wenn Sie Memberdaten desCWinThread
Objekts initialisieren möchten, zm_bAutoDelete
. B. elemente der abgeleiteten Klasse, bevor der Thread gestartet wird. Nach Abschluss der Initialisierung können SieCWinThread::ResumeThread
den Thread starten. Der Thread wird erst ausgeführt, wennCWinThread::ResumeThread
er aufgerufen wird.0 Starten Sie den Thread unmittelbar nach der Erstellung.
lpSecurityAttrs
Verweist auf eine SECURITY_ATTRIBUTES
Struktur, die die Sicherheitsattribute für den Thread angibt. Wenn NULL
die gleichen Sicherheitsattribute wie der Erstellungsthread verwendet werden. Weitere Informationen zu dieser Struktur finden Sie im Windows SDK.
Rückgabewert
Zeigen Sie auf das neu erstellte Threadobjekt, oder NULL
wenn ein Fehler auftritt.
Hinweise
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 AfxBeginThread
finden Sie in den Artikeln Multithreading: Erstellen von Arbeitsthreads und Multithreading: Erstellen von Benutzeroberflächenthreads.
Beispiel
Ein Beispiel hierfür finden Sie unter CSocket::Attach
.
Anforderungen
Kopfball afxwin.h
AfxContextMenuManager
Zeigen Sie auf den globalen Kontextmenü-Manager.
Syntax
CContextMenuManager* afxContextMenuManager;
Anforderungen
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);
Parameter
nExitCode
Gibt den Beendigungscode des Threads an.
bDelete
Löscht das Threadobjekt aus dem Arbeitsspeicher.
Hinweise
Muss innerhalb des Threads aufgerufen werden, um beendet zu werden.
Weitere Informationen AfxEndThread
finden Sie im Artikel Multithreading: Beenden von Threads.
Anforderungen
Kopfball afxwin.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 );
Parameter
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.
Rückgabewert
Ein Handle für das Modul, das die Ressource enthält.
Hinweise
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.
Nicht-Systemmodule.
Sprachspezifische Module.
Das Hauptmodul, wenn es sich um eine System-DLL handelt.
Systemmodule.
Anforderungen
Header: afxwin.h
AfxFreeLibrary
Sowohl für jedes geladene Bibliotheksmodul als AfxLoadLibrary
auch AfxFreeLibrary
für jedes geladene Bibliotheksmodul wird eine Referenzanzahl verwaltet.
BOOL AFXAPI AfxFreeLibrary(HINSTANCE hInstLib);
Parameter
hInstLib
Ein Handle des geladenen Bibliotheksmoduls. AfxLoadLibrary
gibt dieses Handle zurück.
Rückgabewert
TRUE
wenn die Funktion erfolgreich ist; andernfalls . FALSE
Hinweise
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.
Beispiel
Ein Beispiel hierfür finden Sie unter AfxLoadLibrary
.
Anforderungen
Kopfball afxdll_.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();
Rückgabewert
Ein Zeiger auf das einzelne CWinApp
Objekt für die Anwendung.
Hinweise
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.
Beispiel
// Print the application's executable filename.
TRACE(_T("Executable filename = %s\n"), AfxGetApp()->m_pszExeName);
Anforderungen
Kopfball afxwin.h
AfxGetAppName
Die zurückgegebene Zeichenfolge kann für Diagnosenachrichten oder als Stamm für temporäre Zeichenfolgennamen verwendet werden.
LPCTSTR AFXAPI AfxGetAppName();
Rückgabewert
Eine mit Null beendete Zeichenfolge, die den Namen der Anwendung enthält.
Beispiel
// Print the application name to the debugger output window.
TRACE(_T("Application name is %s\n"), AfxGetAppName());
Anforderungen
Kopfball afxwin.h
AfxGetInstanceHandle
Mit dieser Funktion können Sie das Instanzhandle der aktuellen Anwendung abrufen.
HINSTANCE AFXAPI AfxGetInstanceHandle();
Rückgabewert
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.
Hinweise
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.
Beispiel
// Print the application instance handle to the debugger output window.
TRACE(_T("Application instance handle is 0x%0X\n"), AfxGetInstanceHandle());
Anforderungen
Kopfball afxwin.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();
Rückgabewert
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.
Hinweise
Wenn Ihre Anwendung kein OLE-Server ist, entspricht der Aufruf dieser Funktion dem direkten Verweisen auf das m_pMainWnd
Element Ihres Anwendungsobjekts.
Beispiel
//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);
Anforderungen
Kopfball afxwin.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();
Rückgabewert
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
).
Hinweise
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
.
Anforderungen
Kopfball afxstat_.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();
Rückgabewert
Ein HINSTANCE
Handle, bei dem die Standardressourcen der Anwendung geladen werden.
Beispiel
//Load the menu specifying the module handle where resource is to be
//found & resource ID
HMENU hMenu = ::LoadMenu(AfxGetResourceHandle(), MAKEINTRESOURCE(IDR_MAINFRAME));
Anforderungen
Kopfball afxwin.h
AfxGetThread
Rufen Sie diese Funktion auf, um einen Zeiger auf das Objekt abzurufen, das CWinThread
den aktuell ausgeführten Thread darstellt.
CWinThread* AfxGetThread();
Rückgabewert
Zeiger auf den derzeit ausgeführten Thread; andernfalls NULL
.
Hinweise
Muss innerhalb des Threads aufgerufen werden.
Hinweis
Wenn Sie ein MFC-Projekt portieren, das von Visual C++-Versionen 4.2, 5.0 oder 6.0 aufgerufen AfxGetThread
wird, wird aufgerufenAfxGetApp
, AfxGetThread
wenn kein Thread gefunden wird. Gibt in neueren Versionen des Compilers zurückNULL
, AfxGetThread
wenn kein Thread gefunden wurde. Wenn Sie den Anwendungsthread benötigen, müssen Sie aufrufen AfxGetApp
.
Beispiel
//Print the current thread ID in the Debug Window
TRACE(_T("Current Thread ID = 0x%X\n"), AfxGetThread()->m_nThreadID);
Anforderungen
Kopfball afxwin.h
AfxInitRichEdit
Rufen Sie diese Funktion auf, um das Rich Edit-Steuerelement (Version 1.0) für die Anwendung zu initialisieren.
BOOL AFXAPI AfxInitRichEdit();
Hinweise
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.
Anforderungen
Kopfball afxwin.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();
Hinweise
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.
Anforderungen
Kopfball afxwin.h
AfxIsExtendedFrameClass
Bestimmt, ob das jeweilige Fenster ein erweitertes Rahmenobjekt ist.
Syntax
BOOL AFXAPI AfxIsExtendedFrameClass( CWnd* pWnd );
Parameter
pWnd
[in] Ein Zeiger auf ein Objekt, das von CWnd
.
Rückgabewert
TRUE
wenn das angegebene Fenster ein erweitertes Frameobjekt ist; andernfalls FALSE
.
Hinweise
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.
Anforderungen
Header: afxpriv.h
AfxIsMFCToolBar
Bestimmt, ob das angegebene Fenster ein Symbolleistenobjekt ist.
Syntax
BOOL AFXAPI AfxIsMFCToolBar(CWnd* pWnd);
Parameter
pWnd
[in] Ein Zeiger auf ein Objekt, das von CWnd
.
Rückgabewert
TRUE
wenn das angegebene Fenster ein Symbolleistenobjekt ist; andernfalls FALSE
.
Hinweise
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.
Anforderungen
Header: afxpriv.h
AfxKeyboardManager
Zeigen Sie auf den globalen Tastatur-Manager.
Syntax
CKeyboardManager* afxKeyboardManager;
Anforderungen
Header: afxkeyboardmanager.h
AfxLoadLibrary
Dient AfxLoadLibrary
zum Zuordnen eines DLL-Moduls.
HINSTANCE AFXAPI AfxLoadLibrary(LPCTSTR lpszModuleName);
Parameter
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.
Rückgabewert
Wenn die Funktion erfolgreich ist, ist der Rückgabewert ein Handle für das Modul. Bei Einem Fehler lautet NULL
der Rückgabewert .
Hinweise
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_.h
ist 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.
Beispiel
// 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();
}
Anforderungen
Kopfball afxdll_.h
AfxLoadLibraryEx
Dient AfxLoadLibraryEx
zum Zuordnen eines DLL-Moduls.
HINSTANCE AFXAPI AfxLoadLibraryEx(LPCTSTR lpFileName, HANDLE hFile, DWORD dwFlags);
Parameter
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.
Rückgabewert
Wenn die Funktion erfolgreich ist, ist der Rückgabewert ein Handle für das Modul. Bei Einem Fehler lautet NULL
der Rückgabewert .
Hinweise
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_.h
ist 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.
Anforderungen
Kopfball afxdll_.h
AfxMenuTearOffManager
Zeigen Sie auf den globalen Menü-Manager zum Abreißen.
Syntax
CMenuTearOffManager* g_pTearOffMenuManager;
Anforderungen
Header: afxmenutearoffmanager.h
AfxMouseManager
Zeigen Sie auf den globalen Maus-Manager.
Syntax
CMouseManager* afxMouseManager;
Anforderungen
Header: afxmousemanager.h
AfxRegisterClass
Verwenden Sie diese Funktion, um Fensterklassen in einer DLL zu registrieren, die MFC verwendet.
BOOL AFXAPI AfxRegisterClass(WNDCLASS* lpWndClass);
Parameter
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.
Rückgabewert
TRUE
wenn die Klasse erfolgreich registriert wurde; andernfalls FALSE
.
Hinweise
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 RegisterClass
zugeordnet ist, da Klassen, die in einer Anwendung registriert sind, automatisch nicht registriert werden. Wenn Sie anstelle dessen RegisterClass
verwendenAfxRegisterClass
, kann Ihr Code sowohl in einer Anwendung als auch in einer DLL ohne Änderung verwendet werden.
Beispiel
// 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");
}
Anforderungen
Kopfball afxwin.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);
Parameter
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_DBLCLKS
die Doppelklicknachrichten an die Fensterprozedur sendet, wenn der Benutzer auf die Maus doppelklickt.Legt die Pfeilcursorformatvorlage auf den Windows-Standard
IDC_ARROW
fest.Legt den Hintergrundpinsel auf
NULL
fest, 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. Wenn Sie den Standardwert von 0 verwenden, erhalten Sie den Standardcursor IDC_ARROW
.
hbrBackground
Gibt ein Handle für die Pinselressource an, die in jedem Fenster installiert werden soll, das aus der Fensterklasse erstellt wird. Wenn Sie den Standardwert von 0 verwenden, verfügen Sie über einen NULL
Hintergrundpinsel, und standardmäßig wird der Hintergrund im Fenster während der Verarbeitung WM_ERASEBKGND
nicht gelöscht.
hIcon
Gibt ein Handle für die Symbolressource an, die in jedem Fenster installiert werden soll, das aus der Fensterklasse erstellt wird. Wenn Sie die Standardeinstellung " 0" verwenden, erhalten Sie das Standardmäßige Windows-Logosymbol mit waving-Flag.
Rückgabewert
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.
Hinweis
Der Rückgabewert ist ein Zeiger auf einen statischen Puffer. Um diese Zeichenfolge zu speichern, weisen Sie sie einer CString
Variablen zu.
Hinweise
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 CWnd
abgeleitete Klassen mit identischen Parametern aufrufenAfxRegisterWndClass
, 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 AfxRegisterWndClass
Funktion finden Sie im Technischen Hinweis TN001: Window Class Registration.
Beispiel
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();
}
Anforderungen
Kopfball afxwin.h
AfxSetPerUserRegistration
Legt fest, ob die Anwendung den Registrierungszugriff auf den HKEY_CURRENT_USER
(HKCU
) Knoten umleitet.
void AFXAPI AfxSetPerUserRegistration(BOOL bEnable);
Parameter
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
).
Hinweise
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 HKCR
schreiben.
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
.
Anforderungen
Kopfball afxstat_.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);
Parameter
hInstResource
Die Instanz oder das Modul behandeln eine .EXE- oder DLL-Datei, aus der die Ressourcen der Anwendung geladen werden.
Beispiel
// This code is taken from CMyApp::InitInstance
HINSTANCE hRes = NULL;
hRes = LoadLibrary(_T("Resource.dll"));
if (hRes)
AfxSetResourceHandle(hRes);
Anforderungen
Kopfball afxwin.h
AfxShellManager
Zeigen Sie auf den globalen Shell-Manager.
Syntax
CShellManager* afxShellManager;
Anforderungen
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);
Parameter
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.
Rückgabewert
Ist ungleich null (0), wenn die Funktion erfolgreich ausgeführt wird, andernfalls null (0).
Hinweise
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.
Anforderungen
Kopfball afxsock.h
AfxUserToolsManager
Zeigen Sie auf den Manager für globale Benutzertools.
Syntax
CUserToolsManager* afxUserToolsManager;
Anforderungen
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);
Parameter
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.
Hinweise
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 main
zu belassen.
Hinweis
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.
Beispiel
#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;
}
Anforderungen
Kopfball afxwin.h
Siehe auch
Makros und Globalen
CWinApp
Klasse
CContextMenuManager
-Klasse
CWnd
Klasse
CFrameWndEx
Klasse
CMFCToolBar
Klasse
CKeyboardManager
-Klasse
CMenuTearOffManager
Klasse
CMouseManager
-Klasse
CShellManager
Klasse
CUserToolsManager
-Klasse