Condividi tramite


Esempio MTMDI: illustrazione di un thread di interfaccia utente MFC

Aggiornamento: novembre 2007

Nell'esempio MTMDI viene illustrato un thread di interfaccia utente MFC, in cui gli eventi di interfaccia vengono elaborati in un thread separato dal thread principale dell'applicazione. MTMDI è una versione modificata dell'esempio a thread singolo MDI.

In MTMDI non è richiesta una particolare logica per inserire la finestra della palla animata in un thread separato. Un utente che utilizzi un computer con processore singolo non sarebbe in grado di rilevare la differenza tra gli esempi MDI e MTMDI. Anche su un computer con più processori, l'utente non sarebbe in grado di rilevare la differenza, in quanto il movimento della palla si basa su un timer di finestra.

Tuttavia, in MTMDI vengono illustrate le tecniche per l'implementazione di un thread di interfaccia utente MFC. Per esaminare l'overhead di programmazione associato all'utilizzo dei thread di interfaccia utente MFC, confrontare il codice sorgente dei due esempi MDI e MTMDI.

L'overhead di programmazione in MTMDI dimostra che è opportuno utilizzare un thread di interfaccia utente solo quando esistano buone ragioni che giustifichino il maggior costo in termini di programmazione. Il tipo di thread molto più comune in MFC è il thread di lavoro, illustrato nell'esempio MTRECALC.

Nota sulla sicurezza:

Questo esempio di codice viene fornito solo a scopo dimostrativo e non deve essere utilizzato in applicazioni o siti Web, poiché potrebbe non implementare le tecniche migliori a livello di sicurezza. Microsoft esclude ogni responsabilità per danni diretti o indiretti derivanti dall'utilizzo dell'esempio di codice per scopi diversi da quelli previsti.

Per ottenere gli esempi e le istruzioni per l'installazione:

  • In Visual Studio scegliere Esempi dal menu ?.

    Per ulteriori informazioni, vedere Individuazione dei file di esempio.

  • La versione più recente e l'elenco completo degli esempi sono disponibili in linea alla pagina Visual Studio 2008 Samples.

  • È anche possibile trovare gli esempi sul disco rigido del computer. Per impostazione predefinita, gli esempi e il file Leggimi vengono copiati in una cartella nel percorso \Programmi\Visual Studio 9.0\Samples\. Per le versioni Express di Visual Studio, tutti gli esempi sono disponibili in linea.

Generazione ed esecuzione dell'esempio

Per generare ed eseguire l'esempio MTMDI

  1. Aprire il file di soluzione MtMdi.sln.

  2. Scegliere Genera dal menu Genera.

  3. Scegliere Avvia senza eseguire debug dal menu Debug.

È possibile utilizzare il menu File per creare nuove finestre di due tipi diversi. Una volta create le finestre, l'applicazione consentirà di modificare gli attributi degli elementi della finestra, utilizzando i comandi di uno dei seguenti menu: Color, Speed, Window e Help. Si osservi che nelle finestre "Hello!" non è disponibile alcun menu Speed.

In MTMDI viene utilizzata una classe derivata CWinThread specifica dell'esempio, denominata CBounceThread. CBounceThread è implementata nel file Mtbounce.cpp. Nel thread è contenuto tutto il codice relativo al disegno e ai tempi necessari per l'animazione della palla nella finestra.

L'applicazione crea ciascun thread nello stesso modo in cui viene creata la finestra figlio MDI. Questa operazione viene eseguita nella funzione CBounceMDIChildWnd::Create, presente in Bounce.cpp. La funzione crea sia la finestra che il thread, associando il thread alla finestra.

Quando si chiude una finestra di animazione, il thread associato viene automaticamente distrutto. Le finestre "Hello!" non dispongono di un proprio thread, i messaggi relativi a tali finestre vengono gestiti dal thread principale dell'applicazione.

Parole chiave

Nell'esempio vengono illustrate le seguenti parole chiave:

AfxGetInstanceHandle; AfxMessageBox; AfxRegisterWndClass; CBitmap::CreateCompatibleBitmap; CCmdTarget::OnCmdMsg; CCmdUI::SetCheck; CColorDialog::DoModal; CColorDialog::GetColor; CDC::BitBlt; CDC::CreateCompatibleDC; CDC::DeleteDC; CDC::DrawText; CDC::Ellipse; CDC::FillRect; CDC::GetDeviceCaps; CDC::SelectObject; CDC::SetBkColor; CDC::SetTextColor; CFrameWnd::LoadFrame; CFrameWnd::rectDefault; CGdiObject::DeleteObject; CMDIChildWnd::Create; CMenu::LoadMenu; CRect::Height; CRect::Width; CWinApp::ExitInstance; CWinApp::InitInstance; CWnd::Create; CWnd::DestroyWindow; CWnd::GetClientRect; CWnd::GetCurrentMessage; CWnd::GetDC; CWnd::GetDlgItem; CWnd::GetWindow; CWnd::Invalidate; CWnd::KillTimer; CWnd::MessageBox; CWnd::OnCreate; CWnd::OnDestroy; CWnd::OnLButtonDown; CWnd::OnPaint; CWnd::OnSize; CWnd::OnTimer; CWnd::ReleaseDC; CWnd::SendMessage; CWnd::SetTimer; CWnd::SetWindowPos; CWnd::ShowWindow; CWnd::UpdateWindow; CloseHandle; CreateEvent; CreateThread; EnumChildWindows; GetSysColor; GetVersion; LOWORD; LoadCursor; LoadIcon; LoadMenu; MAKEINTRESOURCE; RGB; SetEvent; Sleep; WaitForSingleObject; max; min

Nota:

Alcuni esempi, tra cui il presente, non sono stati cambiati per riflettere le modifiche apportate alle procedure guidate, alle librerie e al compilatore di Visual C++, tuttavia forniscono comunque le istruzioni per completare l'attività desiderata.

Vedere anche

Altre risorse

Esempi relativi ad MFC