背景:
我现在正尝试通过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.首先,我认为设备内容在取消作业后会失效(当然不是这样),并试图检查StartPage
和EndPage
的返回值。然后我发现他们在取消打印工作后都没有失败
2.我也尝试了SetAbortProc
和DocumentEvent
,发现它们不是我想要的。
但我想在打印作业取消时应该有一些机制来指示我的申请。如果有人试图提供帮助,我们将不胜感激。
答案 0 :(得分:1)
执行所需操作的唯一方法是使用GetJob function查询打印作业并终止循环。你想要的逻辑是这样的:
JOB_INFO_1 ji;
GetJob(...);
if (ji.Status & (JOB_STATUS_DELETED | JOB_STATUS_DELETING))
break;