Есть задача печати документов в формате HTML. В Windows это прекрасно реализовано через контекстное меню Explorer , пункт "Печать". Хочется реализовать нечто подобное, чтоб не надо было открывать документ или диалоговое окно Print а просто послать на печать. Мне кажется это селано через какой-то СОМ-интерфейс. ПОдскажите поточнее.
Здравствуйте Telemax, Вы писали:
T>Есть задача печати документов в формате HTML. В Windows это прекрасно реализовано через контекстное меню Explorer , пункт "Печать". Хочется реализовать нечто подобное, чтоб не надо было открывать документ или диалоговое окно Print а просто послать на печать. Мне кажется это селано через какой-то СОМ-интерфейс. ПОдскажите поточнее.
Здравствуйте Ростислав Глухов, Вы писали:
РГ>Здравствуйте Telemax, Вы писали:
T>>Есть задача печати документов в формате HTML. Хочется реализовать нечто подобное, чтоб не надо было открывать документ или диалоговое окно Print а просто послать на печать.
РГ>IWebBrowser2::ExecWB(OLECMDID_PRINT, OLECMDEXECOPT_PROMPTUSER, NULL, NULL);
Я рассматривал этот интерфейс и эту команду. Если не ошибаюсь, для его использования _обязательно_ надо создать контрол Microsoft WebBrowser. У этого контрола _обязательно_ должно быть родительское окно. А нельзя ли без всего этого? Тоесть, чтоб этот контрол и видно не было?
Хотелось бы взглянуть на примеры такой работы IWebBowser2.
Здравствуйте telemax, Вы писали:
T>Здравствуйте Ростислав Глухов, Вы писали:
РГ>>Здравствуйте Telemax, Вы писали:
T>>>Есть задача печати документов в формате HTML. Хочется реализовать нечто подобное, чтоб не надо было открывать документ или диалоговое окно Print а просто послать на печать.
РГ>>IWebBrowser2::ExecWB(OLECMDID_PRINT, OLECMDEXECOPT_PROMPTUSER, NULL, NULL);
T>Я рассматривал этот интерфейс и эту команду. Если не ошибаюсь, для его использования _обязательно_ надо создать контрол Microsoft WebBrowser. У этого контрола _обязательно_ должно быть родительское окно. А нельзя ли без всего этого? Тоесть, чтоб этот контрол и видно не было?
Для этого метода контрол, действительно нужен
::ShowWindow(hWnd,SW_HIDE);
T>Хотелось бы взглянуть на примеры такой работы IWebBowser2.
Здравствуйте, Ростислав Глухов, Вы писали:
РГ>Да! РГ>Можно попробовать создать CAxWindow, РГ>положить на него WebBrowser РГ>а потом после использования прибить все это.
Такой метод работает, только существует проблема с синхронизацией.
IWebBrowser2::ExecWB(OLECMDID_PRINT, OLECMDEXECOPT_PROMPTUSER, NULL, NULL); —
работает асинхронно (запускает тред в браузере). И если окно прибить раньше
времени, то документ не распечатается целиком. Насколько я знаю сто процентного
решения этой проблемы не существует. Сабыие OnAfterPrint не всегда генерится
(кроме того оно поддерживается только начиная с версии 5), можно пытаться смотреть спул принтера на предмет состояния печати документа, либо считать количество тредов в браузере.
И есть еще проблема — если окно контейнера в состоянии Invisible, а документ
имеет гиперссылки, то он может вообще не распечататся просто тред будет висеть
и ничего не делать...