MTMDI 範例:示範 MFC 使用者介面執行緒
更新:2007 年 11 月
MTMDI 範例說明處理使用者介面事件的 MFC 使用者介面執行緒,處理使用者介面事件的執行緒與主應用程式執行緒有所區隔。此範例是單一執行緒 MDI 範例修改後的版本。
MTMDI 不會針對在不同執行緒中放置彈跳球視窗而提供任何解釋。使用者在單一處理器的電腦上無法察覺到 MDI 和 MTMDI 範例的不同。甚至在多處理器的電腦上,使用者仍然無法察覺到不同,因為球的移動是以視窗的計時器為準。
然而,MTMDI 確實說明了實作 MFC 使用者介面執行緒的技術。比較 MDI 和 MTMDI 範例的來源,來研究與使用 MFC 使用者介面執行緒相關的程式設計過度虛耗。
MTMDI 中程式設計的過度虛耗一定會是一個警告,好讓您擁有充分的理由證明使使用者介面執行緒所造成的程式設計成本。在 MFC 中最常見的執行緒類型是背景工作執行緒 (Worker Thread),在 MTRECALC 範例中會有所說明。
安全性注意事項: |
---|
這個程式碼範例僅供概念說明之用,同時因為範例中的程式碼撰寫並沒有周全的顧及所有安全性問題,所以本範例不適用於實際執行的應用程式或網站中。如果使用者擅自將範例程式碼用於其他意圖而導致連帶事件或重大損害時,Microsoft 將不承擔任何責任。 |
若要取得範例和指示以便進行安裝:
按一下 Visual Studio [說明] 功能表上的 [範例]。
如需詳細資訊,請參閱尋找範例檔案。
最新版的完整範例清單可從 Visual Studio 2008 範例網頁 (英文) 取得。
您也可以將範例置於電腦硬碟中。根據預設,範例和讀我檔案都會複製到 \Program Files\Visual Studio 9.0\Samples\ 下的資料夾中。對於所有的 Visual Studio Express 版,所有範例都可在線上找到。
建置和執行範例
若要建置並執行 MTMDI 範例
開啟 MtMdi.sln 方案。
在 [建置] 功能表上按一下 [建置]。
在 [偵錯] 功能表上按一下 [啟動但不偵錯]。
您可以使用 [File] 功能表來建立兩種不同型式的新視窗。建立完視窗後,應用程式會讓您使用其中一個功能表的命令:[Color]、[Speed]、[Window] 和 [Help],來變更視窗中項目的屬性 (Attribute)。請注意 [Hello!] 視窗沒有 [Speed] 功能表。
MTMDI 使用自己名為 CBounceThread 的 CWinThread 衍生類別。CBounceThread 則是在 Mtbounce.cpp 檔案中實作。執行緒包含了所有彈力球視窗在視窗內製作球的動畫時,所需的繪製和執行時間程式碼。
應用程式就像建立 MDI 子視窗那樣,建立每一個執行緒。這會發生在位於 Bounce.cpp 的 CBounceMDIChildWnd::Create 函式中,而該函式同時建立了視窗和執行緒,並使執行緒和視窗產生關聯。
每當您關閉彈力球視窗,具關聯性的執行緒便會自動被終結。[Hello!] 視窗本身並不具有執行緒;它們的訊息為應用程式的主執行緒 (Primary Thread) 所處理。
關鍵字
本範例為您示範下列關鍵字:
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
注意事項: |
---|
部分範例 (包括本範例) 尚未經過改寫,無法反映出目前在 Visual C++ 精靈、程式庫以及編譯器方面的變更,不過還是可以示範如何完成您要進行的工作。 |