Есть контрол для dhtml, изначально сгенеренный визардом ATL 7.1. Когда страничка с этим контролом выводится на печать, то он не отрисовывается. Хотя приходит вызов в OnDraw — туда, где рисуется "ATL 70", контекст и rect валидные, он рисует в контекст — на листе белый placeholder. Кто-нибудь сталкивался с такой проблемой? Посмотрел как Flash контрол печатается-там все нормально.
Здравствуйте, Аноним, Вы писали:
А>Есть контрол для dhtml, изначально сгенеренный визардом ATL 7.1. Когда страничка с этим контролом выводится на печать, то он не отрисовывается. Хотя приходит вызов в OnDraw — туда, где рисуется "ATL 70", контекст и rect валидные, он рисует в контекст — на листе белый placeholder. Кто-нибудь сталкивался с такой проблемой? Посмотрел как Flash контрол печатается-там все нормально.
MSDN "Printing with the Internet Explorer WebBrowser Control":
My ActiveX control displays fine on screen, but isn't printing properly—why? There are many factors to contend with if you want your control to support being printed from within Internet Explorer.
You must first understand that Internet Explorer prints in a background thread. Basically, it creates a separate, hidden instance of the Web page along with all of its controls; renders the content to a printer device context, which is a metafile; sends the output to the print spooler; and then releases the resources and exits. So there is a separate instance of each ActiveX control that is created specifically for printing purposes. It is also important to note that the printing instance will be created in a separate apartment from the display instance, so your control must be apartment threaded.
To insure that the control is printed in the correct state, the control should support one of the persistence interfaces such as IPersistPropertyBag, IPersistPropertyBag2, or IPersistStreamInit. When printing, Internet Explorer will query for your supported persistence interface, call the Save method, create the new instance of your control, and finally call the Load method to bring the new instance up in the same state. The control should also support device-independent rendering, which means that there are no assumptions made about the type of device context. Typical bad assumptions are that the client coordinates are in pixels or that the origin is at 0,0. When printing, the device context will be a metafile; therefore, to work properly, your control must restrict its drawing operations when printing to those supported in metafiles. Also, the control should not rely on window handles in the drawing code.
Finally, controls are not activated by the user interface (UI) when printed in the background, so certain events that occur when the control is displayed on screen may not occur when the control is printed. For example, the OnCreate handler is not called if the control is not activated by the UI. A common workaround is to move initialization code from OnCreate to COleControl::OnSetClientSite for Microsoft Foundation Classes (MFC) or CComControl::SetClientSite (ATL).
Re[2]: Печать ActiveX-контрола из WebBrowser
От:
Аноним
Дата:
24.06.04 09:20
Оценка:
Здравствуйте, algol, Вы писали:
/* ... */ A>MSDN "Printing with the Internet Explorer WebBrowser Control":
/*....*/
Мой контрол полностью поддерживает требования DHTML, т.к. сгенерен визардом ATL 7.1 с опцией "для DHMTL" (или типа того). Я проверил еще раз — apartment, IPersistStreamInit, инициализация данными пока не нужна, т.к. хочу для начала просто увидеть, что печатается. Я подозреваю, что надо обработать какой-то еще вызов или это баг в ATL 7. Если открыть html-ресурс клиента в редакторе VS, то там он рисует свое неактивное состояние и все прекрасно. Проблема именно с WebBrowser контролом.
Здравствуйте, Аноним, Вы писали:
А>Есть контрол для dhtml, изначально сгенеренный визардом ATL 7.1. Когда страничка с этим контролом выводится на печать, то он не отрисовывается. Хотя приходит вызов в OnDraw — туда, где рисуется "ATL 70", контекст и rect валидные, он рисует в контекст — на листе белый placeholder. Кто-нибудь сталкивался с такой проблемой? Посмотрел как Flash контрол печатается-там все нормально.
Господа гуру ATL/WTL приложений и серверов, неужели нет никого, кто может помочь с данной проблемой
Re[3]: Печать ActiveX-контрола из WebBrowser
От:
Аноним
Дата:
10.05.05 16:57
Оценка:
Привет!
У меня точно такая же проблема. Но мой ActiveX не DHTML а Standart Control c опцией minimal. У меня такое чувство, что при активации эксплорер формирует данные для печати и если после этого картинка твоего контрола меняется то контейнеру надо сообщить об этом чтоб он переделал свои данные для посылки в принтер. Как это сделать?
Здравствуйте, Аноним, Вы писали:
А>У меня такое чувство, что при активации эксплорер формирует данные для печати и если после этого картинка твоего контрола меняется то контейнеру надо сообщить об этом чтоб он переделал свои данные для посылки в принтер. Как это сделать?