如何使用 CFormView 類別在單一文件介面 (SDI) 和多個文件介面 (MDI) 應用程式

文章翻譯 文章翻譯
文章編號: 98598 - 檢視此文章適用的產品。
全部展開 | 全部摺疊

在此頁中

附註Microsoft Visual C++.NET (2002),支援 Managed 程式碼模型所提供的 Microsoft.NET Framework 和不受管理的原生 Microsoft Windows 程式碼模型。本文資訊僅適用於不受管理的 Visual C++ 程式碼。

附註Microsoft Visual C++ 2005年支援 Managed 程式碼模型所提供的 Microsoft.NET Framework 以及未受管理的原生 Microsoft Windows 程式碼模型。

結論

CFormView 類別提供方便的方法來將控制項放入若檢視根據對話方塊範本。若要使用一個 CFormView 一般的程序類別的文件中所述,並 VIEWEX 和 CHKBOOK 範例應用程式提供與 Microsoft 基礎類別 (MFC) 版本 2.x 和以上所示。不過,這些應用程式不示範做為表單的初始大小相同框架視窗的初始大小。

下一節列出支援建立單一文件介面 (SDI) 或根據一個 CFormView 縮放初始框架視窗在表單上四處、 變更框架樣式和關閉使用按鈕在表單中的 MDI 文件的多重文件介面 (MDI) 應用程式所需執行的步驟。

其他相關資訊

下列步驟說明如何建立 MFC AppWizard 做預設檢視中使用 [CFormView 應用程式:
  1. 請使用 [AppWizard 產生 SDI 或 MDI 應用程式。這會插入對話方塊樣板以設定您的專案資源檔的正確樣式。

    Visual Studio 6.0

    在 [AppWizard 步驟 6,選取檢視類別。在 基底類別] 下拉式方塊中,選取 CFormView 指定 CFormView 為基底類別。

    Visual Studio.NET 或 Visual Studio 2005

    在 [AppWizard 步驟 1,選取 產生的類別。在 基底類別] 下拉式方塊中,選取 CFormView 指定 CFormView 為基底類別。
  2. 覆寫 OnUpdate() 成員函式和呼叫 UpdateData(),如述 CFormView 說明文件來使用目前的文件資料更新成員變數,以及執行對話資料交換 (DDX)。

    注意: UpdateData 不是虛擬,而且可以呼叫基底類別確保衍生的類別 DoDataExchange 稱為透過標準的多型。 CFormView 文件狀態來呼叫,不覆寫 UpdateData。
  3. 如果您想要設定 [表單] 檢視的初始大小,覆寫 OnInitialUpdate() 函式。下面的文字提供有關這個步驟在 SDI 或 MDI 應用程式中稍有不同的其他資訊。

變更一個 CFormView 周圍的 SDI 主框架大小

若要變更的 SDI 應用程式 (也就會使用 CFormView 作為其檢視類別) 的主框架大小在 App Studio 中設計的表單適當的大小,覆寫 OnInitialUpdate() 函式,在您的類別中衍生自 CFormView,如下所示:
      void CMyFormView::OnInitialUpdate()
      {
         CFormView::OnInitialUpdate();
         GetParentFrame()->RecalcLayout();
         ResizeParentToFit(); // default argument is TRUE
      }
				
[ResizeParentToFit() 函式不會防止表單變更大小,當使用者變更應用程式主框架的大小 (捲軸列會自動加入必要時)。若要修改的表單檢視父框架視窗的樣式,您可以覆寫 PreCreateWindow() 函式,由 AppWizard 產生 CMainFrame 類別中。比方說來移除 WS_THICKFRAME 樣式,並防止使用者變更視窗大小,宣告 PreCreateWindow() MAINFRM.H 中的,並將下列程式碼加入至 MAINFRM.CPP:
      BOOL CMainFrame::PreCreateWindow(CREATESTRUCT &cs)
      {
         cs.style &= ~WS_THICKFRAME;
         return CFrameWnd::PreCreateWindow(cs);
      }
				

變更一個 CFormView 周圍的 MDI 子框架的大小

如上面所述,變更 MDI 子框架大小的程序很類似變更 SDI 應用程式的主框架的大小。不過,RecalcLayout() 呼叫就不需要。

若要變更的表單檢視周圍的 MDI 子框架大小,覆寫 OnInitialUpdate() 函式,在您的類別中衍生自 CFormView,如下所示:
      void CMDIFormView::OnInitialUpdate()
      {
         CFormView::OnInitialUpdate();
         ResizeParentToFit(); // Default argument is TRUE.
      }
				
依照上述說明如果應用程式會覆寫預設 ResizeParentToFit() 函式的引數,基本上是相同的結果發生至於 SDI 應用程式。在另外子視窗可能太大,針對封入的 MDI 主框架或整個螢幕。

若要變更 (例如移除 WS_THICKFRAME 樣式,因此使用者無法變更視窗的大小) 在 MDI 子框架樣式,衍生一個 MDI 子視窗類別,並覆寫 PreCreateWindow 函式,如上述 SDI 範例所示。

關閉 MDI 表單與按鈕

若要建立會關閉文件的表單中的按鈕會將 BN_CLICKED 訊息的訊息處理常式加入至 CFormView 類別。請確定 CFormView 中的按鈕做有預設 IDOK 或 IDCANCEL 識別項。如果這樣做然後會建立在訊息對應和按鈕的不正確函式中不正確的項目。

訊息處理常式放好之後,您可以模擬 [關閉] 命令在 [檔案] 功能表與下列程式碼:
      void CMyForm::OnClickedButton1()
      {
         PostMessage(WM_COMMAND, ID_FILE_CLOSE);
      }
				
這個方法,以關閉表單,提示使用者儲存檔案,如果文件與相關 IsModified() 成員函式傳回 TRUE。

屬性

文章編號: 98598 - 上次校閱: 2006年1月5日 - 版次: 4.0
這篇文章中的資訊適用於:
  • Microsoft Foundation Class Library 4.2?應用於:
    • Microsoft Visual C++ 1.0 Professional Edition
    • Microsoft Visual C++ 1.5 Professional Edition
    • Microsoft Visual C++ 1.51
    • Microsoft Visual C++ 1.52 Professional Edition
    • Microsoft Visual C++ 1.0 Professional Edition
    • Microsoft Visual C++ 2.0 Professional Edition
    • Microsoft Visual C++ 2.1
    • Microsoft Visual C++ 5.0 Standard Edition
    • Microsoft Visual C++ 6.0 Service Pack 5
    • Microsoft Visual C++ .NET 2003 Standard Edition
    • Microsoft Visual C++ .NET 2002 Standard Edition
    • Microsoft Visual C++ 2005 Express Edition
關鍵字:?
kbmt kbdocview kbhowto kbmdi kbuidesign KB98598 KbMtzh
機器翻譯
重要:本文是以 Microsoft 機器翻譯軟體翻譯而成,而非使用人工翻譯而成。Microsoft 同時提供使用者人工翻譯及機器翻譯兩個版本的文章,讓使用者可以依其使用語言使用知識庫中的所有文章。但是,機器翻譯的文章可能不盡完美。這些文章中也可能出現拼字、語意或文法上的錯誤,就像外國人在使用本國語言時可能發生的錯誤。Microsoft 不為內容的翻譯錯誤或客戶對該內容的使用所產生的任何錯誤或損害負責。Microsoft也同時將不斷地就機器翻譯軟體進行更新。
按一下這裡查看此文章的英文版本:98598
Microsoft及(或)其供應商不就任何在本伺服器上發表的文字資料及其相關圖表資訊的恰當性作任何承諾。所有文字資料及其相關圖表均以「現狀」供應,不負任何擔保責任。Microsoft及(或)其供應商謹此聲明,不負任何對與此資訊有關之擔保責任,包括關於適售性、適用於某一特定用途、權利或不侵權的明示或默示擔保責任。Microsoft及(或)其供應商無論如何不對因或與使用本伺服器上資訊或與資訊的實行有關而引起的契約、過失或其他侵權行為之訴訟中的特別的、間接的、衍生性的損害或任何因使用而喪失所導致的之損害、資料或利潤負任何責任。

提供意見

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com