1

私は大きなプロジェクトで印刷機能を実装して、いわゆるガジェット(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 で機能しない原因は何ですか?

4

2 に答える 2

0

問題が CDC/CpaintDC ではないことがわかりました。最初にテストしたプリンターでは機能しません。別のプリンターを試したところ、うまくいきました。

「REAL」の問題について別の質問を作成 しました CDCを使用したMFC印刷は、一部のプリンターでのみ機能します

于 2015-06-23T07:15:19.513 に答える