Partager via


MTMDI, exemple : illustre un thread d'interface utilisateur MFC

Mise à jour : novembre 2007

L'exemple MTMDI illustre le cas d'un thread d'interface utilisateur MFC où les événements de l'interface utilisateur sont traités dans un thread distinct du thread principal de l'application. Cet exemple est une version modifiée de l'exemple MDI à un seul thread.

MTMDI ne fait pas appel à un raisonnement poussé pour placer la fenêtre de la balle en mouvement dans un thread distinct. Sur un ordinateur doté d'un seul processeur, l'utilisateur ne peut pas déceler de différence entre les exemples MDI et MTMDI. Même sur un ordinateur multiprocesseur, l'utilisateur ne verrait pas la différence dans la mesure où le déplacement de la balle est basé sur une minuterie propre à la fenêtre.

L'exemple MTMDI illustre néanmoins des techniques d'implémentation d'un thread d'interface utilisateur MFC. Comparez les sources des exemples MDI et MTMDI pour étudier la charge mémoire de programmation associée à l'utilisation de threads d'interface utilisateur MFC.

Dans l'exemple MDMDI, la charge mémoire de programmation doit constituer un avertissement : l'intérêt d'utiliser un thread d'interface utilisateur justifie-t-il le coût de programmation ? Le thread de travail, illustré par l'exemple MTRECALC, est un type de thread beaucoup plus courant dans les MFC.

Note de sécurité :

Cet exemple de code est fourni pour illustrer un concept et ne doit pas être utilisé dans des applications ou des sites Web, car il peut ne pas illustrer les pratiques de programmation les plus sûres. Microsoft n'assume aucune responsabilité pour tout dommage indirect ou consécutif en cas d'utilisation de l'exemple de code à des fins autres que celles prévues.

Pour obtenir des exemples et des instructions d'installation :

  • Dans le menu ? (Aide) de Visual Studio, cliquez sur Exemples.

    Pour plus d'informations, consultez Recherche des fichiers d'exemple.

  • La liste la plus récente et la plus complète d'exemples est disponible en ligne à partir de la page Visual Studio 2008 Samples.

  • Des exemples sont également disponibles sur le disque dur de votre ordinateur. Des exemples et un fichier Readme sont stockés par défaut dans un dossier sous \Program Files\Visual Studio 9.0\Samples\. Pour les éditions Express de Visual Studio, tous les exemples sont disponibles en ligne.

Génération et exécution de l'exemple

Pour générer et exécuter l'exemple MTMDI

  1. Ouvrez la solution MtMdi.sln.

  2. Dans le menu Générer, cliquez sur Générer.

  3. Dans le menu Déboguer, cliquez sur Exécuter sans débogage.

Le menu File vous permet de créer de nouvelles fenêtres de deux types différents. Une fois les fenêtres créées, l'application vous permet de modifier les attributs des éléments affichés dans la fenêtre à l'aide des commandes proposées par les menus suivants : Color, Speed, Window et Help. Notez que les fenêtres "Hello" sont dépourvues de menu Speed.

MTMDI utilise sa propre classe dérivée de CWinThread, appelée CBounceThread. CBounceThread qui est implémentée dans le fichier Mtbounce.cpp. Le thread contient la totalité du code de peinture et de synchronisation dont la fenêtre a besoin pour animer la balle.

L'application crée chaque thread au moment de la création de la fenêtre enfant MDI. Cela arrive dans la fonction CBounceMDIChildWnd::Create, trouvée dans Bounce.cpp. Cette fonction crée à la fois la fenêtre et le thread, en associant le thread à la fenêtre.

Lorsque vous fermez une fenêtre d'animation, le thread associé est automatiquement détruit. Les fenêtres "Hello" ne possèdent pas leur propre thread ; leurs messages sont gérés par le thread principal de l'application.

Mots clés

Cet exemple illustre l'utilisation des mots clés suivants :

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

Remarque :

Certains exemples, tels que celui-ci, n'ont pas été modifiés pour refléter les changements apportés aux Assistants, aux bibliothèques et au compilateur Visual C++, mais ils illustrent bien l'exécution de la tâche souhaitée.

Voir aussi

Autres ressources

Exemples MFC