Sdílet prostřednictvím


Informace o aplikacích a správa aplikací

Při psaní aplikace vytvoříte jeden CWinApp-odvozený objekt. Někdy můžete chtít získat informace o tomto objektu mimo -odvozený CWinAppobjekt. Nebo možná budete potřebovat přístup k jiným globálním objektům "manager".

Knihovna tříd Microsoft Foundation poskytuje následující globální funkce, které vám pomůžou provádět tyto úlohy:

Aplikační informace a funkce správy

Název Popis
AfxBeginThread Vytvoří nové vlákno.
AfxContextMenuManager Ukazatel na globálního správce místní nabídky.
AfxEndThread Ukončí aktuální vlákno.
AfxFindResourceHandle Provede řetěz prostředků a vyhledá konkrétní prostředek podle ID prostředku a typu prostředku.
AfxFreeLibrary Sníží počet odkazů načteného modulu knihovny DLL (Dynamic Link Library). Když počet odkazů dosáhne nuly, modul se nenamapuje.
AfxGetApp Vrátí ukazatel na jeden CWinApp objekt aplikace.
AfxGetAppName Vrátí řetězec, který obsahuje název aplikace.
AfxGetInstanceHandle Vrátí reprezentaci HINSTANCE této instance aplikace.
AfxGetMainWnd Vrátí ukazatel na aktuální hlavní okno aplikace, která není OLE, nebo na místní okno rámce serverové aplikace.
AfxGetPerUserRegistration Tato funkce slouží k určení, jestli aplikace přesměruje přístup registru k HKEY_CURRENT_USER uzlu (HKCU).
AfxGetResourceHandle HINSTANCE Vrátí zdroj výchozích prostředků aplikace. Umožňuje přímý přístup k prostředkům aplikace.
AfxGetThread Načte ukazatel na aktuální objekt CWinThread .
AfxInitRichEdit Inicializuje ovládací prvek pro úpravy s formátováním verze 1.0 pro aplikaci.
AfxInitRichEdit2 Inicializuje ovládací prvek pro úpravy verze 2.0 a novější s formátováním pro aplikaci.
AfxIsExtendedFrameClass Určuje, zda je dané okno objektem rozšířeného rámce.
AfxIsMFCToolBar Určuje, zda je dané okno objekt panelu nástrojů.
AfxKeyboardManager Ukazatel na globálního správce klávesnice
AfxLoadLibrary Mapuje modul KNIHOVNY DLL a vrací popisovač, který lze použít k získání adresy funkce KNIHOVNY DLL.
AfxLoadLibraryEx Mapuje modul DLL pomocí zadaných možností a vrátí popisovač, který lze použít k získání adresy funkce KNIHOVNY DLL.
AfxMenuTearOffManager Ukazatel na globálního správce nabídek pro odtržení.
AfxMouseManager Ukazatel na globálního správce myši.
AfxRegisterClass Zaregistruje třídu okna v knihovně DLL, která používá mfc.
AfxRegisterWndClass Zaregistruje třídu okna systému Windows, která doplní automaticky registrované knihovny MFC.
AfxSetPerUserRegistration Nastaví, jestli aplikace přesměruje přístup registru k HKEY_CURRENT_USER uzlu (HKCU).
AfxSetResourceHandle Nastaví popisovač HINSTANCE, kde jsou načteny výchozí prostředky aplikace.
AfxShellManager Ukazatel na globálního správce prostředí.
AfxSocketInit Volá se CWinApp::InitInstance v přepsání pro inicializaci rozhraní Windows Sockets.
AfxUserToolsManager Ukazatel na globálního správce uživatelských nástrojů.
AfxWinInit Volané funkcí dodanou WinMain knihovnou MFC jako součást CWinApp inicializace aplikace založené na grafickém uživatelském rozhraní k inicializaci knihovny MFC. Musí být volána přímo pro konzolové aplikace, které používají mfc.

AfxBeginThread

Voláním této funkce vytvoříte nové vlákno.

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);

Parametry

pfnThreadProc
Odkazuje na řídicí funkci pracovního vlákna. Ukazatel nemůže být NULL. Tato funkce musí být deklarována následujícím způsobem:

UINT __cdecl MyControllingFunction( LPVOID pParam );

pThreadClass
Objekt RUNTIME_CLASS odvozený z CWinThread.

pParam
Parametr, který se má předat řídicí funkci.

nPriority
Priorita nastavená pro vlákno. Úplný seznam a popis dostupných priorit najdete SetThreadPriority v sadě Windows SDK.

nStackSize
Určuje velikost v bajtech zásobníku pro nové vlákno. Pokud 0, velikost zásobníku se ve výchozím nastavení shoduje se stejnou velikostí jako vlákno pro vytváření.

dwCreateFlags
Určuje další příznak, který řídí vytvoření vlákna. Tento příznak může obsahovat jednu ze dvou hodnot:

  • CREATE_SUSPENDED Spusťte vlákno s počtem pozastavení jedné. Použijte CREATE_SUSPENDED , pokud chcete inicializovat jakákoli členová data objektu CWinThread , například m_bAutoDelete nebo jakékoli členy odvozené třídy, před spuštěním vlákna. Po dokončení inicializace použijte CWinThread::ResumeThread ke spuštění vlákna. Vlákno se nespustí, dokud CWinThread::ResumeThread se nevolá.

  • 0 Spusťte vlákno ihned po vytvoření.

lpSecurityAttrs
Odkazuje na SECURITY_ATTRIBUTES strukturu, která určuje atributy zabezpečení pro vlákno. Pokud NULLse použijí stejné atributy zabezpečení jako vlákno pro vytváření. Další informace o této struktuře najdete v sadě Windows SDK.

Návratová hodnota

Ukazatel na nově vytvořený objekt vlákna nebo NULL v případě selhání.

Poznámky

První forma AfxBeginThread vytvoří pracovní vlákno. Druhý formulář vytvoří vlákno, které může sloužit jako vlákno uživatelského rozhraní nebo jako pracovní vlákno.

AfxBeginThread vytvoří nový CWinThread objekt, zavolá jeho CreateThread funkci, aby se spustilo vlákno, a vrátí ukazatel na vlákno. Kontroly jsou provedeny v průběhu postupu, aby se zajistilo, že všechny objekty jsou správně uvolněny, pokud všechny části vytváření selžou. Chcete-li ukončit vlákno, volání AfxEndThread z vlákna nebo vrácení z řídicí funkce pracovního vlákna.

Aplikace musí povolit vícevláknové formátování; jinak tato funkce selže. Další informace o povolení multithreadingu naleznete v tématu /MD, /LD /MT(použití knihovny runtime).

Další informace o AfxBeginThread, viz články Multithreading: Vytváření pracovních vláken a vícevláknů: Vytváření vláken uživatelského rozhraní.

Příklad

Podívejte se na příklad pro CSocket::Attach.

Požadavky

Záhlaví afxwin.h

AfxContextMenuManager

Ukazatel na globálního správce místní nabídky.

Syntaxe

CContextMenuManager* afxContextMenuManager;

Požadavky

Záhlaví: afxcontextmenumanager.h

AfxEndThread

Voláním této funkce ukončete aktuálně spuštěné vlákno.

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

Parametry

nExitCode
Určuje ukončovací kód vlákna.

bDelete
Odstraní objekt vlákna z paměti.

Poznámky

Je nutné volat z vlákna, které se má ukončit.

Další informace o AfxEndThread, naleznete v článku Multithreading: Ukončovací vlákna.

Požadavky

Záhlaví afxwin.h

AfxFindResourceHandle

Slouží AfxFindResourceHandle k procházení řetězce prostředků a vyhledání konkrétního prostředku podle ID prostředku a typu prostředku.

Syntaxe

HINSTANCE AFXAPI AfxFindResourceHandle( LPCTSTR lpszName,  LPCTSTR lpszType );

Parametry

lpszName
Ukazatel na řetězec obsahující ID prostředku. lpszType
Ukazatel na typ prostředku. Seznam typů prostředků najdete FindResource v sadě Windows SDK.

Návratová hodnota

Popisovač modulu, který obsahuje prostředek.

Poznámky

AfxFindResourceHandle najde konkrétní prostředek a vrátí popisovač modulu, který prostředek obsahuje. Prostředek může být v libovolné knihovně DLL rozšíření MFC, která je načtena. AfxFindResourceHandle řekne vám, který prostředek má.

Moduly se prohledávají v tomto pořadí:

  1. Hlavní modul, pokud se jedná o rozšiřující knihovnu DLL knihovny MFC.

  2. Nesystémové moduly.

  3. Moduly specifické pro jazyk.

  4. Hlavní modul, pokud se jedná o systémovou knihovnu DLL.

  5. Systémové moduly.

Požadavky

Záhlaví: afxwin.h

AfxFreeLibrary

Počet AfxFreeLibrary odkazů pro každý načtený modul knihovny můžete udržovat a AfxLoadLibrary udržovat ho.

BOOL AFXAPI AfxFreeLibrary(HINSTANCE hInstLib);

Parametry

hInstLib
Popisovač načteného modulu knihovny AfxLoadLibrary vrátí tento popisovač.

Návratová hodnota

TRUEpokud je funkce úspěšná; v opačném případě . FALSE

Poznámky

AfxFreeLibrary sníží počet odkazů načteného modulu dll (dynamic-link library). Když počet odkazů dosáhne nuly, modul se nemapuje z adresního prostoru volajícího procesu a popisovač už není platný. Tento počet odkazů se při každém AfxLoadLibrary zavolání zvýší.

Před zrušením mapování modulu knihovny systém umožňuje knihovně DLL odpojit od procesů, které ho používají. To dává knihovně DLL příležitost vyčistit prostředky přidělené pro aktuální proces. Po návratu funkce vstupního bodu se modul knihovny odebere z adresního prostoru aktuálního procesu.

Slouží AfxLoadLibrary k mapování modulu knihovny DLL.

Pokud vaše aplikace používá více vláken, nezapomeňte použít AfxFreeLibrary a AfxLoadLibrary (místo funkcí FreeLibrary Win32).LoadLibrary Použití AfxLoadLibrary a AfxFreeLibrary zajištění spuštění a vypnutí kódu, který se spustí při načtení a uvolnění knihovny DLL rozšíření MFC není poškozen globální stav MFC.

Příklad

Podívejte se na příklad pro AfxLoadLibrary.

Požadavky

Záhlaví afxdll_.h

AfxGetApp

Ukazatel vrácený touto funkcí lze použít pro přístup k informacím aplikace, jako je hlavní kód pro odeslání zprávy nebo horní okno.

CWinApp* AFXAPI AfxGetApp();

Návratová hodnota

Ukazatel na jeden CWinApp objekt aplikace.

Poznámky

Pokud tato metoda vrátí NULL, může to znamenat, že hlavní okno aplikace ještě nebylo plně inicializováno. Může to také znamenat problém.

Příklad

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

Požadavky

Záhlaví afxwin.h

AfxGetAppName

Vrácený řetězec lze použít pro diagnostické zprávy nebo jako kořen pro dočasné názvy řetězců.

LPCTSTR AFXAPI AfxGetAppName();

Návratová hodnota

Řetězec ukončený hodnotou null obsahující název aplikace.

Příklad

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

Požadavky

Záhlaví afxwin.h

AfxGetInstanceHandle

Tato funkce umožňuje načíst popisovač instance aktuální aplikace.

HINSTANCE  AFXAPI AfxGetInstanceHandle();

Návratová hodnota

Do HINSTANCE aktuální instance aplikace. Je-li volána z knihovny DLL propojené s verzí KNIHOVNY MFC USRDLL, HINSTANCE vrátí se knihovna DLL.

Poznámky

AfxGetInstanceHandle Vždy vrátí HINSTANCE spustitelný soubor (.EXE), pokud není volána z knihovny DLL propojené s verzí KNIHOVNY MFC USRDLL. V tomto případě vrátí knihovnu HINSTANCE DLL.

Příklad

// Print the application instance handle to the debugger output window.
TRACE(_T("Application instance handle is 0x%0X\n"), AfxGetInstanceHandle());

Požadavky

Záhlaví afxwin.h

AfxGetMainWnd

Pokud je aplikace serverem OLE, zavolejte tuto funkci, která načte ukazatel na aktivní hlavní okno aplikace. Tento výsledek použijte místo přímého odkazování na m_pMainWnd člena objektu aplikace.

CWnd* AFXAPI AfxGetMainWnd();

Návratová hodnota

Vrátí ukazatel na objekt okna rámečku, který obsahuje místní aktivní dokument, pokud server obsahuje objekt, který je v aktivním kontejneru aktivní.

Pokud není žádný objekt, který je v kontejneru aktivní nebo aplikace není server OLE, vrátí m_pMainWnd tato funkce objekt vaší aplikace.

Pokud AfxGetMainWnd je volána z primárního vlákna aplikace, vrátí hlavní okno aplikace podle výše uvedených pravidel. Pokud je funkce volána ze sekundárního vlákna v aplikaci, vrátí funkce hlavní okno přidružené k vláknu, které provedlo volání.

Poznámky

Pokud vaše aplikace není serverem OLE, volání této funkce odpovídá přímému odkazování na m_pMainWnd člena objektu aplikace.

Příklad

//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);

Požadavky

Záhlaví afxwin.h

AfxGetPerUserRegistration

Tato funkce slouží k určení, jestli aplikace přesměruje přístup registru k HKEY_CURRENT_USER uzlu (HKCU).

BOOL AFXAPI AfxGetPerUserRegistration();

Návratová hodnota

TRUE označuje, že informace registru jsou směrovány do HKCU uzlu. FALSE označuje, že aplikace zapisuje informace registru do výchozího uzlu. Výchozí uzel je HKEY_CLASSES_ROOT (HKCR).

Poznámky

Pokud povolíte přesměrování registru, architektura přesměruje přístup z HKCR .HKEY_CURRENT_USER\Software\Classes Přesměrování ovlivní jenom architektury MFC a ATL.

Chcete-li změnit, zda aplikace přesměruje přístup k registru, použijte AfxSetPerUserRegistration.

Požadavky

Záhlaví afxstat_.h

AfxGetResourceHandle

HINSTANCE Pomocí popisovače vrácené touto funkcí můžete přistupovat přímo k prostředkům aplikace, například při volání funkce FindResourceWindows .

extern HINSTANCE  AfxGetResourceHandle();

Návratová hodnota

Popisovač HINSTANCE , ve kterém jsou načteny výchozí prostředky aplikace.

Příklad

//Load the menu specifying the module handle where resource is to be
//found & resource ID
HMENU hMenu = ::LoadMenu(AfxGetResourceHandle(), MAKEINTRESOURCE(IDR_MAINFRAME));

Požadavky

Záhlaví afxwin.h

AfxGetThread

Voláním této funkce získáte ukazatel na CWinThread objekt představující aktuálně spuštěné vlákno.

CWinThread* AfxGetThread();

Návratová hodnota

Ukazatel na aktuálně spuštěné vlákno; jinak NULL.

Poznámky

Musí být volána z vlákna.

Poznámka:

Pokud portujete projekt MFC volání AfxGetThread z visual C++ verze 4.2, 5.0 nebo 6.0, voláníAfxGetApp, AfxGetThread pokud se nenajde žádné vlákno. V novějších verzích kompilátoru se vrátíNULL, AfxGetThread pokud se nenašlo žádné vlákno. Pokud chcete vlákno aplikace, musíte volat AfxGetApp.

Příklad

//Print the current thread ID in the Debug Window
TRACE(_T("Current Thread ID = 0x%X\n"), AfxGetThread()->m_nThreadID);

Požadavky

Záhlaví afxwin.h

AfxInitRichEdit

Voláním této funkce inicializujete ovládací prvek pro úpravy s formátováním (verze 1.0) pro aplikaci.

BOOL AFXAPI AfxInitRichEdit();

Poznámky

Tato funkce je k dispozici pro zpětnou kompatibilitu. Nové aplikace by měly používat AfxInitRichEdit2.

AfxInitRichEdit načte RICHED32.DLL , aby se inicializovala verze 1.0 ovládacího prvku pro úpravy s formátováním. Pokud chcete použít verzi 2.0 a 3.0 ovládacího prvku pro úpravy s formátem, RICHED20.DLL je potřeba načíst. Načte se voláním AfxInitRichEdit2.

Chcete-li aktualizovat ovládací prvky pro úpravy s formátem v existujících aplikacích Visual C++ na verzi 2.0, otevřete soubor . Rc soubor jako text, změňte název třídy každého ovládacího prvku pro úpravy s formátováním z "RICHEDIT" na "RichEdit20a". Pak hovor AfxInitRichEdit AfxInitRichEdit2nahraďte .

Tato funkce také inicializuje knihovnu běžných ovládacích prvků, pokud knihovna ještě nebyla pro proces inicializována. Pokud používáte ovládací prvek pro úpravy s formátováním přímo z aplikace MFC, zavolejte tuto funkci, abyste zajistili, že mfc správně inicializoval modul runtime ovládacího prvku pro úpravy s formátováním. Pokud voláte metodu Create CRichEditCtrl, CRichEditViewnebo CRichEditDoc, obvykle nepotřebujete volat tuto funkci, ale v některých případech to může být nutné.

Požadavky

Záhlaví afxwin.h

AfxInitRichEdit2

Voláním této funkce inicializujete ovládací prvek pro úpravy s formátováním (verze 2.0 a novější) pro aplikaci.

BOOL AFXAPI AfxInitRichEdit2();

Poznámky

Voláním této funkce načtete RICHED20.DLL a inicializujete verzi 2.0 ovládacího prvku pro úpravy s formátováním. Pokud voláte metodu Create CRichEditCtrl, CRichEditViewnebo CRichEditDoc, obvykle nepotřebujete volat tuto funkci, ale v některých případech to může být nutné.

Požadavky

Záhlaví afxwin.h

AfxIsExtendedFrameClass

Určuje, zda je dané okno objektem rozšířeného rámce.

Syntaxe

BOOL AFXAPI AfxIsExtendedFrameClass( CWnd* pWnd );

Parametry

pWnd
[v] Ukazatel na objekt, který je odvozen z CWnd.

Návratová hodnota

TRUE je-li poskytnuté okno objektem rozšířeného rámce; jinak FALSE.

Poznámky

Tato metoda vrátí TRUE , pokud pWnd je odvozena z jedné z následujících tříd:

  • CFrameWndEx

  • CMDIFrameWndEx

  • COleIPFrameWndEx

  • COleDocIPFrameWndEx

  • CMDIChildWndEx

Tato metoda je užitečná, když potřebujete ověřit, že parametr funkce nebo metody je rozšířené okno rámce.

Požadavky

Záhlaví: afxpriv.h

AfxIsMFCToolBar

Určuje, zda je dané okno objekt panelu nástrojů.

Syntaxe

BOOL AFXAPI AfxIsMFCToolBar(CWnd* pWnd);

Parametry

pWnd
[v] Ukazatel na objekt, který je odvozen z CWnd.

Návratová hodnota

TRUE je-li poskytnuté okno objekt panelu nástrojů; jinak FALSE.

Poznámky

Tato metoda vrátí TRUE , pokud pWnd je odvozen z CMFCToolBar. Tato metoda je užitečná, pokud je nutné ověřit, že funkce nebo parametr metody je CMFCToolBar objekt.

Požadavky

Záhlaví: afxpriv.h

AfxKeyboardManager

Ukazatel na globálního správce klávesnice

Syntaxe

CKeyboardManager* afxKeyboardManager;

Požadavky

Záhlaví: afxkeyboardmanager.h

AfxLoadLibrary

Slouží AfxLoadLibrary k mapování modulu knihovny DLL.

HINSTANCE AFXAPI AfxLoadLibrary(LPCTSTR lpszModuleName);

Parametry

lpszModuleName
Odkazuje na řetězec ukončený hodnotou null, který obsahuje název modulu (soubor .DLL nebo .EXE). Zadaný název je název modulu.

Pokud řetězec určuje cestu, ale soubor v zadaném adresáři neexistuje, funkce selže.

Pokud není zadaná cesta a přípona souboru se vynechá, připojí se výchozí přípona .DLL. Řetězec názvu souboru však může obsahovat znak koncového bodu (.), který označuje, že název modulu nemá žádné rozšíření. Pokud není zadána žádná cesta, funkce používá pořadí hledání pro desktopové aplikace.

Návratová hodnota

Pokud je funkce úspěšná, návratová hodnota je popisovačem modulu. Při selhání je NULLnávratová hodnota .

Poznámky

Vrátí popisovač, který GetProcAddress lze použít k získání adresy funkce KNIHOVNY DLL. AfxLoadLibrary lze také použít k mapování dalších spustitelných modulů.

Každý proces udržuje referenční počet pro každý načtený modul knihovny. Tento počet odkazů se při každém AfxLoadLibrary zavolání zvýší a při každém AfxFreeLibrary zavolání se sníží. Když počet odkazů dosáhne nuly, modul se nemapuje z adresního prostoru volajícího procesu a popisovač už není platný.

Nezapomeňte použít AfxLoadLibrary a AfxFreeLibrary (místo funkcí LoadLibrary Win32 a FreeLibrary) pokud vaše aplikace používá více vláken, a pokud dynamicky načte knihovnu DLL rozšíření MFC. Použití AfxLoadLibrary a AfxFreeLibrary zajištění, že spouštěcí a vypínání kód, který se spustí při načtení a uvolnění knihovny DLL rozšíření MFC, není poškozen globální stav MFC.

Použití AfxLoadLibrary v aplikaci vyžaduje dynamické propojení s verzí knihovny MFC knihovny DLL. Hlavičkový soubor pro AfxLoadLibrary, Afxdll_.hje zahrnut pouze v případě, že MFC je propojena s aplikací jako dll. Tento požadavek je záměrně, protože je nutné propojit s verzí knihovny MFC knihovny MFC, aby bylo možné použít nebo vytvořit rozšiřující knihovny DLL knihovny MFC.

Příklad

// 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();
}

Požadavky

Záhlaví afxdll_.h

AfxLoadLibraryEx

Slouží AfxLoadLibraryEx k mapování modulu knihovny DLL.

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

Parametry

lpFileName
Odkazuje na řetězec ukončený hodnotou null, který obsahuje název modulu (soubor .DLL nebo .EXE). Zadaný název je název modulu.

Pokud řetězec určuje cestu, ale soubor v zadaném adresáři neexistuje, funkce selže.

Pokud není zadaná cesta a přípona souboru se vynechá, připojí se výchozí přípona .DLL. Řetězec názvu souboru však může obsahovat znak koncového bodu (.), který označuje, že název modulu nemá žádné rozšíření. Pokud není zadána žádná cesta, funkce používá pořadí hledání pro desktopové aplikace.

hFile
Tento parametr je vyhrazen pro budoucí použití. Musí to být NULL.

dwFlags
Akce, která se má provést při načítání modulu. Pokud nejsou zadány žádné příznaky, chování této funkce je stejné jako AfxLoadLibrary funkce. Možné hodnoty tohoto parametru LoadLibraryEx jsou popsány v dokumentaci.

Návratová hodnota

Pokud je funkce úspěšná, návratová hodnota je popisovačem modulu. Při selhání je NULLnávratová hodnota .

Poznámky

AfxLoadLibraryEx vrátí popisovač, který GetProcAddress lze použít k získání adresy funkce KNIHOVNY DLL. AfxLoadLibraryEx lze také použít k mapování dalších spustitelných modulů.

Každý proces udržuje referenční počet pro každý načtený modul knihovny. Tento počet odkazů se při každém AfxLoadLibraryEx zavolání zvýší a při každém AfxFreeLibrary zavolání se sníží. Když počet odkazů dosáhne nuly, modul se nemapuje z adresního prostoru volajícího procesu a popisovač už není platný.

Pokud vaše aplikace používá více vláken a dynamicky načítá knihovnu DLL rozšíření MFC, nezapomeňte použít AfxLoadLibraryEx a AfxFreeLibrary (nikoli funkce LoadLibraryEx Win32 a FreeLibrary) a pokud aplikace dynamicky načte rozšiřující knihovnu DLL. Použití AfxLoadLibraryEx a AfxFreeLibrary zajištění spuštění a vypnutí kódu, který se spustí při načtení a uvolnění knihovny DLL rozšíření MFC není poškozen globální stav MFC.

Použití AfxLoadLibraryEx v aplikaci vyžaduje dynamické propojení s verzí knihovny MFC knihovny DLL. Hlavičkový soubor pro AfxLoadLibraryEx, Afxdll_.hje zahrnut pouze v případě, že MFC je propojena s aplikací jako dll. Tento požadavek je záměrně, protože je nutné propojit s verzí knihovny MFC knihovny MFC, aby bylo možné použít nebo vytvořit rozšiřující knihovny DLL knihovny MFC.

Požadavky

Záhlaví afxdll_.h

AfxMenuTearOffManager

Ukazatel na globálního správce nabídek pro odtržení.

Syntaxe

CMenuTearOffManager* g_pTearOffMenuManager;

Požadavky

Záhlaví: afxmenutearoffmanager.h

AfxMouseManager

Ukazatel na globálního správce myši.

Syntaxe

CMouseManager* afxMouseManager;

Požadavky

Záhlaví: afxmousemanager.h

AfxRegisterClass

Tato funkce slouží k registraci tříd oken v knihovně DLL, která používá mfc.

BOOL AFXAPI AfxRegisterClass(WNDCLASS* lpWndClass);

Parametry

lpWndClass
Ukazatel na WNDCLASS strukturu obsahující informace o třídě okna, která se má zaregistrovat. Další informace o této struktuře najdete v sadě Windows SDK.

Návratová hodnota

TRUE pokud je třída úspěšně zaregistrována; jinak FALSE.

Poznámky

Pokud použijete tuto funkci, třída se při uvolnění knihovny DLL automaticky zruší.

V sestaveních jiných než AfxRegisterClass DLL je identifikátor definován jako makro, které se mapuje na funkci RegisterClassWindows , protože třídy registrované v aplikaci jsou automaticky zrušeny registrace. Pokud místo toho použijete AfxRegisterClass RegisterClass, můžete kód použít beze změny v aplikaci i v knihovně DLL.

Příklad

// 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");
}

Požadavky

Záhlaví afxwin.h

AfxRegisterWndClass

Umožňuje registrovat vlastní třídy oken.

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

Parametry

nClassStyle
Určuje styl třídy systému Windows nebo kombinaci stylů vytvořených pomocí bitového operátoru OR (|) pro třídu okna. Seznam stylů tříd najdete ve WNDCLASS struktuře v sadě Windows SDK. Pokud NULLjsou výchozí hodnoty nastaveny takto:

  • Nastaví styl myši na CS_DBLCLKS, který odesílá zprávy poklikáním do okna procedura, když uživatel dvakrát klikne myší.

  • Nastaví styl kurzoru šipky na standard IDC_ARROWWindows .

  • Nastaví štětec NULLna pozadí, aby okno neodmazalo jeho pozadí.

  • Nastaví ikonu na standardní ikonu s logem Windows s příznakem waving.

hCursor
Určuje popisovač prostředku kurzoru, který se má nainstalovat v každém okně vytvořeném z třídy okna. Pokud použijete výchozí hodnotu 0, zobrazí se standardní IDC_ARROW kurzor.

hbrBackground
Určuje popisovač prostředku štětce, který se má nainstalovat v každém okně vytvořeném z třídy okna. Pokud použijete výchozí hodnotu 0, budete mít NULL štětec na pozadí a ve výchozím nastavení nebude okno během zpracování WM_ERASEBKGNDmazat jeho pozadí .

hIcon
Určuje popisovač prostředku ikony, který se má nainstalovat v každém okně vytvořeném z třídy okna. Pokud použijete výchozí hodnotu 0, zobrazí se standardní ikona s logem Windows s příznakem waving.

Návratová hodnota

Řetězec ukončený hodnotou null obsahující název třídy. Tento název Create třídy můžete předat členské funkci v CWnd nebo jiné **CWnd-**odvozené třídy pro vytvoření okna. Název je generován knihovnou tříd Microsoft Foundation.

Poznámka:

Návratová hodnota je ukazatel na statickou vyrovnávací paměť. Pokud chcete tento řetězec uložit, přiřaďte ho CString proměnné.

Poznámky

Knihovna tříd Microsoft Foundation pro vás automaticky zaregistruje několik standardních tříd oken. Tuto funkci zavolejte, pokud chcete zaregistrovat vlastní třídy oken.

Název zaregistrovaný pro třídu AfxRegisterWndClass závisí výhradně na parametrech. Pokud voláte AfxRegisterWndClass vícekrát s identickými parametry, zaregistruje se při prvním volání pouze třída. Pozdější volání AfxRegisterWndClass s identickými parametry vrátí název již registrované třídy.

Pokud místo získání samostatné třídy okna pro každou třídu voláte AfxRegisterWndClass více CWndodvozených tříd s identickými parametry, každá třída sdílí stejnou třídu okna. Toto sdílení může způsobit problémy, pokud CS_CLASSDC se používá styl třídy. Místo více CS_CLASSDC tříd oken skončíte pouze jednou CS_CLASSDC třídou okna. Všechna okna C++, která používají tuto třídu, sdílejí stejný řadič domény. Chcete-li se tomuto problému vyhnout, zavolejte AfxRegisterClass na registraci třídy.

Další informace o registraci třídy okna a AfxRegisterWndClass funkci najdete v technické poznámce TN001: Registrace třídy okna.

Příklad

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();
}

Požadavky

Záhlaví afxwin.h

AfxSetPerUserRegistration

Nastaví, jestli aplikace přesměruje přístup registru k HKEY_CURRENT_USER uzlu (HKCU).

void AFXAPI AfxSetPerUserRegistration(BOOL bEnable);

Parametry

bEnable
[v] TRUE označuje, že informace registru jsou směrovány do HKCU uzlu. FALSE označuje, že aplikace zapisuje informace registru do výchozího uzlu. Výchozí uzel je HKEY_CLASSES_ROOT (HKCR).

Poznámky

Před systémem Windows Vista aplikace, které přistupovaly k registru, běžně používaly HKEY_CLASSES_ROOT uzel. Nicméně, s Windows Vista nebo novější operační systémy, musíte spustit aplikaci v režimu se zvýšenými oprávněními k zápisu do HKCR.

Tato metoda umožňuje aplikaci číst a zapisovat do registru bez spuštění v režimu se zvýšenými oprávněními. Funguje přesměrováním přístupu z HKCR registru do HKCU. Další informace naleznete v tématu Stránky vlastností linkeru.

Pokud povolíte přesměrování registru, architektura přesměruje přístup z HKCR .HKEY_CURRENT_USER\Software\Classes Přesměrování ovlivní jenom architektury MFC a ATL.

Výchozí implementace přistupuje k registru v části HKCR.

Požadavky

Záhlaví afxstat_.h

AfxSetResourceHandle

Tato funkce slouží k nastavení HINSTANCE popisovače, který určuje, kde jsou načteny výchozí prostředky aplikace.

void AFXAPI AfxSetResourceHandle(HINSTANCE hInstResource);

Parametry

hInstResource
Instance nebo modul zpracovává soubor .EXE nebo DLL, ze kterého jsou načteny prostředky aplikace.

Příklad

// This code is taken from CMyApp::InitInstance
HINSTANCE hRes = NULL;
hRes = LoadLibrary(_T("Resource.dll"));
if (hRes)
   AfxSetResourceHandle(hRes);

Požadavky

Záhlaví afxwin.h

AfxShellManager

Ukazatel na globálního správce prostředí.

Syntaxe

CShellManager* afxShellManager;

Požadavky

Záhlaví: afxshellmanager.h

AfxSocketInit

Voláním této funkce v CWinApp::InitInstance přepsání inicializujete rozhraní Windows Sockets.

BOOL AfxSocketInit(WSADATA* lpwsaData = NULL);

Parametry

lpwsaData
Ukazatel na WSADATA strukturu. Pokud lpwsaData není rovno NULL, pak adresa WSADATA struktury je vyplněna voláním WSAStartup. Tato funkce také zajišťuje, aby WSACleanup se vám volala před ukončením aplikace.

Návratová hodnota

Nenulové, pokud je funkce úspěšná; jinak 0.

Poznámky

Při použití soketů MFC v sekundárních vláknech v staticky propojené aplikaci MFC je nutné volat AfxSocketInit v každém vlákně, které používá sokety k inicializaci knihoven soketů. Ve výchozím nastavení AfxSocketInit se volá pouze v primárním vlákně.

Požadavky

Záhlaví afxsock.h

AfxUserToolsManager

Ukazatel na globálního správce uživatelských nástrojů.

Syntaxe

CUserToolsManager* afxUserToolsManager;

Požadavky

Záhlaví: afxusertoolsmanager.h

AfxWinInit

Tato funkce je volána funkcí zadanou WinMain knihovnou MFC jako součást CWinApp inicializace aplikace založené na grafickém uživatelském rozhraní pro inicializaci knihovny MFC.

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

Parametry

hInstance
Popisovač aktuálně spuštěného modulu.

hPrevInstance
Popisovač předchozí instance aplikace Pro aplikaci založenou na Win32 je tento parametr vždy NULL.

lpCmdLine
Odkazuje na řetězec ukončený hodnotou null určující příkazový řádek pro aplikaci.

nCmdShow
Určuje způsob zobrazení hlavního okna aplikace grafického uživatelského rozhraní.

Poznámky

Pro konzolovou aplikaci, která nepoužívá funkci zadanou knihovnou WinMain MFC, je nutné volat AfxWinInit přímo k inicializaci knihovny MFC.

Pokud voláte AfxWinInit sami sebe, měli byste deklarovat instanci CWinApp třídy. V případě konzolové aplikace se můžete rozhodnout, že nebudete odvozovat vlastní třídu CWinApp a místo toho použít instanci CWinApp přímo. Tato technika je vhodná, pokud se rozhodnete ponechat všechny funkce pro vaši aplikaci v implementaci main.

Poznámka:

Při vytváření aktivačního kontextu pro sestavení používá MFC prostředek manifestu poskytnutý uživatelským modulem. Kontext aktivace se vytvoří v AfxWinInitsouboru . Další informace naleznete v tématu Podpora kontextů aktivace ve stavu modulu MFC.

Příklad

#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;
}

Požadavky

Záhlaví afxwin.h

Viz také

Makra a globální objekty
CWinApp Třída
CContextMenuManager Třída
CWnd Třída
CFrameWndEx Třída
CMFCToolBar Třída
CKeyboardManager Třída
CMenuTearOffManager Třída
CMouseManager Třída
CShellManager Třída
CUserToolsManager Třída