共用方式為


CView 類別

提供使用者定義的檢視類別的基本功能。

語法

class AFX_NOVTABLE CView : public CWnd

成員

受保護的建構函式

名稱 描述
CView::CView 建構 CView 物件。

公用方法

名稱 描述
CView::DoPreparePrinting 顯示 [列印] 對話框並建立印表機裝置內容;覆寫 OnPreparePrinting 成員函式時呼叫。
CView::GetDocument 傳回與檢視相關聯的檔。
CView::IsSelected 測試是否已選取檔案專案。 OLE 支援的必要專案。
CView::OnDragEnter 當專案第一次拖曳至檢視的拖放區域時呼叫。
CView::OnDragLeave 當拖曳的項目離開檢視的拖放區域時呼叫。
CView::OnDragOver 在檢視的拖放區域上拖曳專案時呼叫。
CView::OnDragScroll 呼叫 以判斷游標是否拖曳至視窗的捲動區域。
CView::OnDrop 當專案已卸除至檢視的默認處理程式拖放區域時呼叫。
CView::OnDropEx 當專案已卸除至檢視的主要處理程式拖放區域時呼叫。
CView::OnInitialUpdate 第一次附加至文件之後呼叫檢視。
CView::OnPrepareDC 在呼叫成員函式以進行屏幕顯示之前 OnDraw 呼叫,或 OnPrint 呼叫成員函式以進行列印或列印預覽。
CView::OnScroll 當 OLE 專案拖曳到檢視的框線之外時呼叫。
CView::OnScrollBy 當卷動包含使用中就地 OLE 專案的檢視時呼叫。

受保護的方法

名稱 描述
CView::OnActivateFrame 啟動或停用包含檢視的框架視窗時呼叫。
CView::OnActivateView 啟用檢視時呼叫。
CView::OnBeginPrinting 當列印作業開始時呼叫;覆寫以配置圖形裝置介面 (GDI) 資源。
CView::OnDraw 呼叫 以轉譯屏幕顯示、列印或列印預覽的檔影像。 需要實作。
CView::OnEndPrinting 當列印作業結束時呼叫;覆寫以解除分配 GDI 資源。
CView::OnEndPrintPreview 結束預覽模式時呼叫。
CView::OnPreparePrinting 在列印或預覽檔之前呼叫;覆寫以初始化 [列印] 對話框。
CView::OnPrint 呼叫 以列印或預覽文件的頁面。
CView::OnUpdate 呼叫 以通知檢視其檔已修改。

備註

檢視會附加至檔,並做為檔與使用者之間的媒介:檢視會在畫面或印表機上轉譯檔的影像,並將使用者輸入解譯為檔上的作業。

檢視是框架視窗的子系。 多個檢視可以共用框架視窗,如同分割器窗口的情況。 檢視類別、框架視窗類別和檔案類別之間的關聯性是由 CDocTemplate 物件所建立。 當用戶開啟新的視窗或分割現有的視窗時,架構會建構新的檢視,並將它附加至檔。

檢視只能附加至一份檔,但檔可以同時附加多個檢視,例如,如果文件顯示在分割器視窗或多個子視窗的多個檔介面 (MDI) 應用程式中。 您的應用程式可以支援指定檔類型的不同檢視類型;例如,文字處理程式可能會同時提供檔的完整文字檢視,以及只顯示區段標題的大綱檢視。 如果您使用分隔器視窗,這些不同類型的檢視可以放在個別框架視窗或單一框架視窗的個別窗格中。

檢視可能負責處理數種不同類型的輸入,例如鍵盤輸入、滑鼠輸入或透過拖放輸入,以及功能表、工具列或滾動條的命令。 檢視會接收其框架視窗轉送的命令。 如果檢視未處理指定的命令,則會將命令轉送至其相關聯的檔。 如同所有命令目標,檢視會透過訊息對應處理訊息。

檢視會負責顯示和修改文件的數據,但不負責儲存它。 檔會提供檢視及其數據的必要詳細數據。 您可以讓檢視直接存取文件的數據成員,或者可以在文件類別中提供成員函式,讓檢視類別呼叫。

當文件的數據變更時,負責變更的檢視通常會呼叫 CDocument::UpdateAllViews 檔的函式,以呼叫 OnUpdate 每個檢視的成員函式來通知所有其他檢視。 的預設實 OnUpdate 作會使檢視的整個工作區失效。 您可以覆寫它,只使對應至檔修改部分之工作區的區域失效。

若要使用 CView,請從它衍生類別,並實 OnDraw 作成員函式來執行屏幕顯示。 您也可以使用 OnDraw 來執行列印和列印預覽。 架構會處理列印迴圈,以便列印和預覽檔。

檢視會處理具有 和 CWnd::OnVScroll 成員函式的CWnd::OnHScroll滾動條訊息。 您可以在這些函式中實作滾動條訊息處理,也可以使用 CView 衍生類別 CScrollView 為您處理捲動。

CScrollView此外,Microsoft Foundation Class Library 還提供衍生自 CView的其他九個類別:

  • CCtrlView,此檢視允許使用檔 - 使用樹狀目錄、清單和豐富編輯控件的檢視架構。

  • CDaoRecordView,在對話框控件中顯示資料庫記錄的檢視。

  • CEditView,提供簡單的多行文本編輯器的檢視。 您可以使用 CEditView 物件做為對話框中的控制件,以及檔上的檢視。

  • CFormView,這是包含對話框控件的可卷動檢視,且是以對話框範本資源為基礎。

  • CListView,此檢視允許使用檔 - 使用清單控件的檢視架構。

  • CRecordView,在對話框控件中顯示資料庫記錄的檢視。

  • CRichEditView,此檢視允許使用檔 - 具有豐富編輯控件的檢視架構。

  • CScrollView,此檢視會自動提供卷動支援。

  • CTreeView,此檢視允許使用檔 - 檢視架構與樹狀控件。

類別 CView 也有名為 CPreviewView的衍生實作類別,由架構用來執行列印預覽。 此類別支援列印預覽視窗特有的功能,例如工具列、單頁或雙頁預覽,以及縮放,也就是放大預覽影像。 除非您想要實作自己的列印預覽介面,否則您不需要呼叫或覆寫任何 CPreviewView的成員函式(例如,如果您想要在列印預覽模式中支援編輯)。 如需使用 CView的詳細資訊,請參閱 檔/檢視架構列印。 此外,如需自定義列印預覽的詳細資訊,請參閱 Technical Note 30

繼承階層架構

CObject

CCmdTarget

CWnd

CView

需求

標頭: afxwin.h

CView::CView

建構 CView 物件。

CView();

備註

架構會在建立新的框架視窗或分割視窗時呼叫建構函式。 覆寫成員函式, OnInitialUpdate 以在附加文件之後初始化檢視。

CView::DoPreparePrinting

從覆寫 OnPreparePrinting 呼叫此函式以叫用 [列印] 對話框,並建立印表機裝置內容。

BOOL DoPreparePrinting(CPrintInfo* pInfo);

參數

pInfo
指向 CPrintInfo 描述目前列印作業的結構。

傳回值

如果列印或列印預覽可以開始,則為非零;如果作業已取消,則為 0。

備註

此函式的行為取決於是否呼叫它進行列印或列印預覽(由 m_bPreview 參數的成員 pInfo 指定)。 如果正在列印檔案,此函式會使用指向的結構pInfo中的CPrintInfo值叫用列印對話方塊;在使用者關閉對話框之後,函式會根據對話框中指定的使用者設定建立印表機裝置內容,並透過 pInfo 參數傳回此裝置內容。 此裝置內容可用來列印檔。

如果檔案正在預覽,此函式會使用目前的印表機設定建立印表機裝置內容;此裝置內容用於在預覽期間模擬印表機。

CView::GetDocument

呼叫此函式以取得檢視檔的指標。

CDocument* GetDocument() const;

傳回值

與檢視相關聯的對象指標 CDocumentNULL 如果檢視未附加至檔案,則為 。

備註

這可讓您呼叫文件的成員函式。

CView::IsSelected

由架構呼叫,以檢查是否已選取指定的文件專案。

virtual BOOL IsSelected(const CObject* pDocItem) const;

參數

pDocItem
指向正在測試的文件專案。

傳回值

如果選取指定的文件專案,則為非零;否則為 0。

備註

這個函式的預設實作會傳 FALSE回 。 如果您要使用 CDocItem 物件實作選取專案,請覆寫此函式。 如果您的檢視包含 OLE 專案,您必須覆寫此函式。

CView::OnActivateFrame

當包含檢視的框架窗口啟動或停用時,由架構呼叫。

virtual void OnActivateFrame(
    UINT nState,
    CFrameWnd* pFrameWnd);

參數

nState
指定正在啟動或停用框架視窗。 它可能是下列其中一個值:

  • WA_INACTIVE 框架視窗正在停用。

  • WA_ACTIVE 框架視窗正透過滑鼠按兩下以外的某些方法啟動(例如,使用鍵盤介面來選取視窗)。

  • WA_CLICKACTIVE 畫面視窗正由滑鼠按兩下來啟動

pFrameWnd
要啟動之框架視窗的指標。

備註

如果您想要在啟動或停用與檢視相關聯的框架視窗時執行特殊處理,請覆寫此成員函式。 例如,儲存並還原具有焦點的控件時, CFormView 會執行此覆寫。

CView::OnActivateView

啟動或停用檢視時,由架構呼叫。

virtual void OnActivateView(
    BOOL bActivate,
    CView* pActivateView,
    CView* pDeactiveView);

參數

bActivate
指出正在啟動或停用檢視。

pActivateView
指向正在啟動的檢視物件。

pDeactiveView
指向正在停用的檢視物件。

備註

此函式的預設實作會將焦點設定為正在啟動的檢視。 如果您想要在啟動或停用檢視時執行特殊處理,請覆寫此函式。 例如,如果您想要提供特殊的視覺提示來區分使用中檢視與非使用中檢視,您會檢查 bActivate 參數並據以更新檢視的外觀。

pActivateView如果啟動應用程式的主框架視窗且使用中檢視中沒有變更,則 和 pDeactiveView 參數會指向相同的檢視,例如,如果焦點是從另一個應用程式傳輸到這個視窗,而不是從應用程式內的某個檢視到另一個檢視,或在 MDI 子視窗之間切換時。 這可讓檢視需要重新實現其調色盤。

當呼叫 時 CFrameWnd::SetActiveView ,這些參數與傳回的檢視不同時會有所不同 CFrameWnd::GetActiveView 。 這最常發生在分割器視窗中。

CView::OnBeginPrinting

在呼叫 OnPreparePrinting 之後,由架構在列印或預覽列印工作開始時呼叫。

virtual void OnBeginPrinting(
    CDC* pDC,
    CPrintInfo* pInfo);

參數

pDC
指向印表機裝置內容。

pInfo
指向 CPrintInfo 描述目前列印作業的結構。

備註

此函式的預設實作不做任何動作。 覆寫此函式以配置列印特別需要的任何 GDI 資源,例如畫筆或字型。 從成員函式中 OnPrint 選取 GDI 物件到裝置內容,以取得使用它們的每個頁面。 如果您使用相同的檢視物件來執行螢幕顯示和列印,請為每個顯示所需的 GDI 資源使用不同的變數;這可讓您在列印期間更新螢幕。

您也可以使用此函式,執行因印表機裝置內容屬性而異的初始設定。 例如,列印文件所需的頁數可能會因使用者在 [列印] 對話方塊中指定的設定 (例如頁面長度) 而異。 在這種情況下,您無法在成員函式中 OnPreparePrinting 指定檔長度,而您通常會這麼做;您必須等到根據對話框設定建立印表機裝置內容為止。 OnBeginPrinting 是第一個可覆寫的函式,可讓您存取 CDC 代表印表機裝置內容的物件,因此您可以設定此函式的文件長度。 請注意,如果此時未指定文件長度,預覽列印期間將不會顯示捲軸。

CView::OnDragEnter

當滑鼠第一次進入置放目標視窗的非捲動區域時,由架構呼叫。

virtual DROPEFFECT OnDragEnter(
    COleDataObject* pDataObject,
    DWORD dwKeyState,
    CPoint point);

參數

pDataObject
COleDataObject指向要拖曳到檢視的置放區域。

dwKeyState
包含修飾詞索引鍵的狀態。 這是下列任何數目的組合:MK_CONTROL、、MK_SHIFTMK_ALTMK_LBUTTON、、 MK_MBUTTONMK_RBUTTON

point
相對於檢視工作區的目前滑鼠位置。

傳回值

列舉 DROPEFFECT 型別中的值,指出當使用者在這個位置卸除物件時,會發生的置放類型。 卸除的類型通常取決於 所 dwKeyState指示的目前索引鍵狀態。 索引鍵統計數據與 DROPEFFECT 值的標準對應為:

  • DROPEFFECT_NONE 無法卸除此視窗中的數據物件。

  • DROPEFFECT_LINK for MK_CONTROL|MK_SHIFT 建立 物件與其伺服器之間的連結。

  • DROPEFFECT_COPY for MK_CONTROL 建立已卸除對象的複本。

  • DROPEFFECT_MOVE for MK_ALT 建立卸除對象的複本,並刪除原始物件。 當檢視可以接受此數據物件時,這通常是預設的卸除效果。

如需詳細資訊,請參閱 MFC 進階概念範例 OCLIENT

備註

預設實作是不執行任何動作並傳回 DROPEFFECT_NONE

覆寫此函式,以準備未來對成員函式的 OnDragOver 呼叫。 此時應該擷取數據物件所需的任何數據,以供稍後在成員函式中使用 OnDragOver 。 此時也應該更新檢視,以提供用戶視覺回饋。 如需詳細資訊,請參閱 OLE 拖放:實作置放目標一文

CView::OnDragLeave

當滑鼠移出該視窗的有效置放區域時,由架構在拖曳作業期間呼叫。

virtual void OnDragLeave();

備註

如果目前檢視需要清除或呼叫期間OnDragEnterOnDragOver所採取的任何動作,例如在物件拖放時移除任何視覺使用者意見反應,請覆寫此函式。

CView::OnDragOver

當滑鼠移到置放目標視窗上方時,架構會在拖曳作業期間由架構呼叫。

virtual DROPEFFECT OnDragOver(
    COleDataObject* pDataObject,
    DWORD dwKeyState,
    CPoint point);

參數

pDataObject
COleDataObject指向要拖曳到置放目標上的 。

dwKeyState
包含修飾詞索引鍵的狀態。 這是下列任何數目的組合:MK_CONTROL、、MK_SHIFTMK_ALTMK_LBUTTON、、 MK_MBUTTONMK_RBUTTON

point
相對於檢視工作區的目前滑鼠位置。

傳回值

列舉 DROPEFFECT 型別中的值,指出當使用者在這個位置卸除物件時,會發生的置放類型。 卸除的類型通常取決於目前的索引鍵狀態,如 所 dwKeyState指示。 索引鍵統計數據與 DROPEFFECT 值的標準對應為:

  • DROPEFFECT_NONE 無法卸除此視窗中的數據物件。

  • DROPEFFECT_LINK for MK_CONTROL|MK_SHIFT 建立 物件與其伺服器之間的連結。

  • DROPEFFECT_COPY for MK_CONTROL 建立已卸除對象的複本。

  • DROPEFFECT_MOVE for MK_ALT 建立卸除對象的複本,並刪除原始物件。 當檢視可以接受數據物件時,這通常是預設的卸除效果。

如需詳細資訊,請參閱 MFC 進階概念範例 OCLIENT

備註

預設實作是不執行任何動作並傳回 DROPEFFECT_NONE

覆寫此函式,以在拖曳作業期間提供用戶視覺回饋。 由於會持續呼叫此函式,因此應該盡可能優化其內含的任何程序代碼。 如需詳細資訊,請參閱 OLE 拖放:實作置放目標一文

CView::OnDragScroll

在呼叫 之前,由架構呼叫 OnDragEnter ,或 OnDragOver 判斷點是否位於卷動區域中。

virtual DROPEFFECT OnDragScroll(
    DWORD dwKeyState,
    CPoint point);

參數

dwKeyState
包含修飾詞索引鍵的狀態。 這是下列任何數目的組合:MK_CONTROL、、MK_SHIFTMK_ALTMK_LBUTTON、、 MK_MBUTTONMK_RBUTTON

point
包含相對於屏幕的數據指標位置,以像素為單位。

傳回值

列舉 DROPEFFECT 型別中的值,指出當使用者在這個位置卸除物件時,會發生的置放類型。 卸除的類型通常取決於 所 dwKeyState指示的目前索引鍵狀態。 索引鍵統計數據與 DROPEFFECT 值的標準對應為:

  • DROPEFFECT_NONE 無法卸除此視窗中的數據物件。

  • DROPEFFECT_LINK for MK_CONTROL|MK_SHIFT 建立 物件與其伺服器之間的連結。

  • DROPEFFECT_COPY for MK_CONTROL 建立已卸除對象的複本。

  • DROPEFFECT_MOVE for MK_ALT 建立卸除對象的複本,並刪除原始物件。

  • DROPEFFECT_SCROLL 表示拖曳卷動作業即將發生,或是在目標檢視中發生。

如需詳細資訊,請參閱 MFC 進階概念範例 OCLIENT

備註

當您想要提供此事件的特殊行為時,請覆寫此函式。 當游標拖曳到每個視窗框線內的默認捲動區域時,默認實作會自動捲動視窗。 如需詳細資訊,請參閱 OLE 拖放:實作置放目標一文

CView::OnDraw

由架構呼叫,以轉譯檔的影像。

virtual void OnDraw(CDC* pDC) = 0;

參數

pDC
指向要用來轉譯檔影像的裝置內容。

備註

架構會呼叫此函式來執行螢幕顯示、列印和列印預覽,並在每個案例中傳遞不同的裝置內容。 沒有預設的實作。

您必須覆寫此函式,才能顯示文件的檢視。 您可以使用 參數指向pDC的物件來建立圖形裝置介面 (GDI) 呼叫CDC。 您可以選取 GDI 資源,例如手寫筆或字型,在繪圖前進入裝置內容,然後於之後取消選取它們。 您的繪圖程式代碼通常與裝置無關;也就是說,它不需要顯示影像類型的相關信息。

若要優化繪圖,請呼叫 RectVisible 裝置內容的成員函式,以找出是否會繪製指定的矩形。 如果您需要區分一般屏幕顯示和列印,請呼叫 IsPrinting 裝置內容的成員函式。

CView::OnDrop

當使用者透過有效的置放目標發行數據物件時,由架構呼叫。

virtual BOOL OnDrop(
    COleDataObject* pDataObject,
    DROPEFFECT dropEffect,
    CPoint point);

參數

pDataObject
COleDataObject指向已放入置放目標的 。

dropEffect
使用者要求的卸除效果。

  • DROPEFFECT_COPY 建立要卸除之數據對象的複本。

  • DROPEFFECT_MOVE 將資料物件移至目前的滑鼠位置。

  • DROPEFFECT_LINK 建立數據物件與其伺服器之間的連結。

point
相對於檢視工作區的目前滑鼠位置。

傳回值

如果卸除成功,則為非零;否則為 0。

備註

預設實作不會執行任何動作,並傳 FALSE回 。

覆寫此函式,以實作檢視工作區中 OLE 卸除的效果。 您可以透過 pDataObject 檢查資料物件,以取得剪貼簿數據格式,以及在指定點卸除的數據。

注意

如果這個檢視類別中有 覆寫, OnDropEx 則架構不會呼叫此函式。

CView::OnDropEx

當使用者透過有效的置放目標發行數據物件時,由架構呼叫。

virtual DROPEFFECT OnDropEx(
    COleDataObject* pDataObject,
    DROPEFFECT dropDefault,
    DROPEFFECT dropList,
    CPoint point);

參數

pDataObject
COleDataObject指向已放入置放目標的 。

dropDefault
用戶根據目前索引鍵狀態選擇的預設卸除作業效果。 可以是 DROPEFFECT_NONE。 卸除效果會在一節中討論。

dropList
置放來源支援的置放效果清單。 卸除效果值可以使用位 OR ( |) 運算來結合。 卸除效果會在一節中討論。

point
相對於檢視工作區的目前滑鼠位置。

傳回值

從所指定 point位置的置放嘗試所產生的置放效果。 這必須是 所 dropEffectList指示的其中一個值。 卸除效果會在一節中討論。

備註

默認實作是不執行任何動作,並傳回虛擬值 (-1),表示架構應該呼叫 OnDrop 處理程式。

覆寫此函式以實作滑鼠右鍵拖放的效果。 滑鼠右鍵拖放通常會在放開滑鼠右鍵時顯示選項功能表。

您的覆 OnDropEx 寫應該查詢滑鼠右鍵。 您可以從處理程式呼叫 GetKeyState 或儲存滑鼠右鍵狀態 OnDragEnter

  • 如果滑鼠右鍵已關閉,您的覆寫應該會顯示一個快捷功能表,該功能表會提供下拉式來源支援的下拉效果。

    • 檢查 dropList 以判斷置放來源所支援的置放效果。 在快捷功能表上只啟用這些動作。

    • 使用 SetMenuDefaultItem 來根據 dropDefault設定預設動作。

    • 最後,從快捷功能表採取用戶選取所指示的動作。

  • 如果滑鼠右鍵未關閉,您的覆寫應該以標準卸除要求處理。 使用 中指定的 dropDefault卸除效果。 或者,您的覆寫可以傳回虛擬值 (-1), 表示 OnDrop 將處理此卸除作業。

使用 pDataObject 來檢查 COleDataObject 剪貼簿數據格式和在指定點卸除的數據。

卸除效果描述與卸除作業相關聯的動作。 請參閱下列卸除效果清單:

  • DROPEFFECT_NONE 不允許卸除。

  • DROPEFFECT_COPY 將會執行複製作業。

  • DROPEFFECT_MOVE 將會執行移動作業。

  • DROPEFFECT_LINK 將會建立從卸除數據到原始數據的連結。

  • DROPEFFECT_SCROLL 表示拖曳卷動作業即將發生或發生在目標中。

如需設定預設功能表命令的詳細資訊,請參閱 SetMenuDefaultItem Windows SDK 和 CMenu::GetSafeHmenu 此磁碟區。

CView::OnEndPrinting

在列印或預覽文件之後,由架構呼叫。

virtual void OnEndPrinting(
    CDC* pDC,
    CPrintInfo* pInfo);

參數

pDC
指向印表機裝置內容。

pInfo
指向 CPrintInfo 描述目前列印作業的結構。

備註

此函式的預設實作不做任何動作。 覆寫此函式以釋放您在成員函式中 OnBeginPrinting 配置的任何 GDI 資源。

CView::OnEndPrintPreview

當用戶結束列印預覽模式時,由架構呼叫。

virtual void OnEndPrintPreview(
    CDC* pDC,
    CPrintInfo* pInfo,
    POINT point,
    CPreviewView* pView);

參數

pDC
指向印表機裝置內容。

pInfo
指向 CPrintInfo 描述目前列印作業的結構。

point
指定上次以預覽模式顯示之頁面上的點。

pView
指向用於預覽的檢視物件。

備註

此函式的預設實作會呼叫 OnEndPrinting 成員函式,並將主框架視窗還原至列印預覽開始之前的狀態。 覆寫此函式,以在終止預覽模式時執行特殊處理。 例如,如果您想要在從預覽模式切換至一般顯示模式時維護檔中使用者的位置,您可以捲動至 參數所描述point的位置,以及m_nCurPage參數所指向之結構pInfo的成員CPrintInfo

一律從覆寫呼叫 的基類版本 OnEndPrintPreview ,通常是在函式結尾。

CView::OnInitialUpdate

在檢視第一次附加至文件之後,由架構呼叫,但在最初顯示檢視之前。

virtual void OnInitialUpdate();

備註

此函式的預設實作會呼叫OnUpdate沒有提示資訊的成員函式(也就是說,針對 參數和 NULL pHint 參數使用預設值 0lHint)。 覆寫此函式,以執行需要文件相關信息的任何一次性初始化。 例如,如果您的應用程式有固定大小的檔,您可以使用此函式,根據檔案大小初始化檢視的捲動限制。 如果您的應用程式支援可變大小的檔案,請使用 OnUpdate 來更新每次檔案變更時的捲動限制。

CView::OnPrepareDC

在呼叫成員函式以進行屏幕顯示之前 OnDraw ,以及在列印或列印預覽期間針對每個頁面呼叫成員函式之前 OnPrint ,由架構呼叫。

virtual void OnPrepareDC(
    CDC* pDC,
    CPrintInfo* pInfo = NULL);

參數

pDC
指向要用來轉譯檔影像的裝置內容。

pInfo
CPrintInfo指向描述目前列印作業的結構,如果OnPrepareDC呼叫列印或列印預覽,則m_nCurPage為 ;成員會指定要列印的頁面。 如果OnPrepareDC呼叫螢幕顯示,則此參數NULL為 。

備註

如果呼叫函式以進行屏幕顯示,則此函式的預設實作不會執行任何動作。 不過,此函式會在衍生類別中覆寫,例如 CScrollView,以調整裝置內容的屬性;因此,您應該一律在覆寫開頭呼叫基類實作。

如果呼叫函式進行列印,預設實作會檢查儲存在 參數中的 pInfo 頁面資訊。 如果未指定文件的長度,假設文件長度為一頁長, OnPrepareDC 並在列印一頁之後停止列印迴圈。 函式會將 結構的成員設定 m_bContinuePrintingFALSE,以停止列印迴圈。

基於下列任何原因覆寫 OnPrepareDC

  • 視需要調整指定頁面的裝置內容屬性。 例如,如果您需要設定對應模式或裝置內容的其他特性,請在此函式中執行此動作。

  • 若要執行列印時間分頁。 一般而言,當您使用 OnPreparePrinting 成員函式開始列印時,指定文件的長度。 不過,如果您事先不知道文件的時間長度(例如,列印資料庫中未決定的記錄數目時),請覆寫 OnPrepareDC 以在列印檔時測試檔的結尾。 當檔案不再列印時,請將 結構的成員CPrintInfo設定m_bContinuePrintingFALSE

  • 若要逐頁將逸出碼傳送至印表機。 若要從 OnPrepareDC傳送逸出碼,請呼叫 Escape 參數的成員 pDC 函式。

在覆寫開頭呼叫的基類版本 OnPrepareDC

範例

void CMyView::OnPrepareDC(CDC* pDC, CPrintInfo* pInfo)
{
   CView::OnPrepareDC(pDC, pInfo);

   // If we are printing, set the mapmode and the window
   // extent properly, then set viewport extent. Use the
   // SetViewportOrg member function in the CDC class to
   // move the viewport origin to the center of the view.

   if (pDC->IsPrinting()) // Is the DC a printer DC.
   {
      CRect rect;
      GetClientRect(&rect);

      pDC->SetMapMode(MM_ISOTROPIC);
      CSize ptOldWinExt = pDC->SetWindowExt(1000, 1000);
      ASSERT(ptOldWinExt.cx != 0 && ptOldWinExt.cy != 0);
      CSize ptOldViewportExt = pDC->SetViewportExt(rect.Width(), -rect.Height());
      ASSERT(ptOldViewportExt.cx != 0 && ptOldViewportExt.cy != 0);
      CPoint ptOldOrigin = pDC->SetViewportOrg(rect.Width() / 2, rect.Height() / 2);
   }
}

CView::OnPreparePrinting

在列印或預覽檔之前,由架構呼叫。

virtual BOOL OnPreparePrinting(CPrintInfo* pInfo);

參數

pInfo
指向 CPrintInfo 描述目前列印作業的結構。

傳回值

非零開始列印;如果列印作業已取消,則為 0。

備註

預設實作不做任何動作。

您必須覆寫此函式,才能啟用列印和列印預覽。 DoPreparePrinting呼叫成員函式、傳遞pInfo參數,然後傳回其傳回值;DoPreparePrinting顯示 [列印] 對話框並建立印表機裝置內容。 如果您想要使用預設值以外的值來初始化 [列印] 對話框,請將值指派給 的成員 pInfo。 例如,如果您知道檔的長度,請先將 值傳遞至 的 SetMaxPage 成員函式pInfo再呼叫 DoPreparePrinting。 此值會顯示在 [列印] 對話方塊的 [範圍] 部分的 [To:] 方塊中。

DoPreparePrinting 不會顯示預覽作業的 [列印] 對話框。 如果您要略過列印作業的 [列印] 對話框,請檢查 m_bPreview 的成員是否為 FALSE ,然後將它設定為 DoPreparePrinting,再將它傳遞給 ;之後再將它FALSETRUEpInfo設為 。

如果您需要執行需要存取 CDC 代表印表機裝置內容之物件的初始化(例如,如果您需要知道頁面大小,再指定文件的長度),請覆寫 OnBeginPrinting 成員函式。

如果您想要設定 參數的 m_nNumPreviewPagesm_strPageDesc 成員 pInfo 的值,請在呼叫 DoPreparePrinting之後執行。 成員 DoPreparePrinting 函式會將 設定 m_nNumPreviewPages 為應用程式 中找到的值。INI 檔案,並將其設定 m_strPageDesc 為其預設值。

範例

OnPreparePrinting 寫並呼叫 DoPreparePrinting 覆寫,讓架構會顯示 [列印] 對話框,併為您建立印表機 DC。

BOOL CMyEditView::OnPreparePrinting(CPrintInfo* pInfo)
{
   return CEditView::DoPreparePrinting(pInfo);
}

如果您知道檔包含多少頁,請在呼叫 DoPreparePrinting之前,先在 中OnPreparePrinting設定頁數上限。 架構會在 [列印] 對話框的 [到] 方塊中顯示頁碼上限。

BOOL CExampleView::OnPreparePrinting(CPrintInfo* pInfo)
{
   //The document has 2 pages.
   pInfo->SetMaxPage(2);
   return CView::DoPreparePrinting(pInfo);
}

CView::OnPrint

架構呼叫以列印或預覽文件的頁面。

virtual void OnPrint(
    CDC* pDC,
    CPrintInfo* pInfo);

參數

pDC
指向印表機裝置內容。

pInfo
指向 CPrintInfo 描述目前列印作業的結構。

備註

針對要列印的每個頁面,架構會在呼叫成員函式之後立即呼叫 OnPrepareDC 此函式。 要列印的頁面是由m_nCurPage指向之結構pInfo的成員CPrintInfo所指定。 默認實作會呼叫 OnDraw 成員函式,並傳遞印表機裝置內容。

基於下列任何原因覆寫此函式:

  • 允許列印多頁檔。 只轉譯對應至目前列印之頁面的檔部分。 如果您使用 OnDraw 來執行轉譯,您可以調整檢視區原點,只列印文件的適當部分。

  • 為了讓列印的圖像看起來與螢幕影像不同(也就是說,如果您的應用程式不是 WYSIWYG)。 不要將印表機裝置內容傳遞至 OnDraw,而是使用裝置內容,使用螢幕上未顯示的屬性來轉譯影像。

    如果您需要 GDI 資源來列印您不用於屏幕顯示,請在繪圖之前將其選取到裝置內容中,並在之後取消選取它們。 這些 GDI 資源應該配置於 中 OnBeginPrinting ,並在 中 OnEndPrinting釋放。

  • 若要實作頁首或頁尾。 您仍然可以藉 OnDraw 由限制可以列印的區域來執行轉譯。

請注意, m_rectDraw 參數的成員 pInfo 會以邏輯單元描述頁面的可列印區域。

請勿在覆寫 中呼叫 OnPrepareDC ;架構會在呼叫 之前自動呼叫 OnPrintOnPrepareDCOnPrint

範例

以下是覆寫 OnPrint 函式的基本架構:

void CMyView::OnPrint(CDC* pDC, CPrintInfo* pInfo)
{
   UNREFERENCED_PARAMETER(pInfo);

   // Print headers and/or footers, if desired.
   // Find portion of document corresponding to pInfo->m_nCurPage.
   OnDraw(pDC);
}

如需其他範例,請參閱 CRichEditView::PrintInsideRect

CView::OnScroll

由架構呼叫,以判斷卷動是否可行。

virtual BOOL OnScroll(
    UINT nScrollCode,
    UINT nPos,
    BOOL bDoScroll = TRUE);

參數

nScrollCode
表示用戶捲動要求的滾動條代碼。 此參數是由兩個部分所組成:低序位元組,可決定水平發生的卷動類型,以及高階位元組,決定垂直發生的捲動類型:

  • SB_BOTTOM 捲動到底部。

  • SB_LINEDOWN 向下捲動一行。

  • SB_LINEUP 向上捲動一行。

  • SB_PAGEDOWN 向下捲動一頁。

  • SB_PAGEUP 向上捲動一頁。

  • SB_THUMBTRACK 將滾動盒拖曳至指定的位置。 目前的位置是在 中 nPos指定。

  • SB_TOP 捲動到頂端。

nPos
如果滾動條代碼為 SB_THUMBTRACK,則包含目前的滾動盒位置,否則不會使用。 視初始捲動範圍而定,可能是負數, nPos 而且應該視需要轉換成 int

bDoScroll
判斷是否應該實際執行指定的捲動動作。 如果 TRUE為 ,則應該進行捲動;如果 FALSE為 ,則不應該進行捲動。

傳回值

如果 bDoScrollTRUE 且檢視實際捲動,則傳回非零;否則為 0。 如果 bDoScrollFALSE,則傳回如果 為TRUE時所傳回bDoScroll的值,即使您實際上並未執行卷動也一樣。

備註

在一種情況下,當檢視收到滾動條訊息時,架構 bDoScroll 會呼叫設定 TRUE 為的函式。 在此情況下,您應該實際捲動檢視。 在其他情況下,當 OLE 專案一開始拖曳至放置目標的自動捲動區域時,就會呼叫bDoScrollFALSE此函式,然後才實際進行捲動。 在此情況下,您不應該實際捲動檢視。

CView::OnScrollBy

當用戶檢視檔目前檢視以外的區域時,由架構呼叫,方法是將 OLE 專案拖曳至檢視的目前框線,或是操作垂直或水準滾動條。

virtual BOOL OnScrollBy(
    CSize sizeScroll,
    BOOL bDoScroll = TRUE);

參數

sizeScroll
水平和垂直捲動的像素數目。

bDoScroll
判斷是否要卷動檢視。 如果 TRUE為 ,則會進行捲動;如果 FALSE為 ,則不會進行捲動。

傳回值

如果檢視能夠捲動,則為非零;否則為 0。

備註

在衍生類別中,此方法會檢查檢視是否可依使用者要求的方向捲動檢視,然後視需要更新新的區域。 這個函式會自動由 CWnd::OnHScrollCWnd::OnVScroll 呼叫,以執行實際的捲動要求。

這個方法的默認實作不會變更檢視,但如果未呼叫,則檢視將不會在衍生類別中 CScrollView卷動。

如果文件寬度或高度超過 32767 像素,捲動超過 32767 將會失敗,因為 OnScrollBy 呼叫時具有無效 sizeScroll 的自變數。

CView::OnUpdate

在修改檢視的文件之後,由架構呼叫;此函式由 CDocument::UpdateAllViews 呼叫,並允許檢視更新其顯示,以反映這些修改。

virtual void OnUpdate(
    CView* pSender,
    LPARAM lHint,
    CObject* pHint);

參數

pSender
指向修改檔案的檢視,或 NULL 如果要更新所有檢視,則為 。

lHint
包含修改的相關信息。

pHint
指向儲存修改相關信息的物件。

備註

它也會由的預設實作 OnInitialUpdate呼叫。 默認實作會使整個工作區失效,在收到下一 WM_PAINT 則訊息時將其標示為繪製。 如果您想要只更新對應至檔修改部分的區域,請覆寫此函式。 若要這樣做,您必須使用提示參數傳遞修改的相關信息。

若要使用 lHint,請定義特殊的提示值,通常是位掩碼或列舉型別,並讓檔傳遞其中一個值。 若要使用 pHint,請從 CObject 衍生提示類別,並讓檔將指標傳遞至hint物件;覆寫時 OnUpdate,請使用 CObject::IsKindOf 成員函式來判斷提示對象的運行時間類型。

一般而言,您不應該直接從 OnUpdate執行任何繪圖。 相反地,請決定描述裝置座標中需要更新的區域的矩形;將此矩形傳遞到 CWnd::InvalidateRect。 這會導致下一次 WM_PAINT 收到訊息時進行繪製。

如果 lHint 為 0 且 pHintNULL,則檔已傳送一般更新通知。 如果檢視收到一般更新通知,或無法譯碼提示,則應該使整個工作區失效。

另請參閱

MFC 範例 MDIDOCVW
CWnd
階層架構圖表
CWnd
CFrameWnd
CSplitterWnd
CDC
CDocTemplate
CDocument