在檢視中繪圖
應用程式中幾乎所有的繪圖都發生在檢視的成員函式中,您必須在檢視 OnDraw
類別中覆寫此函式。 (例外狀況是滑鼠繪圖,討論于 透過檢視 解譯使用者輸入。)您的 OnDraw
覆寫:
藉由呼叫您提供的檔成員函式來取得資料。
藉由呼叫架構傳遞給
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 範例 。