私は大きなプロジェクトで印刷機能を実装して、いわゆるガジェット(CWndから派生)を印刷しています。ガジェット クラスで、デバイス コンテキストにレンダリングする関数を作成しました。
PrintPageContent(CDC * pDC, const CRect & rContent, int page, int numPages) {
PrintWindow(pDC, PW_CLIENTONLY);
pDC->Rectangle(rContent.left,rContent.top, rContent.right, rContent.bottom);
ガジェットを簡単にレンダリングするには、PrintWindow 関数を使用することを考えました https://msdn.microsoft.com/en-us/library/x51z0shh.aspx
ただし、これは PrintPreview をレンダリングする場合にのみ機能します。私が実際に印刷しているときは、そうではありません。どちらの場合も同じ関数が呼び出され、唯一の違いは、プレビューの場合は「CDC * pDC」が「CPaintDC」オブジェクトであり、実際の印刷の場合は「CDC」オブジェクトであることです。
本当に「PrintWindow」関数が機能しないことを確認するために、関数 [pDC->Rectangle(...);] に別のコード行を追加しました。これは、プレビューと紙で確認できます。
CWnd::Print または CWnd::PrintClient 関数を使用することも考えましたが、どちらの場合も機能しません。
私の質問は、回避策として何ができるか、または (CWnd から派生した) オブジェクトのレンダリングが CDC ではなく CPaintDC で機能しない原因は何ですか?