分享方式:


在檢視中繪圖

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

  1. 藉由呼叫您提供的檔成員函式來取得資料。

  2. 藉由呼叫架構傳遞給 OnDraw 之裝置內容物件的成員函式來顯示資料。

以某種方式變更檔時,必須重新繪製檢視以反映變更。 一般而言,當使用者透過檔檢視進行變更時,就會發生這種情況。 在此情況下,檢視會呼叫檔的 UpdateAllViews 成員函式,以通知相同檔上的所有檢視自行更新。 UpdateAllViews 會呼叫每個檢視的 OnUpdate 成員函式。 的預設實 OnUpdate 作會使檢視的整個工作區失效。 您可以覆寫它,只使對應至檔修改部分之工作區的區域失效。

類別 UpdateAllViews 的成員函式和 OnUpdate 類別 CDocument 的成員 CView 函式可讓您傳遞描述檔哪些部分已修改的資訊。 此「提示」機制可讓您限制檢視必須重新繪製的區域。 OnUpdate 會採用兩個「提示」引數。 LPARAM 類型的 第一個 lHint 可讓您傳遞任何您想要的資料,而類型 CObject 為 *的第二 個 pHint 可讓您將指標傳遞至衍生自 CObject 的任何 物件。

當檢視變成無效時,Windows 會傳送 WM_PAINT 訊息。 檢視的 On小畫家 處理常式函式會藉由建立 C小畫家 DC 類別 的裝置內容物件來回應訊息,並呼叫檢視的成員 OnDraw 函式。 您通常不需要撰寫覆寫處理常式 OnPaint 函式。

裝置內容 是 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 的 。 呼叫繪圖函式是透過裝置內容指標進行。 如需裝置內容和繪圖呼叫的相關資訊,請參閱 MFC 參考 使用 Window 物件 中的 類別 CDC

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

另請參閱

使用檢視