Поделиться через


Образец MTMDI: демонстрация потока пользовательского интерфейса MFC

Обновлен: Ноябрь 2007

В образце MTMDI показан поток пользовательского интерфейса MFC, когда события пользовательского интерфейса обрабатываются в потоке, отдельном от главного потока приложения. Этот образец является модифицированной версией однопоточного образца MDI.

Для образца MTMDI нет серьезных причин размещать окно с прыгающим мячиком в отдельном потоке. На однопроцессорном компьютере пользователю не удастся заметить разницу между образцами MDI и MTMDI. Поскольку движение мячика основано на таймере окна, то разница будет незаметна даже на многопроцессорных компьютерах.

Тем не менее в образце MTMDI представлена методика реализации потока пользовательского интерфейса MFC. Сравните исходный код образцов MDI и MTMDI, чтобы изучить объем работ по программированию, связанных с использованием потоков пользовательского интерфейса MFC.

Трудоемкость программирования в MTMDI служит предупреждением о том, что для использования потока пользовательского интерфейса необходима серьезная причина, оправдывающая затраты ресурсов на программирование. Рабочий поток, который является намного более распространенным типом потока в MFC, показан в образце MTRECALC.

s3wsyb55.alert_security(ru-ru,VS.90).gifПримечание о безопасности.

Этот образец кода служит для демонстрации основных принципов и не предназначен для использования в приложениях или на веб-узлах, поскольку не может считаться примером наиболее безопасного кода. Корпорация Майкрософт не несет ответственности за случайные или косвенные убытки в случае использования образца кода не по назначению.

Чтобы получить образцы и инструкции по их установке, выполните следующие действия.

  • В меню Справка среды Visual Studio выберите пункт Примеры.

    Дополнительные сведения см. в разделе Поиск файлов примеров.

  • Самая последняя версия и полный список образцов доступны в Интернете на странице образцов Visual Studio 2008.

  • Кроме того, образцы находятся на жестком диске компьютера. По умолчанию образцы кода и файл Readme копируются в папку, находящуюся в папке \Program Files\Visual Studio 9.0\Samples\. Все образцы кода для экспресс-выпусков Visual Studio находятся в Интернете.

Построение и запуск образца

Построение и запуск образца MTMDI

  1. Откройте решение MtMdi.sln.

  2. В меню Построение выберите команду Построить.

  3. В меню Отладка выберите пункт Запуск без отладки.

С помощью меню File можно создавать новые окна двух различных типов. После создания окон приложение позволяет изменять атрибуты элементов в окне с помощью команд следующих меню: Color, Speed, Window и Help. Обратите внимание, что в окнах "Hello!" отсутствует меню Speed.

В образце MTMDI используется собственный класс CBounceThread, производный от CWinThread. Класс CBounceThread реализован в Mtbounce.cpp. Поток содержит весь код для рисованию и операций со временем, необходимый окну с прыгающим мячиком для анимации мячика.

Приложение создает каждый поток аналогично созданию дочернего окна MDI. Это выполняется в функции CBounceMDIChildWnd::Create, которая находится в файле Bounce.cpp. Эта функция создает окно, создает поток и сопоставляет поток с окном.

В случае закрытия окна с мячиком сопоставленный поток автоматически уничтожается. Окна "Hello!" не обладают собственными потоками, и их сообщения обрабатываются главным потоком приложения.

Ключевые слова

В этом образце показаны следующие ключевые слова:

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

s3wsyb55.alert_note(ru-ru,VS.90).gifПримечание.

Некоторые образцы, включая данный, не модифицировались с учетом изменений в мастерах, библиотеках и компиляторе Visual C++, однако по-прежнему демонстрируют выполнение требуемой задачи.

См. также

Другие ресурсы

Примеры MFC