Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
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_SUSPENDEDStarta tråden med ett tillfälligt antal. AnvändCREATE_SUSPENDEDom du vill initiera medlemsdataCWinThreadför objektet, till exempelm_bAutoDeleteeller medlemmar i din härledda klass, innan tråden börjar köras. När initieringen är klar använder duCWinThread::ResumeThreadför att starta tråden som körs. Tråden körs inte förrän den anropasCWinThread::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:
Huvudmodulen, om det är en MFC-tilläggs-DLL.
Non-system modules.
Language-specific modules.
Huvudmodulen, om det är en system-DLL.
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:
CFrameWndExCMDIFrameWndExCOleIPFrameWndExCOleDocIPFrameWndExCMDIChildWndEx
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