Dela via


Programinformation och -hantering

När du skriver ett program skapar du ett enda CWinApp-härlett objekt. Ibland kanske du vill få information om det här objektet utanför - CWinAppderived-objektet. Eller så kan du behöva åtkomst till andra globala "manager"-objekt.

Microsoft Foundation-klassbiblioteket innehåller följande globala funktioner som hjälper dig att utföra dessa uppgifter:

Programinformation och hanteringsfunktioner

Name Description
AfxBeginThread Skapar en ny tråd.
AfxContextMenuManager Pekare till den globala snabbmenyhanteraren.
AfxEndThread Avslutar den aktuella tråden.
AfxFindResourceHandle Vägleder resurskedjan och letar upp en specifik resurs efter resurs-ID och resurstyp.
AfxFreeLibrary Minskar referensantalet för den inlästa DLL-modulen (Dynamic Link Library). När referensantalet når noll avmappas modulen.
AfxGetApp Returnerar en pekare till programmets enda CWinApp objekt.
AfxGetAppName Returnerar en sträng som innehåller programmets namn.
AfxGetInstanceHandle Returnerar en HINSTANCE som representerar den här instansen av programmet.
AfxGetMainWnd Returnerar en pekare till det aktuella "main"-fönstret i ett icke-OLE-program eller ramfönstret på plats i ett serverprogram.
AfxGetPerUserRegistration Använd den här funktionen för att avgöra om programmet omdirigerar registeråtkomst till HKEY_CURRENT_USER noden (HKCU).
AfxGetResourceHandle Returnerar en HINSTANCE till källan för programmets standardresurser. Använd för att komma åt programmets resurser direkt.
AfxGetThread Retrieves a pointer to the current CWinThread object.
AfxInitRichEdit Initierar redigeringskontrollen för version 1.0 för programmet.
AfxInitRichEdit2 Initierar version 2.0 och senare omfattande redigeringskontroll för programmet.
AfxIsExtendedFrameClass Avgör om det angivna fönstret är ett utökat ramobjekt.
AfxIsMFCToolBar Avgör om det angivna fönstret är ett verktygsfältsobjekt.
AfxKeyboardManager Pointer to the global keyboard manager.
AfxLoadLibrary Mappar en DLL-modul och returnerar ett handtag som kan användas för att hämta adressen till en DLL-funktion.
AfxLoadLibraryEx Mappar en DLL-modul med de angivna alternativen och returnerar ett handtag som kan användas för att hämta adressen till en DLL-funktion.
AfxMenuTearOffManager Pekare till den globala avrivningsmenyhanteraren.
AfxMouseManager Pointer to the global mouse manager.
AfxRegisterClass Registrerar en fönsterklass i en DLL som använder MFC.
AfxRegisterWndClass Registrerar en Windows-fönsterklass för att komplettera de som registreras automatiskt av MFC.
AfxSetPerUserRegistration Anger om programmet omdirigerar registeråtkomst till HKEY_CURRENT_USER noden (HKCU).
AfxSetResourceHandle Anger HINSTANCE-referensen där standardresurserna för programmet läses in.
AfxShellManager Pointer to the global shell manager.
AfxSocketInit Anropas i en CWinApp::InitInstance åsidosättning för att initiera Windows Sockets.
AfxUserToolsManager Pekare till den globala användarverktygshanteraren.
AfxWinInit Anropas av den MFC-tillhandahållna WinMain funktionen som en del av CWinApp initieringen av ett GUI-baserat program för att initiera MFC. Måste anropas direkt för konsolprogram som använder MFC.

AfxBeginThread

Anropa den här funktionen för att skapa en ny tråd.

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
Pekar på kontrollfunktionen för arbetstråden. Pekaren kan inte vara NULL. Den här funktionen måste deklareras på följande sätt:

UINT __cdecl MyControllingFunction( LPVOID pParam );

pThreadClass
För RUNTIME_CLASS ett objekt som härletts från CWinThread.

pParam
Parameter som ska skickas till kontrollfunktionen.

nPriority
Prioriteten som ska anges för tråden. En fullständig lista och beskrivning av tillgängliga prioriteringar SetThreadPriority finns i Windows SDK.

nStackSize
Anger storleken i byte för stacken för den nya tråden. Om 0 är stackstorleken som standard samma storleksstack som den skapande tråden.

dwCreateFlags
Anger ytterligare en flagga som styr skapandet av tråden. Den här flaggan kan innehålla ett av två värden:

  • CREATE_SUSPENDED Starta tråden med ett tillfälligt antal. Använd CREATE_SUSPENDED om du vill initiera medlemsdata CWinThread för objektet, till exempel m_bAutoDelete eller medlemmar i din härledda klass, innan tråden börjar köras. När initieringen är klar använder du CWinThread::ResumeThread för att starta tråden som körs. Tråden körs inte förrän den anropas CWinThread::ResumeThread .

  • 0 Start the thread immediately after creation.

lpSecurityAttrs
Pekar på en SECURITY_ATTRIBUTES struktur som anger säkerhetsattributen för tråden. Om NULLanvänds samma säkerhetsattribut som den skapande tråden. Mer information om den här strukturen finns i Windows SDK.

Return Value

Pekare till det nyligen skapade trådobjektet eller NULL om ett fel inträffar.

Remarks

Den första formen av AfxBeginThread skapar en arbetstråd. Det andra formuläret skapar en tråd som kan fungera som en användargränssnittstråd eller som en arbetstråd.

AfxBeginThread skapar ett nytt CWinThread objekt, anropar dess CreateThread funktion för att börja köra tråden och returnerar en pekare till tråden. Kontroller görs under hela proceduren för att se till att alla objekt frigörs korrekt ifall någon del av skapandet misslyckas. Avsluta tråden genom att anropa AfxEndThread inifrån tråden eller återgå från arbetstrådens kontrollerande funktion.

Multitrådning måste aktiveras av programmet. annars misslyckas den här funktionen. Mer information om hur du aktiverar multitrådning finns i /MD, /MT, /LD (Använd körningsbibliotek).

Mer information om AfxBeginThreadfinns i artiklarna Multithreading: Creating Worker Threads and Multithreading: Creating User-Interface Threads (Multithreading: Create Worker Threads and Multithreading: Creating User-Interface Threads).

Example

Se exemplet för CSocket::Attach.

Requirements

Headerafxwin.h

AfxContextMenuManager

Pekare till den globala snabbmenyhanteraren.

Syntax

CContextMenuManager* afxContextMenuManager;

Requirements

Header:afxcontextmenumanager.h

AfxEndThread

Anropa den här funktionen för att avsluta den tråd som körs just nu.

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

Parameters

nExitCode
Anger trådens slutkod.

bDelete
Tar bort trådobjektet från minnet.

Remarks

Måste anropas inifrån tråden för att avslutas.

Mer information om AfxEndThreadfinns i artikeln Multithreading: Terminating Threads (Multithreading: Terminating Threads).

Requirements

Headerafxwin.h

AfxFindResourceHandle

Använd AfxFindResourceHandle för att gå i resurskedjan och hitta en specifik resurs efter resurs-ID och resurstyp.

Syntax

HINSTANCE AFXAPI AfxFindResourceHandle( LPCTSTR lpszName,  LPCTSTR lpszType );

Parameters

lpszName
En pekare till en sträng som innehåller resurs-ID:t.

lpszType
En pekare till resurstypen. En lista över resurstyper finns FindResource i Windows SDK.

Return Value

Ett handtag till modulen som innehåller resursen.

Remarks

AfxFindResourceHandle hittar den specifika resursen och returnerar ett handtag till modulen som innehåller resursen. Resursen kan finnas i valfri MFC-tilläggs-DLL som läses in. AfxFindResourceHandle anger vilken som har resursen.

Modulerna genomsöks i följande ordning:

  1. Huvudmodulen, om det är en MFC-tilläggs-DLL.

  2. Non-system modules.

  3. Language-specific modules.

  4. Huvudmodulen, om det är en system-DLL.

  5. System modules.

Requirements

Header:afxwin.h

AfxFreeLibrary

Både AfxFreeLibrary och AfxLoadLibrary underhåller ett referensantal för varje inläst biblioteksmodul.

BOOL AFXAPI AfxFreeLibrary(HINSTANCE hInstLib);

Parameters

hInstLib
Ett handtag för den inlästa biblioteksmodulen. AfxLoadLibrary returnerar det här handtaget.

Return Value

TRUEom funktionen lyckas; annars . FALSE

Remarks

AfxFreeLibrary minskar referensantalet för den inlästa DLL-modulen (Dynamic Link Library). När referensantalet når noll avmappas modulen från adressutrymmet för anropsprocessen och handtaget är inte längre giltigt. Det här referensantalet ökas varje gång AfxLoadLibrary anropas.

Innan du avmappar en biblioteksmodul gör systemet det möjligt för DLL:en att koppla från processerna med hjälp av den. Detta ger DLL en möjlighet att rensa resurser som allokerats för den aktuella processen. När startpunktsfunktionen har returnerats tas biblioteksmodulen bort från adressutrymmet för den aktuella processen.

Använd AfxLoadLibrary för att mappa en DLL-modul.

Se till att använda AfxFreeLibrary och AfxLoadLibrary (i stället för Win32-funktionerna FreeLibrary och LoadLibrary) om programmet använder flera trådar. Att använda AfxLoadLibrary och AfxFreeLibrary ser till att start- och avstängningskoden som körs när MFC-tilläggets DLL läses in och tas bort inte skadar det globala MFC-tillståndet.

Example

Se exemplet för AfxLoadLibrary.

Requirements

Headerafxdll_.h

AfxGetApp

Pekaren som returneras av den här funktionen kan användas för att komma åt programinformation, till exempel huvudkoden för meddelandesändning eller det översta fönstret.

CWinApp* AFXAPI AfxGetApp();

Return Value

En pekare till det enskilda CWinApp objektet för programmet.

Remarks

Om den här metoden returnerar NULLkan det tyda på att programmets huvudfönster inte har initierats helt ännu. Det kan också tyda på ett problem.

Example

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

Requirements

Headerafxwin.h

AfxGetAppName

Strängen som returneras kan användas för diagnostikmeddelanden eller som en rot för tillfälliga strängnamn.

LPCTSTR AFXAPI AfxGetAppName();

Return Value

En null-avslutad sträng som innehåller programmets namn.

Example

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

Requirements

Headerafxwin.h

AfxGetInstanceHandle

Med den här funktionen kan du hämta instanshandtaget för det aktuella programmet.

HINSTANCE  AFXAPI AfxGetInstanceHandle();

Return Value

En HINSTANCE till den aktuella instansen av programmet. Om den anropas inifrån en DLL som är länkad till USRDLL-versionen av MFC returneras en HINSTANCE till DLL:en.

Remarks

AfxGetInstanceHandle returnerar alltid den HINSTANCE körbara filen (.EXE) såvida den inte anropas inifrån en DLL som är länkad till USRDLL-versionen av MFC. I det här fallet returneras en HINSTANCE till DLL:en.

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

Om ditt program är en OLE-server anropar du den här funktionen för att hämta en pekare till programmets aktiva huvudfönster. Använd det här resultatet i stället för att referera direkt till m_pMainWnd medlemmen i programobjektet.

CWnd* AFXAPI AfxGetMainWnd();

Return Value

Returnerar en pekare till ramfönsterobjektet som innehåller det aktiva dokumentet på plats, om servern har ett objekt som är aktivt på plats i en aktiv container.

Om det inte finns något objekt som är aktivt på plats i en container, eller om programmet inte är en OLE-server, returnerar den m_pMainWnd här funktionen programobjektets.

Om AfxGetMainWnd anropas från programmets primära tråd returneras programmets huvudfönster enligt ovanstående regler. Om funktionen anropas från en sekundär tråd i programmet returnerar funktionen huvudfönstret som är associerat med tråden som gjorde anropet.

Remarks

Om ditt program inte är en OLE-server motsvarar anropet av den här funktionen att direkt referera till medlemmen i m_pMainWnd programobjektet.

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

Använd den här funktionen för att avgöra om programmet omdirigerar registeråtkomst till HKEY_CURRENT_USER noden (HKCU).

BOOL AFXAPI AfxGetPerUserRegistration();

Return Value

TRUE anger att registerinformationen HKCU dirigeras till noden. FALSE anger att programmet skriver registerinformation till standardnoden. Standardnoden är HKEY_CLASSES_ROOT (HKCR).

Remarks

Om du aktiverar registeromdirigering omdirigerar ramverket åtkomsten från HKCR till HKEY_CURRENT_USER\Software\Classes. Endast MFC- och ATL-ramverken påverkas av omdirigeringen.

Om du vill ändra om programmet omdirigerar registeråtkomst använder du AfxSetPerUserRegistration.

Requirements

Headerafxstat_.h

AfxGetResourceHandle

Använd referensen HINSTANCE som returneras av den här funktionen för att komma åt programmets resurser direkt, till exempel i anrop till Windows-funktionen FindResource.

extern HINSTANCE  AfxGetResourceHandle();

Return Value

En HINSTANCE referens där standardresurserna för programmet läses in.

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

Anropa den här funktionen för att hämta en pekare till objektet CWinThread som representerar den tråd som körs just nu.

CWinThread* AfxGetThread();

Return Value

Pekare till den tråd som körs just nu. annars NULL.

Remarks

Måste anropas inifrån tråden.

Note

Om du porterar ett MFC-projektanrop AfxGetThread från Visual C++ version 4.2, 5.0 eller 6.0 anropas AfxGetThreadAfxGetApp om ingen tråd hittas. I senare versioner av kompilatorn AfxGetThread returnerar NULL om ingen tråd hittades. Om du vill ha programtråden måste du anropa 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

Anropa den här funktionen för att initiera den omfattande redigeringskontrollen (version 1.0) för programmet.

BOOL AFXAPI AfxInitRichEdit();

Remarks

Den här funktionen tillhandahålls för bakåtkompatibilitet. Nya program ska använda AfxInitRichEdit2.

AfxInitRichEdit läses in RICHED32.DLL för att initiera version 1.0 av den omfattande redigeringskontrollen. Om du vill använda version 2.0 och 3.0 av den omfattande redigeringskontrollen RICHED20.DLL måste du läsa in den. Den läses in genom att göra ett anrop till AfxInitRichEdit2.

Om du vill uppdatera omfattande redigeringskontroller i befintliga Visual C++-program till version 2.0 öppnar du . RC-fil som text, ändra klassnamnet för varje rtF-redigeringskontroll från "RICHEDIT" till "RichEdit20a". Ersätt sedan anropet till AfxInitRichEdit med AfxInitRichEdit2.

Den här funktionen initierar också det gemensamma kontrollbiblioteket om biblioteket inte redan har initierats för processen. Om du använder den omfattande redigeringskontrollen direkt från ditt MFC-program anropar du den här funktionen för att säkerställa att MFC har initierat den omfattande redigeringskontrollkörningen korrekt. Om du anropar Create metoden CRichEditCtrl, CRichEditVieweller CRichEditDoc, behöver du vanligtvis inte anropa den här funktionen, men i vissa fall kan det vara nödvändigt.

Requirements

Headerafxwin.h

AfxInitRichEdit2

Anropa den här funktionen för att initiera den omfattande redigeringskontrollen (version 2.0 och senare) för programmet.

BOOL AFXAPI AfxInitRichEdit2();

Remarks

Anropa den här funktionen för att läsa in RICHED20.DLL och initiera version 2.0 av den omfattande redigeringskontrollen. Om du anropar Create metoden CRichEditCtrl, CRichEditVieweller CRichEditDoc, behöver du vanligtvis inte anropa den här funktionen, men i vissa fall kan det vara nödvändigt.

Requirements

Headerafxwin.h

AfxIsExtendedFrameClass

Avgör om det angivna fönstret är ett utökat ramobjekt.

Syntax

BOOL AFXAPI AfxIsExtendedFrameClass( CWnd* pWnd );

Parameters

pWnd
[i] En pekare till ett objekt som härleds från CWnd.

Return Value

TRUE om det angivna fönstret är ett utökat ramobjekt; annars FALSE.

Remarks

Den här metoden returnerar TRUE om pWnd härleds från någon av följande klasser:

  • CFrameWndEx

  • CMDIFrameWndEx

  • COleIPFrameWndEx

  • COleDocIPFrameWndEx

  • CMDIChildWndEx

Den här metoden är användbar när du måste verifiera att en funktion eller metodparameter är ett utökat ramfönster.

Requirements

Header:afxpriv.h

AfxIsMFCToolBar

Avgör om det angivna fönstret är ett verktygsfältsobjekt.

Syntax

BOOL AFXAPI AfxIsMFCToolBar(CWnd* pWnd);

Parameters

pWnd
[i] En pekare till ett objekt som härleds från CWnd.

Return Value

TRUE om det angivna fönstret är ett verktygsfältsobjekt; annars FALSE.

Remarks

Den här metoden returnerar TRUE om pWnd härleds från CMFCToolBar. Den här metoden är användbar när du måste verifiera att en funktions- eller metodparameter är ett CMFCToolBar objekt.

Requirements

Header:afxpriv.h

AfxKeyboardManager

Pointer to the global keyboard manager.

Syntax

CKeyboardManager* afxKeyboardManager;

Requirements

Header:afxkeyboardmanager.h

AfxLoadLibrary

Använd AfxLoadLibrary för att mappa en DLL-modul.

HINSTANCE AFXAPI AfxLoadLibrary(LPCTSTR lpszModuleName);

Parameters

lpszModuleName
Pekar på en null-avslutad sträng som innehåller namnet på modulen (antingen en .DLL eller .EXE fil). Det angivna namnet är modulens filnamn.

Om strängen anger en sökväg men filen inte finns i den angivna katalogen misslyckas funktionen.

Om en sökväg inte har angetts och filnamnstillägget utelämnas läggs standardtillägget .DLL till. Filnamnssträngen kan dock innehålla ett avslutande punkttecken (.) som anger att modulnamnet inte har något tillägg. När ingen sökväg har angetts använder funktionen sökordningen för skrivbordsprogram.

Return Value

Om funktionen lyckas är returvärdet en referens till modulen. Vid fel är NULLreturvärdet .

Remarks

Den returnerar ett handtag som kan användas i GetProcAddress för att hämta adressen till en DLL-funktion. AfxLoadLibrary kan också användas för att mappa andra körbara moduler.

Varje process upprätthåller ett referensantal för varje inläst biblioteksmodul. Det här referensantalet ökas varje gång AfxLoadLibrary anropas och minskas varje gång AfxFreeLibrary anropas. När referensantalet når noll avmappas modulen från adressutrymmet för anropsprocessen och handtaget är inte längre giltigt.

Se till att använda AfxLoadLibrary och AfxFreeLibrary (i stället för Win32-funktionerna LoadLibrary och FreeLibrary) om programmet använder flera trådar och om det dynamiskt läser in en MFC-tilläggs-DLL. Användning AfxLoadLibrary och AfxFreeLibrary försäkrar att start- och avstängningskoden som körs när MFC-tilläggets DLL läses in och tas bort inte skadar det globala MFC-tillståndet.

Om du använder AfxLoadLibrary i ett program måste du dynamiskt länka till DLL-versionen av MFC. Huvudfilen för AfxLoadLibrary, Afxdll_.h, ingår endast om MFC är länkat till programmet som en DLL. Det här kravet är avsiktligt eftersom du måste länka till DLL-versionen av MFC för att använda eller skapa DLL:er för MFC-tillägg.

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

Använd AfxLoadLibraryEx för att mappa en DLL-modul.

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

Parameters

lpFileName
Pekar på en null-avslutad sträng som innehåller namnet på modulen (antingen en .DLL eller .EXE fil). Det angivna namnet är modulens filnamn.

Om strängen anger en sökväg men filen inte finns i den angivna katalogen misslyckas funktionen.

Om en sökväg inte har angetts och filnamnstillägget utelämnas läggs standardtillägget .DLL till. Filnamnssträngen kan dock innehålla ett avslutande punkttecken (.) som anger att modulnamnet inte har något tillägg. När ingen sökväg har angetts använder funktionen sökordningen för skrivbordsprogram.

hFile
Den här parametern är reserverad för framtida användning. Det måste vara NULL.

dwFlags
Den åtgärd som ska vidtas vid inläsning av modulen. Om inga flaggor anges är funktionens beteende identiskt AfxLoadLibrary med funktionen. Möjliga värden för den här parametern beskrivs i dokumentationen LoadLibraryEx .

Return Value

Om funktionen lyckas är returvärdet en referens till modulen. Vid fel är NULLreturvärdet .

Remarks

AfxLoadLibraryEx returnerar ett handtag som kan användas i GetProcAddress för att hämta adressen till en DLL-funktion. AfxLoadLibraryEx kan också användas för att mappa andra körbara moduler.

Varje process upprätthåller ett referensantal för varje inläst biblioteksmodul. Det här referensantalet ökas varje gång AfxLoadLibraryEx anropas och minskas varje gång AfxFreeLibrary anropas. När referensantalet når noll avmappas modulen från adressutrymmet för anropsprocessen och handtaget är inte längre giltigt.

Se till att använda AfxLoadLibraryEx och AfxFreeLibrary (i stället för Win32-funktionerna LoadLibraryEx och FreeLibrary) om ditt program använder flera trådar och om det dynamiskt läser in en MFC-tilläggs-DLL. Att använda AfxLoadLibraryEx och AfxFreeLibrary ser till att start- och avstängningskoden som körs när MFC-tilläggets DLL läses in och tas bort inte skadar det globala MFC-tillståndet.

Om du använder AfxLoadLibraryEx i ett program måste du dynamiskt länka till DLL-versionen av MFC. Huvudfilen för AfxLoadLibraryEx, Afxdll_.h, ingår endast om MFC är länkat till programmet som en DLL. Det här kravet är avsiktligt eftersom du måste länka till DLL-versionen av MFC för att använda eller skapa DLL:er för MFC-tillägg.

Requirements

Headerafxdll_.h

AfxMenuTearOffManager

Pekare till den globala avrivningsmenyhanteraren.

Syntax

CMenuTearOffManager* g_pTearOffMenuManager;

Requirements

Header:afxmenutearoffmanager.h

AfxMouseManager

Pointer to the global mouse manager.

Syntax

CMouseManager* afxMouseManager;

Requirements

Header:afxmousemanager.h

AfxRegisterClass

Använd den här funktionen för att registrera fönsterklasser i en DLL som använder MFC.

BOOL AFXAPI AfxRegisterClass(WNDCLASS* lpWndClass);

Parameters

lpWndClass
Pekare till en WNDCLASS struktur som innehåller information om den fönsterklass som ska registreras. Mer information om den här strukturen finns i Windows SDK.

Return Value

TRUE om klassen har registrerats. annars FALSE.

Remarks

Om du använder den här funktionen avregistreras klassen automatiskt när DLL:en tas bort.

I icke-DLL-versioner definieras identifieraren AfxRegisterClass som ett makro som mappar till Windows-funktionen RegisterClasseftersom klasser som registrerats i ett program avregistreras automatiskt. Om du använder AfxRegisterClass i stället för RegisterClasskan koden användas utan att ändra både i ett program och i en DLL.

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

Gör att du kan registrera dina egna fönsterklasser.

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

Parameters

nClassStyle
Anger Windows-klassformat eller kombination av formatmallar som skapats med hjälp av operatorn bitwise-OR (|) för fönsterklassen. En lista över klassformat finns WNDCLASS i strukturen i Windows SDK. Om NULLanges standardvärdena på följande sätt:

  • Anger musformatet till CS_DBLCLKS, som skickar dubbelklicksmeddelanden till fönsterproceduren när användaren dubbelklickar på musen.

  • Anger pilmarkörformatet till Windows-standarden IDC_ARROW.

  • Anger bakgrundspenseln till NULL, så att fönstret inte raderar bakgrunden.

  • Anger ikonen till standardikonen för Windows-logotypen med viftande flagga.

hCursor
Anger en referens till markörresursen som ska installeras i varje fönster som skapas från fönsterklassen. If you use the default of 0, you'll get the standard IDC_ARROW cursor.

hbrBackground
Anger ett handtag till penselresursen som ska installeras i varje fönster som skapas från fönsterklassen. 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
Anger ett handtag till den ikonresurs som ska installeras i varje fönster som skapas från fönsterklassen. If you use the default of 0, you'll get the standard, waving-flag Windows logo icon.

Return Value

En null-avslutad sträng som innehåller klassnamnet. Du kan skicka det här klassnamnet till Create medlemsfunktionen i CWnd eller andra **CWnd-**härledda klasser för att skapa ett fönster. Namnet genereras av Microsoft Foundation-klassbiblioteket.

Note

Returvärdet är en pekare till en statisk buffert. Om du vill spara strängen tilldelar du den till en CString variabel.

Remarks

Microsoft Foundation-klassbiblioteket registrerar automatiskt flera standardfönsterklasser åt dig. Anropa den här funktionen om du vill registrera dina egna fönsterklasser.

Namnet som registrerats för en klass av AfxRegisterWndClass beror enbart på parametrarna. Om du anropar AfxRegisterWndClass flera gånger med identiska parametrar registreras bara en klass vid det första anropet. Senare anrop till AfxRegisterWndClass med identiska parametrar returnerar det redan registrerade klassnamnet.

Om du anropar AfxRegisterWndClass för flera CWnd-härledda klasser med identiska parametrar, i stället för att få en separat fönsterklass för varje klass, delar varje klass samma fönsterklass. Den här delningstypen kan orsaka problem om klassformatet CS_CLASSDC används. I stället för flera CS_CLASSDC fönsterklasser får du bara en CS_CLASSDC fönsterklass. Alla C++-fönster som använder den klassen delar samma domänkontrollant. Undvik det här problemet genom att anropa AfxRegisterClass för att registrera klassen.

Mer information om registrering av fönsterklass och AfxRegisterWndClass funktionen finns i Technical Note TN001: Window Class Registration .

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

Anger om programmet omdirigerar registeråtkomst till HKEY_CURRENT_USER noden (HKCU).

void AFXAPI AfxSetPerUserRegistration(BOOL bEnable);

Parameters

bEnable
[i] TRUE anger att registerinformationen HKCU dirigeras till noden. FALSE anger att programmet skriver registerinformation till standardnoden. Standardnoden är HKEY_CLASSES_ROOT (HKCR).

Remarks

Före Windows Vista använde HKEY_CLASSES_ROOT program som använde registret ofta noden. Men med Windows Vista eller senare operativsystem måste du köra ett program i förhöjd läge för att skriva till HKCR.

Med den här metoden kan ditt program läsa och skriva till registret utan att köra i förhöjt läge. Det fungerar genom att omdirigera registeråtkomst från HKCR till HKCU. Mer information finns i Linker-egenskapssidor.

Om du aktiverar registeromdirigering omdirigerar ramverket åtkomsten från HKCR till HKEY_CURRENT_USER\Software\Classes. Endast MFC- och ATL-ramverken påverkas av omdirigeringen.

Standardimplementeringen kommer åt registret under HKCR.

Requirements

Headerafxstat_.h

AfxSetResourceHandle

Använd den här funktionen för att ange referensen HINSTANCE som avgör var programmets standardresurser läses in.

void AFXAPI AfxSetResourceHandle(HINSTANCE hInstResource);

Parameters

hInstResource
Instansen eller modulen hanterar till en .EXE- eller DLL-fil som programmets resurser läses in från.

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

Anropa den här funktionen i åsidosättningen CWinApp::InitInstance för att initiera Windows Sockets.

BOOL AfxSocketInit(WSADATA* lpwsaData = NULL);

Parameters

lpwsaData
En pekare till en WSADATA struktur. Om lpwsaData inte är lika med NULLfylls strukturens adress i WSADATA av anropet till WSAStartup. Den här funktionen ser också till att WSACleanup anropas innan programmet avslutas.

Return Value

Nonzero om funktionen lyckas; annars 0.

Remarks

När du använder MFC-socketar i sekundära trådar i ett statiskt länkat MFC-program måste du anropa AfxSocketInit varje tråd som använder socketar för att initiera socketbiblioteken. Som standard AfxSocketInit anropas endast i den primära tråden.

Requirements

Headerafxsock.h

AfxUserToolsManager

Pekare till den globala användarverktygshanteraren.

Syntax

CUserToolsManager* afxUserToolsManager;

Requirements

Header:afxusertoolsmanager.h

AfxWinInit

Den här funktionen anropas av den MFC-tillhandahållna WinMain funktionen, som en del av CWinApp initieringen av ett GUI-baserat program, för att initiera MFC.

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

Parameters

hInstance
Handtaget för den modul som körs just nu.

hPrevInstance
En referens till en tidigare instans av programmet. För ett Win32-baserat program är den här parametern alltid NULL.

lpCmdLine
Pekar på en null-avslutad sträng som anger kommandoraden för programmet.

nCmdShow
Anger hur huvudfönstret för ett GUI-program ska visas.

Remarks

För ett konsolprogram som inte använder funktionen MFC WinMain måste du anropa AfxWinInit direkt för att initiera MFC.

Om du anropar AfxWinInit dig själv bör du deklarera en instans av en CWinApp klass. För ett konsolprogram kan du välja att inte härleda din egen klass från CWinApp och i stället använda en instans av CWinApp direkt. Den här tekniken är lämplig om du bestämmer dig för att lämna alla funktioner för ditt program i implementeringen av main.

Note

När den skapar en aktiveringskontext för en sammansättning använder MFC en manifestresurs som tillhandahålls av användarmodulen. Aktiveringskontexten skapas i AfxWinInit. Mer information finns i Stöd för aktiveringskontexter i MFC-modultillståndet.

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

makron och globala
CWinApp klass
CContextMenuManager klass
CWnd klass
CFrameWndEx klass
CMFCToolBar klass
CKeyboardManager klass
CMenuTearOffManager klass
CMouseManager klass
CShellManager klass
CUserToolsManager klass