Condividi tramite


Informazioni sull'applicazione e gestione

Quando si scrive un'applicazione, si crea un singolo CWinAppoggetto derivato da . A volte, è possibile ottenere informazioni su questo oggetto dall'esterno dell'oggetto CWinAppderivato 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. Utilizzare CREATE_SUSPENDED se si desidera inizializzare i dati dei membri dell'oggetto CWinThread , ad esempio m_bAutoDelete o qualsiasi membro della classe derivata, prima che il thread inizi l'esecuzione. Al termine dell'inizializzazione, usare CWinThread::ResumeThread per avviare il thread in esecuzione. Il thread non verrà eseguito fino a quando CWinThread::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:

  1. Il modulo principale, se si tratta di una DLL di estensione MFC.

  2. Moduli non di sistema.

  3. Moduli specifici del linguaggio.

  4. Il modulo principale, se si tratta di una DLL di sistema.

  5. 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 FindResourcewindows .

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, CRichEditViewo 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, CRichEditViewo 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 RegisterClassdi 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_ERASEBKGNDdi .

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ù CWndclassi 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