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ý CWinApp
objekt. 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žijteCREATE_SUSPENDED
, pokud chcete inicializovat jakákoli členová data objektuCWinThread
, napříkladm_bAutoDelete
nebo jakékoli členy odvozené třídy, před spuštěním vlákna. Po dokončení inicializace použijteCWinThread::ResumeThread
ke spuštění vlákna. Vlákno se nespustí, dokudCWinThread::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 NULL
se 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í:
Hlavní modul, pokud se jedná o rozšiřující knihovnu DLL knihovny MFC.
Nesystémové moduly.
Moduly specifické pro jazyk.
Hlavní modul, pokud se jedná o systémovou knihovnu DLL.
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
TRUE
pokud 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 FindResource
Windows .
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
AfxInitRichEdit2
nahraď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
, CRichEditView
nebo 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
, CRichEditView
nebo 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 NULL
ná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_.h
je 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 NULL
ná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_.h
je 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 RegisterClass
Windows , 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 NULL
jsou 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_ARROW
Windows .Nastaví štětec
NULL
na 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_ERASEBKGND
mazat 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 CWnd
odvozený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 AfxWinInit
souboru . 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