Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / Скрин страницы, загруженной в CppWebBrowser / 3 сообщений из 3, страница 1 из 1
04.07.2015, 14:39
    #38999582
Николай II
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Скрин страницы, загруженной в CppWebBrowser
Задача: сделать скрин загруженой в CppWebBrowser страницы и сохранить его в формате bmp.
Для работы с CppWebBrowser я всегда использую OLE интерфейс, так как COM выше моего уровня знаний. Но тут похоже без COM не обойтись.
Нашел код, который делает скрины картинок html станицы. Понимаю, что мне нужно сделать тоже самое, только для Body, но как переделать этот код даже ума не приложу, настолько для меня эти небоскребы непонятны! Поэтому прошу вашей помощи.
Код, который делает скрины всех картинок на странице:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
#include "mshtml.h"
#include <memory>
.....
void __fastcall TForm1::Button2Click(TObject *Sender)
{
TComInterface<IHTMLDocument2> pHTMLDocument2;
	if (SUCCEEDED(CppWebBrowser1->Document->QueryInterface(IID_IHTMLDocument2, (LPVOID*)&pHTMLDocument2)))
	{
		IHTMLElementCollection* Images = NULL;
		if (SUCCEEDED(pHTMLDocument2->get_images(&Images)) && Images)
		{
			long ImagesCount = 0;
			if (SUCCEEDED(Images->get_length(&ImagesCount)))
			{
				for (int i = 0; i < ImagesCount; i++)
				{
					IHTMLImgElement* Image = NULL;
					IDispatch* Disp = NULL;
					Variant item = i;
					Variant index = 0;
					if (SUCCEEDED(Images->item(item, index, &Disp)) && Disp)
					{
						if (SUCCEEDED(Disp->QueryInterface(IID_IHTMLImgElement,
							(void**)&Image)) && Image)
						{

							IHTMLElementRender *spElemRender;
							HRESULT hr = Image->QueryInterface(IID_IHTMLElementRender, (void**)&spElemRender);
                            if (SUCCEEDED(hr) && spElemRender)
							{
								long bm_hei, bm_wid;
								Image->get_width(&bm_wid);
								Image->get_height(&bm_hei);

								std::auto_ptr<Graphics::TBitmap> bm(new Graphics::TBitmap);
								bm->SetSize(bm_wid, bm_hei);
								spElemRender->DrawToDC(bm->Canvas->Handle);
								bm->SaveToFile(String().sprintf(L"D:\\test\\data_00%d.bmp", i));
							}
							Image->Release();
						}
						Disp->Release();
					}
				}
			}
			Images->Release();
		}
	}
}


-------------------------
C++ Builder 2010
Самоучка
...
Рейтинг: 0 / 0
04.07.2015, 16:45
    #38999632
Николай II
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Скрин страницы, загруженной в CppWebBrowser
Пытался с двух разных примеров слепить один:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
#include "mshtml.h"
#include <memory>
.....
void __fastcall TForm1::Button3Click(TObject *Sender)
{
long i;
IHTMLDocument2* iDoc;
IDispatch* iDisp;
IHTMLElement* IElement;
IHTMLSelectElement* iSelectElement;
IHTMLInputElement *iInputElement;
IHTMLOptionElement* iOptionElement;
IHTMLAnchorElement* IAnchorElement;
IHTMLScriptElement *IScriptElement;
IHTMLBodyElement* IBodyElement;
IHTMLTextAreaElement* iTextAreaElement;
IHTMLImgElement* iImgElement;
IHTMLFormElement* iFormElement;
IHTMLElementCollection* iElementCollection=NULL;
if( CppWebBrowser1 ->ControlInterface->Document)
	{
	 CppWebBrowser1 ->ControlInterface->Document->QueryInterface(__uuidof( IHTMLDocument2),(void**)&iDoc);
	}
iDoc->get_all(&iElementCollection);
long p;
iElementCollection->get_length(&p);
iDoc->get_body(&IElement);

IHTMLElementRender *spElemRender;
HRESULT hr = iDoc->QueryInterface(IID_IHTMLElementRender, (void**)&spElemRender);
if (SUCCEEDED(hr) && spElemRender)
	{
	long bm_hei, bm_wid;
	bm_wid=CppWebBrowser1->Width;
	bm_hei=CppWebBrowser1->Height;

	std::auto_ptr<Graphics::TBitmap> bm(new Graphics::TBitmap);
	bm->SetSize(bm_wid, bm_hei);
	spElemRender->DrawToDC(bm->Canvas->Handle);
	bm->SaveToFile(String().sprintf(L"D:\\test\\data_00%d.bmp", i));
	}

iDoc->Release();
}


Ошибки не вызывает, но и не работает (в папке test результирующего файла нет) (((
...
Рейтинг: 0 / 0
04.07.2015, 18:20
    #38999652
Николай II
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Скрин страницы, загруженной в CppWebBrowser
Слепил! Может кому пригодиться:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
#include "mshtml.h"
#include <memory>
.....
void __fastcall TForm1::Button3Click(TObject *Sender)
{
IHTMLDocument2* iDoc;
IHTMLElement* IElement;
IHTMLElementRender *spElemRender;

CppWebBrowser1 ->ControlInterface->Document->QueryInterface(__uuidof( IHTMLDocument2),(void**)&iDoc);
iDoc->get_body(&IElement);
HRESULT hr = IElement->QueryInterface(IID_IHTMLElementRender, (void**)&spElemRender);
if (SUCCEEDED(hr) && spElemRender)
	{
	long bm_hei, bm_wid;
	bm_wid=CppWebBrowser1->Width;
	bm_hei=CppWebBrowser1->Height;

	std::auto_ptr<Graphics::TBitmap> bm(new Graphics::TBitmap);
	bm->SetSize(bm_wid, bm_hei);
	spElemRender->DrawToDC(bm->Canvas->Handle);
	bm->SaveToFile(L"D:\\test\\data.bmp");
	}

iDoc->Release();
IElement->Release();
spElemRender->Release();
}
...
Рейтинг: 0 / 0
Форумы / C++ [игнор отключен] [закрыт для гостей] / Скрин страницы, загруженной в CppWebBrowser / 3 сообщений из 3, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]