共用方式為


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 沒有提示資訊的成員函式(也就是說,針對 參數和 NULLpHint 參數使用預設值 0 lHint )。 覆寫此函式,以執行需要檔相關資訊的任何一次性初始化。 例如,如果您的應用程式有固定大小的檔,您可以使用此函式,根據檔案大小初始化檢視的捲動限制。 如果您的應用程式支援可變大小的檔,請使用 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