Informazioni sull'applicazione e gestione
Quando si scrive un'applicazione, si crea un singolo CWinApp
oggetto derivato da . A volte, è possibile ottenere informazioni su questo oggetto dall'esterno dell'oggetto CWinApp
derivato da . Oppure potrebbe essere necessario accedere ad altri oggetti "manager" globali.
La libreria di classi Di Microsoft Foundation fornisce le funzioni globali seguenti che consentono di eseguire queste attività:
Funzioni di gestione e informazioni sulle applicazioni
Nome | Descrizione |
---|---|
AfxBeginThread |
Crea un nuovo thread. |
AfxContextMenuManager |
Puntatore alla gestione menu di scelta rapida globale. |
AfxEndThread |
Termina il thread corrente. |
AfxFindResourceHandle |
Guida la catena di risorse e individua una risorsa specifica in base all'ID risorsa e al tipo di risorsa. |
AfxFreeLibrary |
Decrementa il conteggio dei riferimenti del modulo DLL (Dynamic Link Library) caricato. Quando il conteggio dei riferimenti raggiunge zero, il modulo viene decompresso. |
AfxGetApp |
Restituisce un puntatore al singolo CWinApp oggetto dell'applicazione. |
AfxGetAppName |
Restituisce una stringa contenente il nome dell'applicazione. |
AfxGetInstanceHandle |
Restituisce un oggetto HINSTANCE che rappresenta questa istanza dell'applicazione. |
AfxGetMainWnd |
Restituisce un puntatore alla finestra "main" corrente di un'applicazione non OLE o alla finestra cornice sul posto di un'applicazione server. |
AfxGetPerUserRegistration |
Usare questa funzione per determinare se l'applicazione reindirizza l'accesso al Registro di sistema al HKEY_CURRENT_USER nodo (HKCU ). |
AfxGetResourceHandle |
Restituisce un oggetto HINSTANCE all'origine delle risorse predefinite dell'applicazione. Usare per accedere direttamente alle risorse dell'applicazione. |
AfxGetThread |
Recupera un puntatore all'oggetto CWinThread corrente. |
AfxInitRichEdit |
Inizializza il controllo rich edit della versione 1.0 per l'applicazione. |
AfxInitRichEdit2 |
Inizializza il controllo rich edit della versione 2.0 e successive per l'applicazione. |
AfxIsExtendedFrameClass |
Determina se la finestra specificata è un oggetto frame esteso. |
AfxIsMFCToolBar |
Determina se la finestra specificata è un oggetto della barra degli strumenti. |
AfxKeyboardManager |
Puntatore al gestore della tastiera globale. |
AfxLoadLibrary |
Esegue il mapping di un modulo DLL e restituisce un handle che può essere usato per ottenere l'indirizzo di una funzione DLL. |
AfxLoadLibraryEx |
Esegue il mapping di un modulo DLL usando le opzioni specificate e restituisce un handle che può essere usato per ottenere l'indirizzo di una funzione DLL. |
AfxMenuTearOffManager |
Puntatore al gestore di menu di disinstallazione globale. |
AfxMouseManager |
Puntatore al gestore globale del mouse. |
AfxRegisterClass |
Registra una classe di finestra in una DLL che usa MFC. |
AfxRegisterWndClass |
Registra una classe finestra di Windows per integrare quelle registrate automaticamente da MFC. |
AfxSetPerUserRegistration |
Imposta un valore che indica se l'applicazione reindirizza l'accesso del Registro di sistema al HKEY_CURRENT_USER nodo (HKCU ). |
AfxSetResourceHandle |
Imposta l'handle HINSTANCE in cui vengono caricate le risorse predefinite dell'applicazione. |
AfxShellManager |
Puntatore al gestore della shell globale. |
AfxSocketInit |
Chiamato in un CWinApp::InitInstance override per inizializzare Windows Sockets. |
AfxUserToolsManager |
Puntatore al gestore strumenti utente globale. |
AfxWinInit |
Chiamato dalla funzione fornita WinMain da MFC, come parte dell'inizializzazione CWinApp di un'applicazione basata su GUI, per inizializzare MFC. Deve essere chiamato direttamente per le applicazioni console che usano MFC. |
AfxBeginThread
Chiamare questa funzione per creare un nuovo thread.
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);
Parametri
pfnThreadProc
Punta alla funzione di controllo per il thread di lavoro. Il puntatore non può essere NULL
. Questa funzione deve essere dichiarata come segue:
UINT __cdecl MyControllingFunction( LPVOID pParam );
pThreadClass
Oggetto RUNTIME_CLASS
di un oggetto derivato da CWinThread
.
pParam
Parametro da passare alla funzione di controllo.
nPriority
Priorità da impostare per il thread. Per un elenco completo e una descrizione delle priorità disponibili, vedere SetThreadPriority
in Windows SDK.
nStackSize
Specifica le dimensioni in byte dello stack per il nuovo thread. Se 0, per impostazione predefinita le dimensioni dello stack corrispondono allo stesso stack di dimensioni del thread di creazione.
dwCreateFlags
Specifica un flag aggiuntivo che controlla la creazione del thread. Questo flag può contenere uno dei due valori seguenti:
CREATE_SUSPENDED
Avviare il thread con un conteggio di sospensione di uno. UtilizzareCREATE_SUSPENDED
se si desidera inizializzare i dati dei membri dell'oggettoCWinThread
, ad esempiom_bAutoDelete
o qualsiasi membro della classe derivata, prima che il thread inizi l'esecuzione. Al termine dell'inizializzazione, usareCWinThread::ResumeThread
per avviare il thread in esecuzione. Il thread non verrà eseguito fino a quandoCWinThread::ResumeThread
non viene chiamato .0 Avviare il thread immediatamente dopo la creazione.
lpSecurityAttrs
Punta a una SECURITY_ATTRIBUTES
struttura che specifica gli attributi di sicurezza per il thread. Se NULL
, vengono usati gli stessi attributi di sicurezza del thread di creazione. Per altre informazioni su questa struttura, vedere Windows SDK.
Valore restituito
Puntatore all'oggetto thread appena creato o NULL
in caso di errore.
Osservazioni:
La prima forma di crea un thread di AfxBeginThread
lavoro. Il secondo modulo crea un thread che può fungere da thread dell'interfaccia utente o come thread di lavoro.
AfxBeginThread
crea un nuovo CWinThread
oggetto, chiama la funzione CreateThread
per avviare l'esecuzione del thread e restituisce un puntatore al thread. I controlli vengono eseguiti in tutta la procedura per assicurarsi che tutti gli oggetti vengano deallocati correttamente in caso di esito negativo di qualsiasi parte della creazione. Per terminare il thread, chiamare AfxEndThread
dall'interno del thread o restituire dalla funzione di controllo del thread di lavoro.
Il multithreading deve essere abilitato dall'applicazione; in caso contrario, questa funzione avrà esito negativo. Per altre informazioni sull'abilitazione del multithreading, vedere /MD
, /MT
/LD
(Usare la libreria di runtime).
Per altre informazioni su AfxBeginThread
, vedere gli articoli Multithreading: Creazione di thread di lavoro e multithreading: creazione di thread dell'interfaccia utente.
Esempio
Vedere l'esempio per CSocket::Attach
.
Requisiti
Intestazione afxwin.h
AfxContextMenuManager
Puntatore alla gestione menu di scelta rapida globale.
Sintassi
CContextMenuManager* afxContextMenuManager;
Requisiti
Intestazione: afxcontextmenumanager.h
AfxEndThread
Chiamare questa funzione per terminare il thread attualmente in esecuzione.
void AFXAPI AfxEndThread(
UINT nExitCode,
BOOL bDelete = TRUE);
Parametri
nExitCode
Specifica il codice di uscita del thread.
bDelete
Elimina l'oggetto thread dalla memoria.
Osservazioni:
Deve essere chiamato dall'interno del thread da terminare.
Per altre informazioni su AfxEndThread
, vedere l'articolo Multithreading: Terminazione di thread.
Requisiti
Intestazione afxwin.h
AfxFindResourceHandle
Usare AfxFindResourceHandle
per esaminare la catena di risorse e individuare una risorsa specifica in base all'ID risorsa e al tipo di risorsa.
Sintassi
HINSTANCE AFXAPI AfxFindResourceHandle( LPCTSTR lpszName, LPCTSTR lpszType );
Parametri
lpszName
Puntatore a una stringa contenente l'ID risorsa.
lpszType
Puntatore al tipo di risorsa. Per un elenco dei tipi di risorse, vedere FindResource
in Windows SDK.
Valore restituito
Handle per il modulo che contiene la risorsa.
Osservazioni:
AfxFindResourceHandle
trova la risorsa specifica e restituisce un handle al modulo che contiene la risorsa. La risorsa potrebbe trovarsi in qualsiasi DLL di estensione MFC caricata. AfxFindResourceHandle
indica a quale risorsa è associata.
I moduli vengono cercati in questo ordine:
Il modulo principale, se si tratta di una DLL di estensione MFC.
Moduli non di sistema.
Moduli specifici del linguaggio.
Il modulo principale, se si tratta di una DLL di sistema.
Moduli di sistema.
Requisiti
Intestazione: afxwin.h
AfxFreeLibrary
Sia AfxFreeLibrary
che AfxLoadLibrary
mantengono un conteggio dei riferimenti per ogni modulo di libreria caricato.
BOOL AFXAPI AfxFreeLibrary(HINSTANCE hInstLib);
Parametri
hInstLib
Handle del modulo di libreria caricato. AfxLoadLibrary
restituisce questo handle.
Valore restituito
TRUE
se la funzione ha esito positivo; in caso contrario, FALSE
.
Osservazioni:
AfxFreeLibrary
decrementa il conteggio dei riferimenti del modulo di libreria a collegamento dinamico (DLL) caricato. Quando il conteggio dei riferimenti arriva a zero, il modulo viene disassociato dallo spazio degli indirizzi del processo chiamante e l'handle non è più valido. Questo conteggio dei riferimenti viene incrementato ogni volta che viene chiamata AfxLoadLibrary
.
Prima di disassociare un modulo di libreria, il sistema consente alla DLL di rimuoverlo dai processi che lo stanno utilizzando. In questo modo la DLL offre la possibilità di pulire le risorse allocate per il processo corrente. Dopo il completamento della funzione del punto di ingresso, il modulo di libreria viene rimosso dallo spazio degli indirizzi del processo corrente.
Utilizzare AfxLoadLibrary
per eseguire il mapping di un modulo DLL.
Assicurarsi di usare AfxFreeLibrary
e AfxLoadLibrary
(invece delle funzioni FreeLibrary
Win32 e LoadLibrary
) se l'applicazione usa più thread. L'uso AfxLoadLibrary
e AfxFreeLibrary
garantisce che il codice di avvio e arresto eseguito quando la DLL dell'estensione MFC viene caricata e scaricata non danneggia lo stato MFC globale.
Esempio
Vedere l'esempio per AfxLoadLibrary
.
Requisiti
Intestazione afxdll_.h
AfxGetApp
Il puntatore restituito da questa funzione può essere usato per accedere alle informazioni dell'applicazione, ad esempio il codice di invio del messaggio principale o la finestra superiore.
CWinApp* AFXAPI AfxGetApp();
Valore restituito
Puntatore al singolo CWinApp
oggetto per l'applicazione.
Osservazioni:
Se questo metodo restituisce NULL
, potrebbe indicare che la finestra principale dell'applicazione non è stata ancora completamente inizializzata. Potrebbe anche indicare un problema.
Esempio
// Print the application's executable filename.
TRACE(_T("Executable filename = %s\n"), AfxGetApp()->m_pszExeName);
Requisiti
Intestazione afxwin.h
AfxGetAppName
La stringa restituita può essere usata per i messaggi di diagnostica o come radice per i nomi di stringa temporanei.
LPCTSTR AFXAPI AfxGetAppName();
Valore restituito
Stringa con terminazione Null contenente il nome dell'applicazione.
Esempio
// Print the application name to the debugger output window.
TRACE(_T("Application name is %s\n"), AfxGetAppName());
Requisiti
Intestazione afxwin.h
AfxGetInstanceHandle
Questa funzione consente di recuperare l'handle dell'istanza dell'applicazione corrente.
HINSTANCE AFXAPI AfxGetInstanceHandle();
Valore restituito
Oggetto HINSTANCE
all'istanza corrente dell'applicazione. Se viene chiamato dall'interno di una DLL collegata alla versione USRDLL di MFC, viene restituito un HINSTANCE
alla DLL.
Osservazioni:
AfxGetInstanceHandle
restituisce sempre il HINSTANCE
del file eseguibile (.EXE) a meno che non venga chiamato da una DLL collegata alla versione USRDLL di MFC. In questo caso, restituisce un oggetto HINSTANCE
alla DLL.
Esempio
// Print the application instance handle to the debugger output window.
TRACE(_T("Application instance handle is 0x%0X\n"), AfxGetInstanceHandle());
Requisiti
Intestazione afxwin.h
AfxGetMainWnd
Se l'applicazione è un server OLE, chiamare questa funzione per recuperare un puntatore alla finestra principale attiva dell'applicazione. Usare questo risultato anziché fare riferimento direttamente al m_pMainWnd
membro dell'oggetto applicazione.
CWnd* AFXAPI AfxGetMainWnd();
Valore restituito
Restituisce un puntatore all'oggetto finestra cornice che contiene il documento attivo sul posto, se il server dispone di un oggetto attivo sul posto all'interno di un contenitore attivo.
Se non è presente alcun oggetto attivo sul posto all'interno di un contenitore o l'applicazione non è un server OLE, questa funzione restituisce l'oggetto m_pMainWnd
dell'applicazione.
Se AfxGetMainWnd
viene chiamata dal thread principale dell'applicazione, restituisce la finestra principale dell'applicazione sulla base delle regole sopra indicate. Se la funzione viene chiamata da un thread secondario nell'applicazione, la funzione restituisce la finestra principale associata al thread che ha effettuato la chiamata.
Osservazioni:
Se l'applicazione non è un server OLE, la chiamata a questa funzione equivale a fare riferimento direttamente al m_pMainWnd
membro dell'oggetto applicazione.
Esempio
//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);
Requisiti
Intestazione afxwin.h
AfxGetPerUserRegistration
Usare questa funzione per determinare se l'applicazione reindirizza l'accesso al Registro di sistema al HKEY_CURRENT_USER
nodo (HKCU
).
BOOL AFXAPI AfxGetPerUserRegistration();
Valore restituito
TRUE
indica che le informazioni del Registro di sistema sono indirizzate al HKCU
nodo. FALSE
indica che l'applicazione scrive le informazioni del Registro di sistema nel nodo predefinito. Il nodo predefinito è HKEY_CLASSES_ROOT
(HKCR
).
Osservazioni:
Se si abilita il reindirizzamento del Registro di sistema, il framework reindirizza l'accesso da HKCR
a HKEY_CURRENT_USER\Software\Classes
. Solo i framework MFC e ATL sono interessati dal reindirizzamento.
Per modificare se l'applicazione reindirizza l'accesso al Registro di sistema, usare AfxSetPerUserRegistration
.
Requisiti
Intestazione afxstat_.h
AfxGetResourceHandle
Usare l'handle HINSTANCE
restituito da questa funzione per accedere direttamente alle risorse dell'applicazione, ad esempio nelle chiamate alla funzione FindResource
windows .
extern HINSTANCE AfxGetResourceHandle();
Valore restituito
Handle HINSTANCE
in cui vengono caricate le risorse predefinite dell'applicazione.
Esempio
//Load the menu specifying the module handle where resource is to be
//found & resource ID
HMENU hMenu = ::LoadMenu(AfxGetResourceHandle(), MAKEINTRESOURCE(IDR_MAINFRAME));
Requisiti
Intestazione afxwin.h
AfxGetThread
Chiamare questa funzione per ottenere un puntatore all'oggetto CWinThread
che rappresenta il thread attualmente in esecuzione.
CWinThread* AfxGetThread();
Valore restituito
Puntatore al thread attualmente in esecuzione; in caso contrario NULL
, .
Osservazioni:
Deve essere chiamato dall'interno del thread.
Nota
Se si esegue la conversione di un progetto MFC chiamando AfxGetThread
da Visual C++ versioni 4.2, 5.0 o 6.0, AfxGetThread
chiama AfxGetApp
se non viene trovato alcun thread. Nelle versioni più recenti del compilatore restituisce AfxGetThread
NULL
se non è stato trovato alcun thread. Se si vuole il thread dell'applicazione, è necessario chiamare AfxGetApp
.
Esempio
//Print the current thread ID in the Debug Window
TRACE(_T("Current Thread ID = 0x%X\n"), AfxGetThread()->m_nThreadID);
Requisiti
Intestazione afxwin.h
AfxInitRichEdit
Chiamare questa funzione per inizializzare il controllo rich edit (versione 1.0) per l'applicazione.
BOOL AFXAPI AfxInitRichEdit();
Osservazioni:
Questa funzione viene fornita per la compatibilità con le versioni precedenti. Le nuove applicazioni devono usare AfxInitRichEdit2
.
AfxInitRichEdit
carica RICHED32.DLL
per inizializzare la versione 1.0 del controllo rich edit. Per usare la versione 2.0 e la 3.0 del controllo rich edit, RICHED20.DLL
è necessario caricare . Viene caricato effettuando una chiamata a AfxInitRichEdit2
.
Per aggiornare i controlli di modifica avanzata nelle applicazioni Visual C++ esistenti alla versione 2.0, aprire . Rc file come testo, modificare il nome della classe di ogni controllo rich edit da "RICHEDIT
" a "RichEdit20a
". Sostituire quindi la chiamata a AfxInitRichEdit
con AfxInitRichEdit2
.
Questa funzione inizializza anche la libreria dei controlli comuni, se la libreria non è già stata inizializzata per il processo. Se si usa il controllo di modifica avanzato direttamente dall'applicazione MFC, chiamare questa funzione per assicurarsi che MFC abbia inizializzato correttamente il runtime del controllo di modifica avanzato. Se si chiama il Create
metodo di CRichEditCtrl
, CRichEditView
o CRichEditDoc
, in genere non è necessario chiamare questa funzione, ma in alcuni casi potrebbe essere necessario.
Requisiti
Intestazione afxwin.h
AfxInitRichEdit2
Chiamare questa funzione per inizializzare il controllo rich edit (versione 2.0 e successive) per l'applicazione.
BOOL AFXAPI AfxInitRichEdit2();
Osservazioni:
Chiamare questa funzione per caricare e inizializzare la RICHED20.DLL
versione 2.0 del controllo rich edit. Se si chiama il Create
metodo di CRichEditCtrl
, CRichEditView
o CRichEditDoc
, in genere non è necessario chiamare questa funzione, ma in alcuni casi potrebbe essere necessario.
Requisiti
Intestazione afxwin.h
AfxIsExtendedFrameClass
Determina se la finestra specificata è un oggetto frame esteso.
Sintassi
BOOL AFXAPI AfxIsExtendedFrameClass( CWnd* pWnd );
Parametri
pWnd
[in] Puntatore a un oggetto derivato da CWnd
.
Valore restituito
TRUE
se la finestra specificata è un oggetto frame esteso; in caso contrario FALSE
, .
Osservazioni:
Il metodo restituisce TRUE
se pWnd
deriva da una delle classi seguenti:
CFrameWndEx
CMDIFrameWndEx
COleIPFrameWndEx
COleDocIPFrameWndEx
CMDIChildWndEx
Il metodo è utile quando è necessario convalidare che una funzione o un parametro del metodo è una finestra frame estesa.
Requisiti
Intestazione: afxpriv.h
AfxIsMFCToolBar
Determina se la finestra specificata è un oggetto della barra degli strumenti.
Sintassi
BOOL AFXAPI AfxIsMFCToolBar(CWnd* pWnd);
Parametri
pWnd
[in] Puntatore a un oggetto derivato da CWnd
.
Valore restituito
TRUE
se la finestra specificata è un oggetto barra degli strumenti; in caso contrario FALSE
, .
Osservazioni:
Questo metodo restituisce TRUE
se pWnd
deriva da CMFCToolBar
. Questo metodo è utile quando è necessario convalidare che una funzione o un parametro del metodo è un oggetto CMFCToolBar
.
Requisiti
Intestazione: afxpriv.h
AfxKeyboardManager
Puntatore al gestore della tastiera globale.
Sintassi
CKeyboardManager* afxKeyboardManager;
Requisiti
Intestazione: afxkeyboardmanager.h
AfxLoadLibrary
Utilizzare AfxLoadLibrary
per eseguire il mapping di un modulo DLL.
HINSTANCE AFXAPI AfxLoadLibrary(LPCTSTR lpszModuleName);
Parametri
lpszModuleName
Punta a una stringa con terminazione Null contenente il nome del modulo (un file .DLL o .EXE). Il nome specificato è il nome del modulo.
Se la stringa specifica un percorso ma il file non esiste nella directory specificata, la funzione ha esito negativo.
Se non viene specificato un percorso e l'estensione del nome file viene omessa, viene aggiunta l'estensione predefinita .DLL. Tuttavia, la stringa del nome file può includere un carattere di punto finale (.) per indicare che il nome del modulo non ha estensione. Quando non viene specificato alcun percorso, la funzione usa l'ordine di ricerca per le applicazioni desktop.
Valore restituito
Se la funzione ha esito positivo, il valore restituito è un handle per il modulo. In caso di errore, il valore restituito è NULL
.
Osservazioni:
Restituisce un handle che può essere usato in GetProcAddress
per ottenere l'indirizzo di una funzione DLL. AfxLoadLibrary
può essere usato anche per eseguire il mapping di altri moduli eseguibili.
Ogni processo gestisce un conteggio dei riferimenti per ogni modulo di libreria caricato. Questo conteggio dei riferimenti viene incrementato ogni volta AfxLoadLibrary
che viene chiamato e viene decrementato ogni volta AfxFreeLibrary
che viene chiamato . Quando il conteggio dei riferimenti arriva a zero, il modulo viene disassociato dallo spazio degli indirizzi del processo chiamante e l'handle non è più valido.
Assicurarsi di usare AfxLoadLibrary
e AfxFreeLibrary
(invece delle funzioni LoadLibrary
Win32 e FreeLibrary
) se l'applicazione usa più thread e se carica dinamicamente una DLL di estensione MFC. L'uso AfxLoadLibrary
e AfxFreeLibrary
garantisce che il codice di avvio e arresto eseguito quando la DLL dell'estensione MFC viene caricata e scaricata non danneggia lo stato MFC globale.
L'uso AfxLoadLibrary
in un'applicazione richiede il collegamento dinamico alla versione DLL di MFC. Il file di intestazione per AfxLoadLibrary
, Afxdll_.h
è incluso solo se MFC è collegato all'applicazione come DLL. Questo requisito è previsto perché è necessario collegarsi alla versione DLL di MFC per usare o creare DLL di estensione MFC.
Esempio
// 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();
}
Requisiti
Intestazione afxdll_.h
AfxLoadLibraryEx
Utilizzare AfxLoadLibraryEx
per eseguire il mapping di un modulo DLL.
HINSTANCE AFXAPI AfxLoadLibraryEx(LPCTSTR lpFileName, HANDLE hFile, DWORD dwFlags);
Parametri
lpFileName
Punta a una stringa con terminazione Null contenente il nome del modulo (un file .DLL o .EXE). Il nome specificato è il nome del modulo.
Se la stringa specifica un percorso ma il file non esiste nella directory specificata, la funzione ha esito negativo.
Se non viene specificato un percorso e l'estensione del nome file viene omessa, viene aggiunta l'estensione predefinita .DLL. Tuttavia, la stringa del nome file può includere un carattere di punto finale (.) per indicare che il nome del modulo non ha estensione. Quando non viene specificato alcun percorso, la funzione usa l'ordine di ricerca per le applicazioni desktop.
hFile
Questo parametro è riservato per usi futuri. che deve essere NULL
.
dwFlags
Azione da eseguire durante il caricamento del modulo. Se non vengono specificati flag, il comportamento di questa funzione è identico alla AfxLoadLibrary
funzione. I valori possibili di questo parametro sono descritti nella LoadLibraryEx
documentazione.
Valore restituito
Se la funzione ha esito positivo, il valore restituito è un handle per il modulo. In caso di errore, il valore restituito è NULL
.
Osservazioni:
AfxLoadLibraryEx
restituisce un handle che può essere usato in GetProcAddress
per ottenere l'indirizzo di una funzione DLL. AfxLoadLibraryEx
può essere usato anche per eseguire il mapping di altri moduli eseguibili.
Ogni processo gestisce un conteggio dei riferimenti per ogni modulo di libreria caricato. Questo conteggio dei riferimenti viene incrementato ogni volta AfxLoadLibraryEx
che viene chiamato e viene decrementato ogni volta AfxFreeLibrary
che viene chiamato . Quando il conteggio dei riferimenti arriva a zero, il modulo viene disassociato dallo spazio degli indirizzi del processo chiamante e l'handle non è più valido.
Assicurarsi di usare AfxLoadLibraryEx
e AfxFreeLibrary
(invece delle funzioni LoadLibraryEx
Win32 e FreeLibrary
) se l'applicazione usa più thread e se carica dinamicamente una DLL di estensione MFC. L'uso AfxLoadLibraryEx
e AfxFreeLibrary
garantisce che il codice di avvio e arresto eseguito quando la DLL dell'estensione MFC viene caricata e scaricata non danneggia lo stato MFC globale.
L'uso AfxLoadLibraryEx
in un'applicazione richiede il collegamento dinamico alla versione DLL di MFC. Il file di intestazione per AfxLoadLibraryEx
, Afxdll_.h
è incluso solo se MFC è collegato all'applicazione come DLL. Questo requisito è previsto perché è necessario collegarsi alla versione DLL di MFC per usare o creare DLL di estensione MFC.
Requisiti
Intestazione afxdll_.h
AfxMenuTearOffManager
Puntatore al gestore di menu di disinstallazione globale.
Sintassi
CMenuTearOffManager* g_pTearOffMenuManager;
Requisiti
Intestazione: afxmenutearoffmanager.h
AfxMouseManager
Puntatore al gestore globale del mouse.
Sintassi
CMouseManager* afxMouseManager;
Requisiti
Intestazione: afxmousemanager.h
AfxRegisterClass
Utilizzare questa funzione per registrare le classi di finestra in una DLL che utilizza MFC.
BOOL AFXAPI AfxRegisterClass(WNDCLASS* lpWndClass);
Parametri
lpWndClass
Puntatore a una WNDCLASS
struttura contenente informazioni sulla classe window da registrare. Per altre informazioni su questa struttura, vedere Windows SDK.
Valore restituito
TRUE
se la classe è stata registrata correttamente; in caso contrario FALSE
, .
Osservazioni:
Se si utilizza questa funzione, viene automaticamente annullata la registrazione della classe quando la DLL viene scaricata.
Nelle compilazioni non DLL, l'identificatore AfxRegisterClass
viene definito come una macro che esegue il mapping alla funzione RegisterClass
di Windows, poiché le classi registrate in un'applicazione vengono annullate automaticamente la registrazione. Se si usa AfxRegisterClass
invece di RegisterClass
, il codice può essere usato senza modificare sia in un'applicazione che in una DLL.
Esempio
// 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");
}
Requisiti
Intestazione afxwin.h
AfxRegisterWndClass
Consente di registrare classi finestra personalizzate.
LPCTSTR AFXAPI AfxRegisterWndClass(
UINT nClassStyle,
HCURSOR hCursor = 0,
HBRUSH hbrBackground = 0,
HICON hIcon = 0);
Parametri
nClassStyle
Specifica lo stile o la combinazione di stili della classe Windows, creati utilizzando l'operatore OR bit per bit per|
la classe window. Per un elenco degli stili di classe, vedi la WNDCLASS
struttura in Windows SDK. Se NULL
, le impostazioni predefinite sono impostate come segue:
Imposta lo stile del mouse su
CS_DBLCLKS
, che invia messaggi di doppio clic alla routine della finestra quando l'utente fa doppio clic sul mouse.Imposta lo stile del cursore freccia su Windows standard
IDC_ARROW
.Imposta il pennello di sfondo su
NULL
, in modo che la finestra non cancelli lo sfondo.Imposta l'icona sull'icona del logo Windows standard con contrassegno ondulato.
hCursor
Specifica un handle per la risorsa cursore da installare in ogni finestra creata dalla classe window. Se si usa il valore predefinito 0, si otterrà il cursore standard IDC_ARROW
.
hbrBackground
Specifica un handle per la risorsa pennello da installare in ogni finestra creata dalla classe window. Se si usa il valore predefinito 0, si avrà un NULL
pennello di sfondo e, per impostazione predefinita, la finestra non cancellerà lo sfondo durante l'elaborazione WM_ERASEBKGND
di .
hIcon
Specifica un handle per la risorsa icona da installare in ogni finestra creata dalla classe window. Se si usa il valore predefinito 0, si otterrà l'icona del logo Windows con contrassegno ondulato standard.
Valore restituito
Stringa con terminazione Null contenente il nome della classe. È possibile passare questo nome di classe alla Create
funzione membro in CWnd
o ad altre classi derivate **CWnd-
**per creare una finestra. Il nome viene generato dalla libreria di classi Microsoft Foundation.
Nota
Il valore restituito è un puntatore a un buffer statico. Per salvare questa stringa, assegnarla a una CString
variabile.
Osservazioni:
Microsoft Foundation Class Library registra automaticamente diverse classi di finestre standard. Chiamare questa funzione se si desidera registrare classi finestra personalizzate.
Il nome registrato per una classe AfxRegisterWndClass
da dipende esclusivamente dai parametri. Se si chiama AfxRegisterWndClass
più volte con parametri identici, viene registrata solo una classe nella prima chiamata. Le chiamate successive a AfxRegisterWndClass
con parametri identici restituiscono il nome classe già registrato.
Se si chiama AfxRegisterWndClass
per più CWnd
classi derivate da con parametri identici, anziché ottenere una classe finestra separata per ogni classe, ogni classe condivide la stessa classe finestra. Questa condivisione può causare problemi se viene usato lo stile della CS_CLASSDC
classe. Invece di più CS_CLASSDC
classi di finestre, si finisce con una CS_CLASSDC
sola classe finestra. Tutte le finestre C++ che usano tale classe condividono lo stesso controller di dominio. Per evitare questo problema, chiamare AfxRegisterClass
per registrare la classe .
Per altre informazioni sulla registrazione della classe finestra e sulla AfxRegisterWndClass
funzione, vedere la nota tecnica TN001: Registrazione della classe window.
Esempio
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();
}
Requisiti
Intestazione afxwin.h
AfxSetPerUserRegistration
Imposta un valore che indica se l'applicazione reindirizza l'accesso del Registro di sistema al HKEY_CURRENT_USER
nodo (HKCU
).
void AFXAPI AfxSetPerUserRegistration(BOOL bEnable);
Parametri
bEnable
[in] TRUE
indica che le informazioni del Registro di sistema sono indirizzate al HKCU
nodo. FALSE
indica che l'applicazione scrive le informazioni del Registro di sistema nel nodo predefinito. Il nodo predefinito è HKEY_CLASSES_ROOT
(HKCR
).
Osservazioni:
Prima di Windows Vista, le applicazioni che hanno eseguito l'accesso al Registro di sistema usano comunemente il HKEY_CLASSES_ROOT
nodo . Tuttavia, con Windows Vista o sistemi operativi successivi, è necessario eseguire un'applicazione in modalità con privilegi elevati per scrivere in HKCR
.
Questo metodo consente all'applicazione di leggere e scrivere nel Registro di sistema senza essere in esecuzione in modalità con privilegi elevati. Funziona reindirizzando l'accesso al Registro di sistema da HKCR
a HKCU
. Per altre informazioni, vedere Linker Property Pages.
Se si abilita il reindirizzamento del Registro di sistema, il framework reindirizza l'accesso da HKCR
a HKEY_CURRENT_USER\Software\Classes
. Solo i framework MFC e ATL sono interessati dal reindirizzamento.
L'implementazione predefinita accede al Registro di sistema in HKCR
.
Requisiti
Intestazione afxstat_.h
AfxSetResourceHandle
Usare questa funzione per impostare l'handle HINSTANCE
che determina dove vengono caricate le risorse predefinite dell'applicazione.
void AFXAPI AfxSetResourceHandle(HINSTANCE hInstResource);
Parametri
hInstResource
Handle dell'istanza o del modulo in un file .EXE o DLL da cui vengono caricate le risorse dell'applicazione.
Esempio
// This code is taken from CMyApp::InitInstance
HINSTANCE hRes = NULL;
hRes = LoadLibrary(_T("Resource.dll"));
if (hRes)
AfxSetResourceHandle(hRes);
Requisiti
Intestazione afxwin.h
AfxShellManager
Puntatore al gestore della shell globale.
Sintassi
CShellManager* afxShellManager;
Requisiti
Intestazione: afxshellmanager.h
AfxSocketInit
Chiamare questa funzione nell'override CWinApp::InitInstance
per inizializzare Windows Sockets.
BOOL AfxSocketInit(WSADATA* lpwsaData = NULL);
Parametri
lpwsaData
Puntatore a una WSADATA
struttura. Se lpwsaData
non è uguale a NULL
, l'indirizzo della WSADATA
struttura viene riempito dalla chiamata a WSAStartup
. Questa funzione garantisce anche che venga chiamato automaticamente prima che WSACleanup
l'applicazione termini.
Valore restituito
Diverso da zero se la funzione ha esito positivo; in caso contrario, 0.
Osservazioni:
Quando si usano socket MFC in thread secondari in un'applicazione MFC collegata in modo statico, è necessario chiamare AfxSocketInit
in ogni thread che usa socket per inizializzare le librerie socket. Per impostazione predefinita, AfxSocketInit
viene chiamato solo nel thread primario.
Requisiti
Intestazione afxsock.h
AfxUserToolsManager
Puntatore al gestore strumenti utente globale.
Sintassi
CUserToolsManager* afxUserToolsManager;
Requisiti
Intestazione: afxusertoolsmanager.h
AfxWinInit
Questa funzione viene chiamata dalla funzione fornita WinMain
da MFC, come parte dell'inizializzazione CWinApp
di un'applicazione basata su GUI, per inizializzare MFC.
BOOL AFXAPI AfxWinInit(
HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPTSTR lpCmdLine,
int nCmdShow);
Parametri
hInstance
Handle del modulo attualmente in esecuzione.
hPrevInstance
Handle di un'istanza precedente dell'applicazione. Per un'applicazione basata su Win32, questo parametro è sempre NULL
.
lpCmdLine
Punta a una stringa con terminazione Null che specifica la riga di comando per l'applicazione.
nCmdShow
Specifica la modalità di visualizzazione della finestra principale di un'applicazione gui.
Osservazioni:
Per un'applicazione console, che non usa la funzione fornita da WinMain
MFC, è necessario chiamare AfxWinInit
direttamente per inizializzare MFC.
Se si chiama AfxWinInit
se stessi, è necessario dichiarare un'istanza di una CWinApp
classe. Per un'applicazione console, è possibile scegliere di non derivare la propria classe da CWinApp
e usare invece un'istanza di CWinApp
direttamente. Questa tecnica è appropriata se si decide di lasciare tutte le funzionalità per l'applicazione nell'implementazione di main
.
Nota
Quando crea un contesto di attivazione per un assembly, MFC usa una risorsa manifesto fornita dal modulo utente. Il contesto di attivazione viene creato in AfxWinInit
. Per altre informazioni, vedere Supporto per i contesti di attivazione nello stato del modulo MFC.
Esempio
#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;
}
Requisiti
Intestazione afxwin.h
Vedi anche
Macro e globali
CWinApp
Classe
CContextMenuManager
Classe
CWnd
Classe
CFrameWndEx
Classe
CMFCToolBar
Classe
CKeyboardManager
Classe
CMenuTearOffManager
Classe
CMouseManager
Classe
CShellManager
Classe
CUserToolsManager
Classe