(В тексте везде используется язык C# 2.0)
Я использую его для рисования в System.Drawing.Bitmap, но сущуствует проблема с отрисовкой полученной картинки.
Если сразу после выполнения метода DrawToDC() использовать полученный Bitmap для присвоения проперти например контрола PictureBox.Image, то с равной периодичностью увидим либо пустую картинку, либо нужный нам отрисованный HTMLElement. При это если остаётся пустая картинка, получить отрисованное но невидимое изображение можно лишь изменением размеров контрола PictureBox (Invalidate() тупо не помогает
). Может кто сталкивался с этой проблемой?
Предполагаю это как-то связано с асинхронностью выполнения метода отрисовки.
Напишите пожалуйста примеры использования метода IHTMLElementRender.DrawToDC().
Вот мои сорсы:
public void DrawPreview(IStyleSheetRule styleSheetRule, Image image)
{
DrawPreview(styleSheetRule, Graphics.FromImage(image), image.Width, image.Height);
}
public void DrawPreview(IStyleSheetRule styleSheetRule, Graphics graphics, int width, int height)
{
UpdatePreview(styleSheetRule);
DrawPreview(graphics, width, height);
}
public void DrawPreview(Graphics graphics, int width, int height)
{
_webBrowser.Width = width;
_webBrowser.Height = height;
DrawPreview(graphics);
}
public void DrawPreview(Graphics graphics)
{
NativeMethods.IHTMLElement2 bodyElement = GetBodyElement();
if (bodyElement != null)
DrawPreview(bodyElement as IHTMLElementRender, graphics);
}
protected static void DrawPreview(IHTMLElementRender render, IDeviceContext graphics)
{
if (render != null && graphics != null)
{
IntPtr memDC = graphics.GetHdc();
render.DrawToDC(memDC);
}
}
P.S. если вопрос не совсем ясен, сорри, я подробнее опишу проблему, всё равно пишите, кто хотя бы работал с MSHTML и использовал этот метод, не обязательно на C#.
... << RSDN@Home 1.2.0 alpha rev. 774>>
Я решил эту проблему и решение очень простое:
После вызова метода graphics.GetHdc() надо обязательно вызывать graphics.ReleaseHdc();
... << RSDN@Home 1.2.0 alpha rev. 774>>