1

Backgroud:GDI Print API
を介して印刷しようとしていますが、次のようになります。

StartDoc(hDC,&docinfo)
foreach page in page_buf
    StartPage(hDC)
    /* write the page to printer DC */
    EndPage(hDC)
EndDoc(hDC)

問題:
印刷中に通知領域のアイコンが表示され、それをクリックすると、指定したプリンターでの現在の印刷ジョブを示す小さなウィンドウが表示されます。
印刷ジョブを右クリックしてを選択するCancelと、印刷ジョブがキャンセルされます。しかし、私のアプリケーションは、すべてのページが処理されるまでプリンターDCにデータを送信し続け、Deleting - Spooling終了する前にステータスが表示され続けます。
私が欲しいのは、それをキャンセルすることを選択した直後に印刷手順を停止することです。

私が試したこと:
1。最初に、ジョブをキャンセルするとデバイスのコンテンツが無効になると思い(もちろんそうではありません)、との戻り値を調べてみましStartPageEndPage。それから、印刷ジョブのキャンセル後、両方とも失敗しないことがわかりました。
2.私も試しSetAbortProcDocumentEventみましたが、それらが私が望むものではないことがわかりました。


しかし、印刷ジョブがキャンセルされたときにアプリケーションを示すメカニズムがあると思います。誰かが助けてくれれば幸いです。

4

1 に答える 1

1

必要なことを行う唯一の方法は、 GetJob 関数を使用して印刷ジョブをクエリし、ループを終了することです。必要なロジックは次のようになります。

JOB_INFO_1 ji;
GetJob(...);
if (ji.Status & (JOB_STATUS_DELETED | JOB_STATUS_DELETING))
   break;
于 2013-01-04T21:05:36.033 に答える