Delen via


Toepassingsinformatie en -beheer

Wanneer u een toepassing schrijft, maakt u één CWinApp-afgeleide object. Soms wilt u mogelijk informatie over dit object ophalen van buiten het CWinApp-afgeleide object. Of mogelijk hebt u toegang nodig tot andere globale 'manager'-objecten.

De Microsoft Foundation Class Library biedt de volgende globale functies om u te helpen deze taken uit te voeren:

Toepassingsinformatie en beheerfuncties

Name Description
AfxBeginThread Hiermee maakt u een nieuwe thread.
AfxContextMenuManager Aanwijzer naar de globale contextmenubeheer.
AfxEndThread Hiermee wordt de huidige thread beëindigd.
AfxFindResourceHandle Hiermee wordt de resourceketen begeleid en wordt een specifieke resource op resource-id en resourcetype gevonden.
AfxFreeLibrary Hiermee wordt het aantal verwijzingen van de geladen DLL-module (Dynamic Link Library) afgetrokken. Wanneer het aantal verwijzingen nul bereikt, wordt de module niet toegewezen.
AfxGetApp Hiermee wordt een aanwijzer geretourneerd naar het enkelvoudige CWinApp object van de toepassing.
AfxGetAppName Retourneert een tekenreeks die de naam van de toepassing bevat.
AfxGetInstanceHandle Retourneert een HINSTANCE weergave van dit exemplaar van de toepassing.
AfxGetMainWnd Retourneert een aanwijzer naar het huidige hoofdvenster van een niet-OLE-toepassing of het in-place framevenster van een servertoepassing.
AfxGetPerUserRegistration Gebruik deze functie om te bepalen of de toepassing registertoegang omleidt tot het HKEY_CURRENT_USER (HKCU) knooppunt.
AfxGetResourceHandle Retourneert een HINSTANCE naar de bron van de standaardbronnen van de toepassing. Gebruik deze functie om rechtstreeks toegang te krijgen tot de resources van de toepassing.
AfxGetThread Retrieves a pointer to the current CWinThread object.
AfxInitRichEdit Initialiseert het uitgebreide besturingselement voor bewerken van versie 1.0 voor de toepassing.
AfxInitRichEdit2 Initialiseert het besturingselement voor bewerken van versie 2.0 en hoger voor de toepassing.
AfxIsExtendedFrameClass Bepaalt of het opgegeven venster een uitgebreid frameobject is.
AfxIsMFCToolBar Bepaalt of het opgegeven venster een werkbalkobject is.
AfxKeyboardManager Pointer to the global keyboard manager.
AfxLoadLibrary Wijst een DLL-module toe en retourneert een ingang die kan worden gebruikt om het adres van een DLL-functie te verkrijgen.
AfxLoadLibraryEx Wijst een DLL-module toe met behulp van de opgegeven opties en retourneert een ingang die kan worden gebruikt om het adres van een DLL-functie te verkrijgen.
AfxMenuTearOffManager Wijs de globale menumanager aan.
AfxMouseManager Pointer to the global mouse manager.
AfxRegisterClass Registreert een vensterklasse in een DLL die gebruikmaakt van MFC.
AfxRegisterWndClass Registreert een Windows-vensterklasse om de vensterklassen die automatisch door MFC zijn geregistreerd, aan te vullen.
AfxSetPerUserRegistration Hiermee stelt u in of de toepassing registertoegang omleidt tot het HKEY_CURRENT_USER (HKCU) knooppunt.
AfxSetResourceHandle Hiermee stelt u de HINSTANCE-ingang in waarbij de standaardbronnen van de toepassing worden geladen.
AfxShellManager Pointer to the global shell manager.
AfxSocketInit Wordt aangeroepen in een CWinApp::InitInstance onderdrukking om Windows Sockets te initialiseren.
AfxUserToolsManager Wijs de globale manager van gebruikershulpprogramma's aan.
AfxWinInit Aangeroepen door de door MFC geleverde WinMain functie, als onderdeel van de CWinApp initialisatie van een op GUI gebaseerde toepassing, om MFC te initialiseren. Moet rechtstreeks worden aangeroepen voor consoletoepassingen die gebruikmaken van MFC.

AfxBeginThread

Roep deze functie aan om een nieuwe thread te maken.

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
Verwijst naar de besturingsfunctie voor de werkrolthread. De aanwijzer kan niet zijn NULL. Deze functie moet als volgt worden gedeclareerd:

UINT __cdecl MyControllingFunction( LPVOID pParam );

pThreadClass
Het RUNTIME_CLASS object dat is afgeleid van CWinThread.

pParam
Parameter die moet worden doorgegeven aan de besturingsfunctie.

nPriority
De prioriteit die moet worden ingesteld voor de thread. Zie de Windows SDK voor een volledige lijst en beschrijving van de beschikbare prioriteiten SetThreadPriority .

nStackSize
Hiermee geeft u de grootte in bytes van de stack voor de nieuwe thread. Als 0, wordt de grootte van de stack standaard ingesteld op dezelfde groottestack als de makende thread.

dwCreateFlags
Hiermee geeft u een extra vlag op waarmee het maken van de thread wordt bepaald. Deze vlag kan een van de volgende twee waarden bevatten:

  • CREATE_SUSPENDED Start de thread met een onderbrekingsaantal van één. Gebruik CREATE_SUSPENDED deze optie als u lidgegevens van het CWinThread object, zoals m_bAutoDelete of leden van uw afgeleide klasse, wilt initialiseren voordat de thread wordt uitgevoerd. Zodra de initialisatie is voltooid, kunt CWinThread::ResumeThread u de thread starten die wordt uitgevoerd. De thread wordt pas uitgevoerd als CWinThread::ResumeThread deze wordt aangeroepen.

  • 0 Start the thread immediately after creation.

lpSecurityAttrs
Verwijst naar een SECURITY_ATTRIBUTES structuur die de beveiligingskenmerken voor de thread aangeeft. Als NULLdezelfde beveiligingskenmerken als de makende thread worden gebruikt. Zie de Windows SDK voor meer informatie over deze structuur.

Return Value

Wijs het zojuist gemaakte threadobject aan of NULL als er een fout optreedt.

Remarks

De eerste vorm van het maken van AfxBeginThread een werkrolthread. In het tweede formulier wordt een thread gemaakt die kan fungeren als een gebruikersinterfacethread of als werkrolthread.

AfxBeginThread maakt een nieuw CWinThread object, roept CreateThread de bijbehorende functie aan om de thread uit te voeren en retourneert een aanwijzer naar de thread. Tijdens de procedure worden controles uitgevoerd om ervoor te zorgen dat alle objecten correct worden vrijgegeven als een deel van het creëren mislukt. Als u de thread wilt beëindigen, roept AfxEndThread u aan vanuit de thread of keert u terug vanuit de besturingsfunctie van de werkrolthread.

Multithreading moet worden ingeschakeld door de toepassing; anders mislukt deze functie. Zie , ( /MT/LD Runtimebibliotheek gebruiken) voor meer informatie over het inschakelen van multithreading/MD.

Zie de artikelen Multithreading: Worker Threads en Multithreading maken: User-Interface Threads maken voor meer informatieAfxBeginThread.

Example

Zie het voorbeeld voor CSocket::Attach.

Requirements

Headerafxwin.h

AfxContextMenuManager

Aanwijzer naar de globale contextmenubeheer.

Syntax

CContextMenuManager* afxContextMenuManager;

Requirements

Header:afxcontextmenumanager.h

AfxEndThread

Roep deze functie aan om de momenteel uitgevoerde thread te beëindigen.

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

Parameters

nExitCode
Hiermee geeft u de afsluitcode van de thread.

bDelete
Hiermee verwijdert u het threadobject uit het geheugen.

Remarks

Moet worden aangeroepen vanuit de thread om te worden beëindigd.

Zie het artikel Multithreading: Terminating Threads voor meer informatieAfxEndThread.

Requirements

Headerafxwin.h

AfxFindResourceHandle

Gebruik AfxFindResourceHandle dit om de resourceketen te doorlopen en een specifieke resource te zoeken op resource-id en resourcetype.

Syntax

HINSTANCE AFXAPI AfxFindResourceHandle( LPCTSTR lpszName,  LPCTSTR lpszType );

Parameters

lpszName
Een aanwijzer naar een tekenreeks die de resource-id bevat.

lpszType
Een aanwijzer naar het type resource. Zie de Windows SDK voor een lijst met resourcetypen FindResource .

Return Value

Een ingang naar de module die de resource bevat.

Remarks

AfxFindResourceHandle zoekt de specifieke resource en retourneert een ingang naar de module die de resource bevat. De resource kan zich in een DLL van de MFC-extensie bevinden die is geladen. AfxFindResourceHandle geeft aan welke resource de resource heeft.

De modules worden in deze volgorde doorzocht:

  1. De hoofdmodule, als het een MFC-extensie-DLL is.

  2. Non-system modules.

  3. Language-specific modules.

  4. De hoofdmodule, als het een systeem-DLL is.

  5. System modules.

Requirements

Header:afxwin.h

AfxFreeLibrary

Zowel AfxFreeLibrary als AfxLoadLibrary onderhoud van een referentieaantal voor elke geladen bibliotheekmodule.

BOOL AFXAPI AfxFreeLibrary(HINSTANCE hInstLib);

Parameters

hInstLib
Een ingang van de geladen bibliotheekmodule. AfxLoadLibrary retourneert deze ingang.

Return Value

TRUE als de functie slaagt; anders, FALSE.

Remarks

AfxFreeLibrary hiermee wordt het aantal verwijzingen van de geladen DLL-module (Dynamic Link Library) afgetrokken. Wanneer het aantal verwijzingen nul bereikt, wordt de module niet toegewezen vanuit de adresruimte van het aanroepproces en is de ingang niet meer geldig. Dit verwijzingsaantal wordt telkens verhoogd wanneer AfxLoadLibrary deze wordt aangeroepen.

Voordat u een bibliotheekmodule loskoppelt, kan het DLL-bestand loskoppelen van de processen die deze gebruiken. Dit geeft de DLL de mogelijkheid om resources op te schonen die zijn toegewezen voor het huidige proces. Nadat de invoerpuntfunctie is geretourneerd, wordt de bibliotheekmodule verwijderd uit de adresruimte van het huidige proces.

Gebruik AfxLoadLibrary deze module om een DLL-module toe te wijzen.

Zorg ervoor dat u meerdere threads gebruikt AfxFreeLibrary en AfxLoadLibrary (in plaats van de Win32-functies FreeLibrary en LoadLibrary) als uw toepassing meerdere threads gebruikt. Het gebruik AfxLoadLibrary en AfxFreeLibrary zorgt ervoor dat de opstart- en afsluitcode die wordt uitgevoerd wanneer de DLL van de MFC-extensie wordt geladen en verwijderd, de globale MFC-status niet beschadigd.

Example

Zie het voorbeeld voor AfxLoadLibrary.

Requirements

Headerafxdll_.h

AfxGetApp

De aanwijzer die door deze functie wordt geretourneerd, kan worden gebruikt voor toegang tot toepassingsgegevens, zoals de belangrijkste berichtverzendingscode of het bovenste venster.

CWinApp* AFXAPI AfxGetApp();

Return Value

Een aanwijzer naar het object CWinApp voor de toepassing.

Remarks

Als deze methode wordt geretourneerd NULL, kan dit erop wijzen dat het hoofdvenster van de toepassing nog niet volledig is geïnitialiseerd. Het kan ook duiden op een probleem.

Example

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

Requirements

Headerafxwin.h

AfxGetAppName

De geretourneerde tekenreeks kan worden gebruikt voor diagnostische berichten of als hoofdmap voor tijdelijke tekenreeksnamen.

LPCTSTR AFXAPI AfxGetAppName();

Return Value

Een door null beëindigde tekenreeks met de naam van de toepassing.

Example

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

Requirements

Headerafxwin.h

AfxGetInstanceHandle

Met deze functie kunt u de exemplaarhandgreep van de huidige toepassing ophalen.

HINSTANCE  AFXAPI AfxGetInstanceHandle();

Return Value

Een HINSTANCE naar het huidige exemplaar van de toepassing. Als de aanroepen vanuit een DLL die is gekoppeld aan de USRDLL-versie van MFC, wordt er een HINSTANCE aan de DLL geretourneerd.

Remarks

AfxGetInstanceHandle retourneert altijd het HINSTANCE uitvoerbare bestand (.EXE), tenzij het wordt aangeroepen vanuit een DLL die is gekoppeld aan de USRDLL-versie van MFC. In dit geval wordt er een HINSTANCE geretourneerd naar het DLL-bestand.

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

Als uw toepassing een OLE-server is, roept u deze functie aan om een aanwijzer op te halen naar het actieve hoofdvenster van de toepassing. Gebruik dit resultaat in plaats van rechtstreeks te verwijzen naar het m_pMainWnd lid van het toepassingsobject.

CWnd* AFXAPI AfxGetMainWnd();

Return Value

Retourneert een aanwijzer naar het framevensterobject dat het actieve document in de plaats bevat, als de server een object heeft dat actief is in een actieve container.

Als er geen object is dat in-place actief is binnen een container of als uw toepassing geen OLE-server is, retourneert deze functie het m_pMainWnd toepassingsobject.

Als AfxGetMainWnd deze wordt aangeroepen vanuit de primaire thread van de toepassing, wordt het hoofdvenster van de toepassing geretourneerd volgens de bovenstaande regels. Als de functie wordt aangeroepen vanuit een secundaire thread in de toepassing, retourneert de functie het hoofdvenster dat is gekoppeld aan de thread die de aanroep heeft gedaan.

Remarks

Als uw toepassing geen OLE-server is, is het aanroepen van deze functie gelijk aan het rechtstreeks verwijzen naar het m_pMainWnd lid van uw toepassingsobject.

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

Gebruik deze functie om te bepalen of de toepassing registertoegang omleidt tot het HKEY_CURRENT_USER (HKCU) knooppunt.

BOOL AFXAPI AfxGetPerUserRegistration();

Return Value

TRUE geeft aan dat de registergegevens naar het HKCU knooppunt worden omgeleid. FALSE geeft aan dat de toepassing registergegevens naar het standaardknooppunt schrijft. Het standaardknooppunt is HKEY_CLASSES_ROOT (HKCR).

Remarks

Als u registeromleiding inschakelt, wordt de toegang door het framework omgeleid van HKCR naar HKEY_CURRENT_USER\Software\Classes. Alleen de MFC- en ATL-frameworks worden beïnvloed door de omleiding.

Als u wilt wijzigen of de toepassing registertoegang omleidt, gebruikt u AfxSetPerUserRegistration.

Requirements

Headerafxstat_.h

AfxGetResourceHandle

Gebruik de HINSTANCE ingang die door deze functie wordt geretourneerd om rechtstreeks toegang te krijgen tot de resources van de toepassing, bijvoorbeeld in aanroepen naar de Windows-functie FindResource.

extern HINSTANCE  AfxGetResourceHandle();

Return Value

Een HINSTANCE ingang waarbij de standaardbronnen van de toepassing worden geladen.

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

Roep deze functie aan om een aanwijzer op te halen naar het CWinThread object dat de momenteel uitgevoerde thread vertegenwoordigt.

CWinThread* AfxGetThread();

Return Value

Aanwijzer naar de thread die momenteel wordt uitgevoerd; anders NULL.

Remarks

Moet worden aangeroepen vanuit de thread.

Note

Als u een MFC-project aanroept AfxGetThread vanuit Visual C++ versie 4.2, 5.0 of 6.0, AfxGetThread roept u AfxGetApp aan als er geen thread wordt gevonden. In recentere versies van de compiler wordt AfxGetThread geretourneerd NULL als er geen thread is gevonden. Als u de toepassingsthread wilt gebruiken, moet u aanroepen 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

Roep deze functie aan om het uitgebreide besturingselement voor bewerken (versie 1.0) voor de toepassing te initialiseren.

BOOL AFXAPI AfxInitRichEdit();

Remarks

Deze functie is beschikbaar voor compatibiliteit met eerdere versies. Nieuwe toepassingen moeten worden gebruikt AfxInitRichEdit2.

AfxInitRichEdit wordt geladen RICHED32.DLL om versie 1.0 van het uitgebreide besturingselement voor bewerken te initialiseren. Als u versie 2.0 en 3.0 van het uitgebreide besturingselement voor bewerken wilt gebruiken, RICHED20.DLL moet u laden. Het wordt geladen door een aanroep naar AfxInitRichEdit2.

Als u uitgebreide besturingselementen voor bewerken in bestaande Visual C++-toepassingen wilt bijwerken naar versie 2.0, opent u het . RC-bestand als tekst, wijzig de klassenaam van elk besturingselement voor rtf bewerken van 'RICHEDIT' in 'RichEdit20a'. Vervang vervolgens de aanroep door AfxInitRichEditAfxInitRichEdit2.

Met deze functie wordt ook de algemene besturingsbibliotheek geïnitialiseerd als de bibliotheek nog niet is geïnitialiseerd voor het proces. Als u het uitgebreide bewerkingsbesturingselement rechtstreeks vanuit uw MFC-toepassing gebruikt, roept u deze functie aan om ervoor te zorgen dat MFC de uitgebreide bewerkingsruntime heeft geïnitialiseerd. Als u de Create methode van CRichEditCtrl, CRichEditViewof CRichEditDoc, aanroept, hoeft u deze functie doorgaans niet aan te roepen, maar in sommige gevallen is dit mogelijk noodzakelijk.

Requirements

Headerafxwin.h

AfxInitRichEdit2

Roep deze functie aan om het uitgebreide besturingselement voor bewerken (versie 2.0 en hoger) voor de toepassing te initialiseren.

BOOL AFXAPI AfxInitRichEdit2();

Remarks

Roep deze functie aan om versie RICHED20.DLL 2.0 van het uitgebreide bewerkingsbesturingselement te laden en te initialiseren. Als u de Create methode van CRichEditCtrl, CRichEditViewof CRichEditDoc, aanroept, hoeft u deze functie doorgaans niet aan te roepen, maar in sommige gevallen is dit mogelijk noodzakelijk.

Requirements

Headerafxwin.h

AfxIsExtendedFrameClass

Bepaalt of het opgegeven venster een uitgebreid frameobject is.

Syntax

BOOL AFXAPI AfxIsExtendedFrameClass( CWnd* pWnd );

Parameters

pWnd
[in] Een aanwijzer naar een object dat is afgeleid van CWnd.

Return Value

TRUE als het opgegeven venster een uitgebreid frameobject is; anders FALSE.

Remarks

Deze methode retourneert TRUE als pWnd deze is afgeleid van een van de volgende klassen:

  • CFrameWndEx

  • CMDIFrameWndEx

  • COleIPFrameWndEx

  • COleDocIPFrameWndEx

  • CMDIChildWndEx

Deze methode is handig wanneer u moet valideren dat een functie of methodeparameter een uitgebreid framevenster is.

Requirements

Header:afxpriv.h

AfxIsMFCToolBar

Bepaalt of het opgegeven venster een werkbalkobject is.

Syntax

BOOL AFXAPI AfxIsMFCToolBar(CWnd* pWnd);

Parameters

pWnd
[in] Een aanwijzer naar een object dat is afgeleid van CWnd.

Return Value

TRUE als het opgegeven venster een werkbalkobject is; anders FALSE.

Remarks

Deze methode retourneert TRUE als pWnd deze is afgeleid van CMFCToolBar. Deze methode is handig wanneer u moet valideren dat een functie of methodeparameter een CMFCToolBar object is.

Requirements

Header:afxpriv.h

AfxKeyboardManager

Pointer to the global keyboard manager.

Syntax

CKeyboardManager* afxKeyboardManager;

Requirements

Header:afxkeyboardmanager.h

AfxLoadLibrary

Gebruik AfxLoadLibrary deze module om een DLL-module toe te wijzen.

HINSTANCE AFXAPI AfxLoadLibrary(LPCTSTR lpszModuleName);

Parameters

lpszModuleName
Verwijst naar een door null beëindigde tekenreeks die de naam van de module bevat (een .DLL of .EXE bestand). De opgegeven naam is de bestandsnaam van de module.

Als de tekenreeks een pad opgeeft, maar het bestand niet bestaat in de opgegeven map, mislukt de functie.

Als er geen pad is opgegeven en de bestandsnaamextensie wordt weggelaten, wordt de standaardextensie .DLL toegevoegd. De bestandsnaamtekenreeks kan echter een volgteken (.) bevatten om aan te geven dat de modulenaam geen extensie heeft. Wanneer er geen pad is opgegeven, gebruikt de functie de zoekvolgorde voor bureaubladtoepassingen.

Return Value

Als de functie slaagt, is de retourwaarde een ingang voor de module. Bij een fout is NULLde retourwaarde .

Remarks

Het retourneert een ingang die kan worden gebruikt GetProcAddress om het adres van een DLL-functie op te halen. AfxLoadLibrary kan ook worden gebruikt om andere uitvoerbare modules toe te wijzen.

Elk proces onderhoudt een referentieaantal voor elke geladen bibliotheekmodule. Dit aantal verwijzingen wordt steeds verhoogd wanneer AfxLoadLibrary deze wordt aangeroepen en wordt steeds afgebroken telkens AfxFreeLibrary wanneer deze wordt aangeroepen. Wanneer het aantal verwijzingen nul bereikt, wordt de module niet toegewezen vanuit de adresruimte van het aanroepproces en is de ingang niet meer geldig.

Zorg ervoor dat u AfxLoadLibrary gebruikmaakt van en AfxFreeLibrary (in plaats van de Win32-functies LoadLibrary en FreeLibrary) als uw toepassing meerdere threads gebruikt en als er dynamisch een MFC-extensie-DLL wordt geladen. Het gebruik AfxLoadLibrary en AfxFreeLibrary zorgt ervoor dat de opstart- en afsluitcode die wordt uitgevoerd wanneer de DLL van de MFC-extensie wordt geladen en wordt verwijderd, de globale MFC-status niet beschadigd.

Voor het gebruik AfxLoadLibrary in een toepassing moet u dynamisch verbinding maken met de DLL-versie van MFC. Het headerbestand voor AfxLoadLibrary, Afxdll_.his alleen opgenomen als MFC is gekoppeld aan de toepassing als DLL. Deze vereiste is standaard, omdat u een koppeling moet maken naar de DLL-versie van MFC voor het gebruik of maken van MFC-extensie-DLL's.

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

Gebruik AfxLoadLibraryEx deze module om een DLL-module toe te wijzen.

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

Parameters

lpFileName
Verwijst naar een door null beëindigde tekenreeks die de naam van de module bevat (een .DLL of .EXE bestand). De opgegeven naam is de bestandsnaam van de module.

Als de tekenreeks een pad opgeeft, maar het bestand niet bestaat in de opgegeven map, mislukt de functie.

Als er geen pad is opgegeven en de bestandsnaamextensie wordt weggelaten, wordt de standaardextensie .DLL toegevoegd. De bestandsnaamtekenreeks kan echter een volgteken (.) bevatten om aan te geven dat de modulenaam geen extensie heeft. Wanneer er geen pad is opgegeven, gebruikt de functie de zoekvolgorde voor bureaubladtoepassingen.

hFile
Deze parameter is gereserveerd voor toekomstig gebruik. Het moet zijn NULL.

dwFlags
De actie die moet worden uitgevoerd bij het laden van de module. Als er geen vlaggen zijn opgegeven, is het gedrag van deze functie identiek aan de AfxLoadLibrary functie. De mogelijke waarden van deze parameter worden beschreven in de LoadLibraryEx documentatie.

Return Value

Als de functie slaagt, is de retourwaarde een ingang voor de module. Bij een fout is NULLde retourwaarde .

Remarks

AfxLoadLibraryEx retourneert een ingang die kan worden gebruikt GetProcAddress om het adres van een DLL-functie op te halen. AfxLoadLibraryEx kan ook worden gebruikt om andere uitvoerbare modules toe te wijzen.

Elk proces onderhoudt een referentieaantal voor elke geladen bibliotheekmodule. Dit aantal verwijzingen wordt steeds verhoogd wanneer AfxLoadLibraryEx deze wordt aangeroepen en wordt steeds afgebroken telkens AfxFreeLibrary wanneer deze wordt aangeroepen. Wanneer het aantal verwijzingen nul bereikt, wordt de module niet toegewezen vanuit de adresruimte van het aanroepproces en is de ingang niet meer geldig.

Zorg ervoor dat u AfxLoadLibraryEx gebruikmaakt van en AfxFreeLibrary (in plaats van de Win32-functies LoadLibraryEx en FreeLibrary) als uw toepassing meerdere threads gebruikt en als er dynamisch een MFC-extensie-DLL wordt geladen. Het gebruik AfxLoadLibraryEx en AfxFreeLibrary zorgt ervoor dat de opstart- en afsluitcode die wordt uitgevoerd wanneer de DLL van de MFC-extensie wordt geladen en verwijderd, de globale MFC-status niet beschadigd.

Voor het gebruik AfxLoadLibraryEx in een toepassing moet u dynamisch verbinding maken met de DLL-versie van MFC. Het headerbestand voor AfxLoadLibraryEx, Afxdll_.his alleen opgenomen als MFC is gekoppeld aan de toepassing als DLL. Deze vereiste is standaard, omdat u een koppeling moet maken naar de DLL-versie van MFC voor het gebruik of maken van MFC-extensie-DLL's.

Requirements

Headerafxdll_.h

AfxMenuTearOffManager

Wijs de globale menumanager aan.

Syntax

CMenuTearOffManager* g_pTearOffMenuManager;

Requirements

Header:afxmenutearoffmanager.h

AfxMouseManager

Pointer to the global mouse manager.

Syntax

CMouseManager* afxMouseManager;

Requirements

Header:afxmousemanager.h

AfxRegisterClass

Gebruik deze functie om vensterklassen te registreren in een DLL die gebruikmaakt van MFC.

BOOL AFXAPI AfxRegisterClass(WNDCLASS* lpWndClass);

Parameters

lpWndClass
Wijs een WNDCLASS structuur aan met informatie over de vensterklasse die moet worden geregistreerd. Zie de Windows SDK voor meer informatie over deze structuur.

Return Value

TRUE als de klasse is geregistreerd; anders FALSE.

Remarks

Als u deze functie gebruikt, wordt de klasse automatisch uitgeschreven wanneer het DLL-bestand wordt verwijderd.

In niet-DLL-builds wordt de AfxRegisterClass id gedefinieerd als een macro die wordt toegewezen aan de Windows-functie RegisterClass, omdat klassen die zijn geregistreerd in een toepassing, automatisch worden uitgeschakeld. Als u AfxRegisterClass in plaats van RegisterClass, uw code kan worden gebruikt zonder dat u zowel in een toepassing als in een DLL hoeft te wijzigen.

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

Hiermee kunt u uw eigen vensterklassen registreren.

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

Parameters

nClassStyle
Hiermee geeft u de Windows-klassestijl of combinatie van stijlen op, gemaakt met behulp van de operator bitwise-OR (|) voor de vensterklasse. Zie de WNDCLASS structuur in de Windows SDK voor een lijst met klassestijlen. Als NULLde standaardwaarden als volgt zijn ingesteld:

  • Hiermee stelt u de muisstijl CS_DBLCLKSin op, waarmee dubbelklikberichten naar de vensterprocedure worden verzonden wanneer de gebruiker dubbelklikt op de muis.

  • Hiermee stelt u de stijl van de pijlcursor in op de Windows-standaard IDC_ARROW.

  • Hiermee stelt u het achtergrondborstel in op NULL, zodat het venster de achtergrond niet wist.

  • Hiermee stelt u het pictogram in op het standaardpictogram van het Windows-logo met golvende vlag.

hCursor
Hiermee geeft u een ingang voor de cursorresource die moet worden geïnstalleerd in elk venster dat is gemaakt op basis van de vensterklasse. If you use the default of 0, you'll get the standard IDC_ARROW cursor.

hbrBackground
Hiermee geeft u een ingang voor de kwastresource die moet worden geïnstalleerd in elk venster dat is gemaakt op basis van de vensterklasse. 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
Hiermee geeft u een ingang voor de pictogramresource die moet worden geïnstalleerd in elk venster dat is gemaakt op basis van de vensterklasse. If you use the default of 0, you'll get the standard, waving-flag Windows logo icon.

Return Value

Een door null beëindigde tekenreeks met de klassenaam. U kunt deze klassenaam doorgeven aan de Create lidfunctie in CWnd of andere **CWnd-**afgeleide klassen om een venster te maken. De naam wordt gegenereerd door de Microsoft Foundation Class Library.

Note

De retourwaarde is een aanwijzer naar een statische buffer. Als u deze tekenreeks wilt opslaan, wijst u deze toe aan een CString variabele.

Remarks

De Microsoft Foundation Class Library registreert automatisch verschillende standaardvensterklassen voor u. Roep deze functie aan als u uw eigen vensterklassen wilt registreren.

De naam die voor een klasse is geregistreerd, AfxRegisterWndClass is alleen afhankelijk van de parameters. Als u meerdere keren met identieke parameters aanroept AfxRegisterWndClass , wordt er alleen een klasse bij de eerste aanroep geregistreerd. Latere aanroepen met AfxRegisterWndClass identieke parameters retourneren de reeds geregistreerde klassenaam.

Als u meerdere CWndafgeleide klassen met identieke parameters aanroeptAfxRegisterWndClass, in plaats van een afzonderlijke vensterklasse voor elke klasse op te halen, deelt elke klasse dezelfde vensterklasse. Dit delen kan problemen veroorzaken als de CS_CLASSDC klassestijl wordt gebruikt. In plaats van meerdere CS_CLASSDC vensterklassen krijgt u slechts één CS_CLASSDC vensterklasse. Alle C++-vensters die gebruikmaken van die klasse delen dezelfde DC. Als u dit probleem wilt voorkomen, roept AfxRegisterClass u aan om de klasse te registreren.

Raadpleeg Technical Note TN001: Vensterklasseregistratie voor meer informatie over de registratie van vensterklassen en de AfxRegisterWndClass functie.

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

Hiermee stelt u in of de toepassing registertoegang omleidt tot het HKEY_CURRENT_USER (HKCU) knooppunt.

void AFXAPI AfxSetPerUserRegistration(BOOL bEnable);

Parameters

bEnable
[in] TRUE geeft aan dat de registergegevens naar het HKCU knooppunt worden omgeleid. FALSE geeft aan dat de toepassing registergegevens naar het standaardknooppunt schrijft. Het standaardknooppunt is HKEY_CLASSES_ROOT (HKCR).

Remarks

Vóór Windows Vista gebruikten toepassingen die toegang hebben tot het register vaak het HKEY_CLASSES_ROOT knooppunt. Met Windows Vista of latere besturingssystemen moet u echter een toepassing uitvoeren in verhoogde modus om naar te HKCRschrijven.

Met deze methode kan uw toepassing lezen en schrijven naar het register zonder in verhoogde modus uit te voeren. Het werkt door registertoegang om te leiden van HKCR naar HKCU. Zie Linker Property Pages voor meer informatie.

Als u registeromleiding inschakelt, wordt de toegang door het framework omgeleid van HKCR naar HKEY_CURRENT_USER\Software\Classes. Alleen de MFC- en ATL-frameworks worden beïnvloed door de omleiding.

De standaard implementatie heeft toegang tot het register onder HKCR.

Requirements

Headerafxstat_.h

AfxSetResourceHandle

Gebruik deze functie om de HINSTANCE ingang in te stellen die bepaalt waar de standaardbronnen van de toepassing worden geladen.

void AFXAPI AfxSetResourceHandle(HINSTANCE hInstResource);

Parameters

hInstResource
Het exemplaar of de module wordt verwerkt in een .EXE- of DLL-bestand waaruit de resources van de toepassing worden geladen.

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

Roep deze functie aan in uw CWinApp::InitInstance onderdrukking om Windows Sockets te initialiseren.

BOOL AfxSocketInit(WSADATA* lpwsaData = NULL);

Parameters

lpwsaData
Een aanwijzer naar een WSADATA structuur. Als lpwsaData dit niet gelijk is aan NULL, wordt het adres van de WSADATA structuur gevuld door de aanroep naar WSAStartup. Deze functie zorgt er ook voor dat WSACleanup u wordt aangeroepen voordat de toepassing wordt beëindigd.

Return Value

Niet-nul als de functie is geslaagd; anders 0.

Remarks

Wanneer u MFC-sockets gebruikt in secundaire threads in een statisch gekoppelde MFC-toepassing, moet u elke thread aanroepen AfxSocketInit die sockets gebruikt om de socketbibliotheken te initialiseren. AfxSocketInit Standaard wordt alleen aangeroepen in de primaire thread.

Requirements

Headerafxsock.h

AfxUserToolsManager

Wijs de globale manager van gebruikershulpprogramma's aan.

Syntax

CUserToolsManager* afxUserToolsManager;

Requirements

Header:afxusertoolsmanager.h

AfxWinInit

Deze functie wordt aangeroepen door de door MFC geleverde WinMain functie, als onderdeel van de CWinApp initialisatie van een OP GUI gebaseerde toepassing, om MFC te initialiseren.

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

Parameters

hInstance
De ingang van de module die momenteel wordt uitgevoerd.

hPrevInstance
Een ingang naar een eerdere instantie van de toepassing. Voor een Win32-toepassing is deze parameter altijd NULL.

lpCmdLine
Verwijst naar een door null beëindigde tekenreeks die de opdrachtregel voor de toepassing opgeeft.

nCmdShow
Hiermee geeft u op hoe het hoofdvenster van een GUI-toepassing wordt weergegeven.

Remarks

Voor een consoletoepassing die de door MFC geleverde WinMain functie niet gebruikt, moet u rechtstreeks aanroepen AfxWinInit om MFC te initialiseren.

Als u uzelf aanroept AfxWinInit , moet u een exemplaar van een CWinApp klasse declareren. Voor een consoletoepassing kunt u ervoor kiezen om uw eigen klasse niet af te leiden van CWinApp en in plaats daarvan een exemplaar van CWinApp rechtstreeks te gebruiken. Deze techniek is geschikt als u besluit om alle functionaliteit voor uw toepassing in uw implementatie van main.

Note

Wanneer er een activeringscontext voor een assembly wordt gemaakt, maakt MFC gebruik van een manifestresource die wordt geleverd door de gebruikersmodule. De activeringscontext wordt gemaakt in AfxWinInit. Zie Ondersteuning voor activeringscontexten in de MFC-modulestatus voor meer informatie.

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

macro's en globale
CWinApp klasse
CContextMenuManager klasse
CWnd klasse
CFrameWndEx klasse
CMFCToolBar klasse
CKeyboardManager klasse
CMenuTearOffManager klasse
CMouseManager klasse
CShellManager klasse
CUserToolsManager klasse