VIEWEX 範例:示範多重檢視、捲動檢視和分隔視窗
更新:2007 年 11 月
VIEWEX 範例說明下列各個動作。
靜態分隔視窗,其中窗格的順序和數目不會改變,且每個窗格通常為不同的檢視類別。
表單檢視 (CFormView),其會與同一份文件的其他檢視保持同步。
選項按鈕組 (Radio Group) 的對話資料交換 (DDX)。
VIEWEX 的文件相當簡單。它的資料由字串和色彩組成。
安全性注意事項: |
---|
這個程式碼範例僅供概念說明之用,同時因為範例中的程式碼撰寫並沒有周全的顧及所有安全性問題,所以本範例不適用於實際執行的應用程式或網站中。如果使用者擅自將範例程式碼用於其他意圖而導致連帶事件或重大損害時,Microsoft 將不承擔任何責任。 |
若要取得範例和指示以便進行安裝:
按一下 Visual Studio [說明] 功能表上的 [範例]。
如需詳細資訊,請參閱尋找範例檔案。
最新版的完整範例清單可從 Visual Studio 2008 範例網頁 (英文) 取得。
您也可以將範例置於電腦硬碟中。根據預設,範例和讀我檔案都會複製到 \Program Files\Visual Studio 9.0\Samples\ 下的資料夾中。對於所有的 Visual Studio Express 版,所有範例都可在線上找到。
建置和執行範例
若要建置並執行 VIEWEX 範例
開啟 viewex.sln 方案。
在 [建置] 功能表上按一下 [建置]。
在 [偵錯] 功能表上,按一下 [啟動但不偵錯]。
當您第一次執行 VIEWEX 時,它會顯示一個 [New] 對話方塊,讓您在其中選取要說明的文件視窗類型:
[Simple Text] 會使用目前的色彩將字串於視窗置中顯示。
[Input From View] 可提供表單 (CFormView),讓您在其中變更編輯控制項的字串,並可選取選項按鈕群組的選項來變更色彩。
具有 [Simple Text] 和 [Input Form] 的 [Splitter Frame] 會顯示於分隔視窗的兩個並排窗格內。當您在變更輸入表單的字串 (逐字元) 或色彩時,純文字檢視會自動地反映該變更。
[Three-way Splitter Frame] 會在一個分隔視窗窗格內顯示輸入表單。其他窗格則由分隔列分成兩個子窗格:上子窗格顯示純文字檢視;下子窗格顯示色彩檢視。色彩檢視就是以目前的色彩顯示。
您可以使用輸入表單的編輯控制項,按一下 [Edit] 功能表上的 [Change Data] 來變更字串。
您也可以同時檢視多份文件。不過,為了簡單起見,您不能儲存或重新開啟文件,也不能在多個上述的視窗中檢視同一份文件。
靜態分隔視窗
在 VIEWEX 中,MDI 子視窗會藉由覆寫 OnCreateClient,在工作區內建立一個 1 x 2 的分隔視窗。在三向分隔框架的情況下,VIEWEX 會將第二個 2 x 1 分隔視窗嵌入 1 x 2 分隔視窗的右邊窗格內。
VIEWEX 呼叫 CSplitterWnd::CreateStatic (而非 CSplitterWnd::Create) 建立靜態分隔視窗,而不是建立動態分隔視窗。VIEWEX 分隔視窗的每一個窗格都有不同的檢視類別。VIEWEX 會呼叫 CSplitterWnd::CreateView 指定每一個窗格的 CView 衍生類別。以第一個窗格而言,VIEWEX 會使用傳遞到 CCreateContext 的 m_pNewViewClass 成員中的 OnCreateClient 的文件樣板物件之特定檢視類別。以其他窗格而言,VIEWEX 會指定檢視的 RUNTIME_CLASS。
表單檢視
CInputView 說明表單檢視和其他檢視的同步化,因此當使用者在其中一個欄位內輸入資料時,變更會立即反映在其他檢視中。CInputView 完成這項作業的方法是,將其所有控制項的 ON_EN_CHANGE 和 ON_BN_CLICKED 對應到中央 OnDataChange 訊息處理常式。OnDataChange 呼叫 CView::UpdateData 將資料從螢幕傳輸到 CInputView 的成員變數,然後呼叫文件的 UpdateAllViews 通知其他檢視有關變更的情況。
對話資料交換 (DDX)
VIEWEX 的 CInputView 說明選項按鈕組按鈕資料的對話資料交換 (DDX)。在 Iputvw.h 中,請注意只有選項按鈕組中的第一個按鈕會對應到 CInputView::DoDataExchange 中的 m_iColor 成員變數。m_iColor 是以零起始、代表所選取選項按鈕的序數值 (int)。
關鍵字
本範例為您示範下列關鍵字:
CDC::FillRect; CDialog::DoModal; CDocument::OnNewDocument; CDocument::UpdateAllViews; CFrameWnd::LoadFrame; CFrameWnd::OnCreateClient; CFrameWnd::SetActiveView; CObject::Serialize; CRect::Height; CRect::Width; CSplitterWnd::CreateStatic; CSplitterWnd::CreateView; CSplitterWnd::GetPane; CSplitterWnd::IdFromRowCol; CString::GetLength; CView::GetDocument; CView::OnActivateView; CView::OnDraw; CView::OnUpdate; CWinApp::AddDocTemplate; CWinApp::InitInstance; CWinApp::OnFileNew; CWnd::DoDataExchange; CWnd::GetClientRect; CWnd::OnMouseActivate; CWnd::ShowWindow; CWnd::UpdateData; CWnd::UpdateWindow; RGB; SetBkMode; SetTextAlign; SetTextColor; TextOut; max
注意事項: |
---|
部分範例 (包括本範例) 尚未經過改寫,無法反映出目前在 Visual C++ 精靈、程式庫以及編譯器方面的變更,不過還是可以示範如何完成您要進行的工作。 |