CView::OnPrepareDC
画面表示のために OnDraw メンバー関数が呼び出される前、および印刷または印刷プレビューで各ページに OnPrint メンバー関数が呼び出される前に、フレームワークが呼び出します。
virtual void OnPrepareDC(
CDC* pDC,
CPrintInfo* pInfo = NULL
);
パラメーター
pDC
ドキュメントのイメージの描画に使用するデバイス コンテキストへのポインター。pInfo
印刷または印刷プレビューで OnPrepareDC が呼び出されたときの現在の印刷ジョブを表す CPrintInfo 構造体へのポインター。この構造体の m_nCurPage メンバーは印刷されるページを指定します。 画面表示で OnPrepareDC が呼び出されたときは、このパラメーターは NULL とします。
解説
この関数が画面表示で呼び出される場合、既定の実装では何も行いません。 しかし、CScrollView などの派生クラスでは、デバイス コンテキストの属性を調整するために、この関数をオーバーライドします。その結果、オーバーライドした関数の最初で基本クラスの実装を常に呼び出す必要があります。
この関数が印刷のために呼び出されると、既定の実装はパラメーター pInfo に設定されたページ情報を調べます。 ドキュメントの長さが指定されなかったときは、OnPrepareDC はドキュメントの長さを 1 ページと仮定し、1 ページを印刷した後印刷を停止します。 構造体の m_bContinuePrinting メンバーを FALSE に設定すると、この関数は繰り返し印刷を停止します。
以下のいずれかの理由があるとき、OnPrepareDC をオーバーライドします。
特定のページに対して必要となるデバイス コンテキストの属性を調整するとき。 たとえば、マップ モードやデバイス コンテキストのその他の特性を設定する必要があるときは、この関数をオーバーライドします。
印刷時にページ付けを行うとき。 通常、印刷開始時に OnPreparePrinting メンバー関数を使って、ドキュメントの長さを指定します。 ドキュメントの長さがあらかじめわからなかったとき (たとえば、データベースから未確定の数のレコードを印刷するようなとき)、OnPrepareDC メンバー関数をオーバーライドして印刷中にドキュメントの最後を調べます。 これ以上印刷するドキュメントがなくなった場合、CPrintInfo 構造体の m_bContinuePrinting メンバーを FALSE に設定してください。
ページ単位でプリンターにエスケープ コードを送りたいとき。 OnPrepareDC でエスケープ コードを送るには、パラメーター pDC で指定したデバイス コンテキストの Escape メンバー関数を呼び出してください。
オーバーライドした関数の先頭で、基本クラスの 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);
}
}
必要条件
**ヘッダー:**afxwin.h