Требуется сообщение об отмене задания диспетчера очереди печати или обратный вызов

Общие сведения.
Сейчас я пытаюсь выполнить печать через GDI Print API и выглядит следующим образом:

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

Проблема:
Во время печати появлялся значок в области уведомлений, и при нажатии на него появлялось небольшое окно, показывающее текущие задания на печать на указанном принтере.
При нажатии правой кнопкой мыши. на задании на печать и выбрав Cancel, задание на печать будет отменено. Но мое приложение продолжает отправлять данные на контроллер домена принтера до тех пор, пока все страницы не будут обработаны, а статус продолжает показывать Deleting - Spooling до завершения.
Я хочу остановить процедуру печати сразу после ее отмены.

Что я пробовал:
1. Сначала я подумал, что содержимое устройства станет недействительным после отмены задания (это, конечно, неверно), и попытался проверить возвращаемые значения StartPage и EndPage. Затем я обнаружил, что они оба не выходят из строя после отмены задания на печать.
2. Я также пробовал SetAbortProc и DocumentEvent и обнаружил, что это не то, что мне нужно.


Но я полагаю, что должен быть какой-то механизм, чтобы указать мое приложение, когда задание на печать отменено. Будем признательны, если кто-то попытается помочь.


person starrify    schedule 04.01.2013    source источник


Ответы (1)


Единственный способ сделать то, что вы хотите, — запросить задание на печать с помощью GetJob и завершите цикл. Логика, которую вы хотите, выглядит так:

JOB_INFO_1 ji;
GetJob(...);
if (ji.Status & (JOB_STATUS_DELETED | JOB_STATUS_DELETING))
   break;
person Carey Gregory    schedule 04.01.2013
comment
Да, это то, что я хочу. Спасибо за помощь. :) - person starrify; 05.01.2013