1

背景:
我现在正在尝试通过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.首先我认为取消作业后设备内容会变得无效(这当然不是真的),并尝试检查 and 的返回StartPageEndPage。然后我发现他们在取消打印作业后都没有失败。
2. 我也试过SetAbortProcand DocumentEvent,发现它们不是我想要的。


但是我想当打印作业被取消时应该有一些机制来指示我的应用程序。如果有人试图提供帮助,我们将不胜感激。

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 回答