Задача — получить скриншот веб страницы.
Код следующий:
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); // вот тут ошибка