在檢視中的繪圖

幾乎所有的繪圖應用程式中,就會發生在檢視中的OnDraw成員函式,您必須在您的檢視類別中覆寫。(例外狀況是滑鼠繪製、 討論解譯使用者輸入透過檢視。)您OnDraw覆寫:

  1. 藉由呼叫您提供的成員函式的文件中取得資料。

  2. 顯示資料,藉由呼叫成員函式的架構就會傳遞到的裝置內容物件的OnDraw。

當文件的資料變更時以某種方式,檢視必須重新繪製以反映所做的變更。一般而言,這是因為當使用者尚未透過文件檢視變更。如此一來,則檢視會呼叫文件的 UpdateAllViews 成員函式,來通知來自行更新相同的文件的所有檢視。UpdateAllViews每一個檢視表會呼叫 OnUpdate 成員函式。預設實作的OnUpdate使檢視表的整個用戶端區域失效。您可以覆寫它,要使其失效的只有那些區域之工作區對應到文件已修改的部分。

UpdateAllViews成員函式類別的 CDocumentOnUpdate成員函式類別的CView可讓您傳遞資訊描述哪些組件的文件已經過修改。這項 「 提示 」 機制,可讓您限制檢視必須重繪的區域。OnUpdate使用兩個 「 提示 」 引數。首先, lHint,型別的 LPARAM,可讓您傳送任何資料,您要第二個, pHint,型別的CObject1,可讓您將指標傳遞至任何物件衍生自CObject

當檢視就會變成無效時,Windows 會將它傳送WM_PAINT訊息。檢視表的 OnPaint 訊息處理函式回應方式建立裝置內容物件類別的 CPaintDC ,並呼叫您的檢視OnDraw成員函式。您通常不必撰寫覆寫OnPaint處理函式。

A 的裝置內容是一種 Windows 資料結構,其中包含的顯示器或印表機等裝置之繪圖屬性相關資訊。所有的繪圖呼叫都透過裝置內容物件進行的。繪製在畫面上, OnDraw會傳遞CPaintDC物件。繪製一台印表機,則會傳遞 CDC 設為目前的印表機物件。

您的程式碼檢視中繪製的第一次擷取變數的指標,文件中,然後可透過裝置內容的繪製呼叫。下列的簡單OnDraw範例說明的程序:

void CMyView::OnDraw(CDC* pDC)
{
   CMyDoc* pDoc = GetDocument();
   ASSERT_VALID(pDoc);
   if (!pDoc)
      return;

   CString s = pDoc->GetData();   // Returns a CString
   CRect rect;
   GetClientRect(&rect);

   pDC->SetTextAlign(TA_BASELINE | TA_CENTER);
   pDC->TextOut(rect.right / 2, rect.bottom / 2, s, s.GetLength());
}

在這個範例中,您會定義GetData做為衍生的文件類別的成員。

此範例會列印它會從 [文件中,在檢視中置中取得任何字串。如果OnDraw呼叫正在進行螢幕繪圖, CDC物件傳入的pDC是CPaintDC已經呼叫其建構函式,已BeginPaint。繪圖函式的呼叫都透過裝置內容的指標進行的。裝置內容和繪製呼叫的相關資訊,請參閱類別 CDCMFC 參考手冊 》使用視窗物件

如需更多範例如何撰寫的OnDraw,請參閱 MFC 範例

請參閱

參考

使用檢視