Servizi CWinApp speciali

Oltre a eseguire il ciclo di messaggi e offrire l'opportunità di inizializzare l'applicazione e pulire dopo di esso, CWinApp offre diversi altri servizi.

Registrazione shell

Per impostazione predefinita, la Creazione guidata applicazione MFC consente all'utente di aprire file di dati creati dall'applicazione facendo doppio clic su tali file in Esplora file o File Manager. Se l'applicazione è un'applicazione MDI e si specifica un'estensione per i file creati dall'applicazione, la Creazione guidata applicazione MFC aggiunge chiamate alle funzioni membro RegisterShellFileTypes e EnableShellOpen di CWinApp per l'override InitInstance che scrive automaticamente.

RegisterShellFileTypes registra i tipi di documenti dell'applicazione tramite Esplora File o File Manager. La funzione aggiunge voci al database di registrazione gestito da Windows. Le voci registrano ogni tipo di documento, associano un'estensione di file al tipo di file, specificano una riga di comando per aprire l'applicazione e specificano un comando di scambio dinamico di dati (DDE) per aprire un documento di quel tipo.

EnableShellOpen completa il processo consentendo all'applicazione di ricevere i comandi DDE da Esplora file o File Manager per aprire il file scelto dall'utente.

Questo supporto di registrazione automatica in CWinApp elimina la necessità di fornire un file con estensione reg insieme all'applicazione o di eseguire operazioni di installazione speciali.

Se si vuole inizializzare GDI+ per l'applicazione (chiamando GdiplusStartup nella funzione InitInstance ), è necessario eliminare il thread in background GDI+.

A tale scopo, impostare il SuppressBackgroundThread membro della struttura GdiplusStartupInput su TRUE. Quando si elimina il thread in background GDI+, è necessario eseguire le NotificationHook chiamate e NotificationUnhook subito prima di immettere e uscire dal ciclo di messaggi dell'applicazione. Per altre informazioni su queste chiamate, vedere GdiplusStartupOutput. Pertanto, una buona posizione per chiamare GdiplusStartup e le funzioni di notifica hook si troverebbero in un override della funzione virtuale CWinApp::Run, come illustrato di seguito:

int CMyWinApp::Run()
{
   GdiplusStartupInput gdiSI;
   GdiplusStartupOutput gdiSO;
   ULONG_PTR gdiToken;
   ULONG_PTR gdiHookToken;

   gdiSI.SuppressBackgroundThread = TRUE;
   GdiplusStartup(&gdiToken, &gdiSI, &gdiSO);
   gdiSO.NotificationHook(&gdiHookToken);
   int nRet = CWinApp::Run();

   gdiSO.NotificationUnhook(gdiHookToken);
   GdiplusShutdown(gdiToken);

   return nRet;
}

Se non si sopprime il thread di background GDI+, i comandi DDE possono essere rilasciati prematuramente all'applicazione prima che venga creata la finestra principale. I comandi DDE rilasciati dalla shell possono essere interrotti prematuramente, con conseguenti messaggi di errore.

Trascinamento e rilascio di Gestione file

I file possono essere trascinati dalla finestra di visualizzazione dei file in File Manager o Esplora file verso una finestra nell'applicazione. È possibile, ad esempio, abilitare il trascinamento di uno o più file nella finestra principale di un'applicazione MDI, dove l'applicazione può recuperare i nomi dei file e aprire finestre figlio MDI per tali file.

Per abilitare il trascinamento del file nell'applicazione, la Creazione guidata applicazione MFC scrive una chiamata alla funzione membro CWnd DragAcceptFiles per la finestra cornice principale nell'oggetto InitInstance. È possibile rimuovere tale chiamata se non si desidera implementare la funzionalità di trascinamento della selezione.

Nota

È anche possibile implementare funzionalità di trascinamento della selezione più generali tramite OLE, ad esempio il trascinamento dei dati tra documenti o all'interno di questi. Per informazioni, vedere l'articolo Trascinamento e rilascio OLE.

Tenere traccia dei documenti usati più di recente

Man mano che l'utente apre e chiudere i file, l'oggetto applicazione tiene traccia degli ultimi quattro file utilizzati. I nomi di questi file vengono aggiunti al menu File e tale elenco viene aggiornato ad ogni cambiamento. Questi nomi file vengono archiviati dal framework nel Registro di sistema o nel file con nome del progetto ed estensione ini e vengono letti dal framework all'avvio dell'applicazione. L'override InitInstance creato dalla Creazione guidata applicazione MFC include una chiamata alla funzione membro CWinApp LoadStdProfile Impostazioni, che carica le informazioni dal registro o dal file ini, inclusi i nomi di file usati più di recente.

Queste voci vengono archiviate come segue:

  • In Windows NT, Windows 2000 e versioni successive, il valore viene memorizzato in una chiave del Registro di sistema.

  • In Windows 3.x, il valore viene memorizzato nel file WIN.INI.

  • In Windows 95 e versioni successive, il valore viene memorizzato in una versione memorizzata nella cache di WIN.INI.

Vedi anche

CWinApp: classe Application