IViewObject::Draw возвращает ошибку
От: srg984  
Дата: 06.05.08 21:19
Оценка:
Задача — получить скриншот веб страницы.

Код следующий:

        IDispatch *d = NULL;
        IHTMLDocument2 *doc = NULL;
        IViewObject *v = NULL;

        int width = 10;
        int height = 10;

        w->get_Document(&d);

        if (d->QueryInterface(IID_IHTMLDocument2,(void **)&doc) != S_OK)
                break;
        if (doc->QueryInterface(IID_IViewObject,(void **)&v) != S_OK)
               break;

        RECTL r;
        r.left = 20;
        r.top = 20;
        r.right = width + r.left;
        r.bottom = height + r.top;

        HDC hDC = GetDC(NULL);
        HDC hdcMem = CreateCompatibleDC(hDC);
        HBITMAP hbm = CreateCompatibleBitmap(hDC, width,height);
        SelectObject(hdcMem, hbm);

        HRESULT hr = v->Draw(DVASPECT_CONTENT, -1, NULL, NULL, hDC,hdcMem, &r, NULL, NULL, 0);


hr == OLE_E_BLANK

Гуглил по этой теме — есть примеры, получения скриншота, однако они с использованием Mfc, мне не подходит, так-как код должен компилироваться в VS и в Builder-е.

Предлогаются варианты с использованием функции OleDraw — но результат тотже.
Пытался использовать IHTMLElementRender, однако не смог его получить, пытался так:
(условно)

w->get_Document(&d);
d->QueryInterface(IID_IHTMLDocument2,&doc);
doc->get_Body(&b);
b->QueryInterface(IID_IHTMLElementRender,&r); // вот тут ошибка
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.