Итак, создаем приложение на базе диалогового окна с подключением Automation и с именем TestExploler. В начале нам нужно добавить информацию об объекте Exploler из библиотеки типов. Запускаем Class Wizard. Выбираем кнопку Add Class и в выпадающих вариантах From Type Library. Идем в папочку:
windows\system
И находим Shdocvw.dll. Выбираем его и нажимаем "Открыть". Появится диалоговое окно со списком классов, которые нужно добавить в проект. Мы выберем IWebBrowserApp и нажмем OK.
Посмотрите вкладку ClassView и Вы найдете класс IWebBrowserApp. Если Вы попробуете скомпилировать проект, то у Вас это может не получиться, как у меня. Будет ошибка говорящая о том, что такой класс уже есть. Выход такой - переименовать. Для этого удобно использовать Replace:
IWebBrowserApp на IWebBrowserApps
Подключаем описание класса и переменную класса к классу диалога:
// T1Dlg.h : header file // ...... class CT1DlgAutoProxy; #include "shdocvw.h" /////////////////////////////////////////////////// // CT1Dlg dialog class CT1Dlg : public CDialog { ...... public: CT1Dlg(CWnd* pParent = NULL); // standard constructor virtual ~CT1Dlg(); IWebBrowserApps* mExps; ...... };
Создаем объект при создании окна и удаляем при удалении окна.
BOOL CTestExplolerDlg::OnInitDialog() { ...... // TODO: Add extra initialization here mExp = new IWebBrowserApps; return TRUE; // return TRUE unless you set the focus to a control } void CTestExplolerDlg::OnClose() { if (CanExit()) { delete mExp; CDialog::OnClose(); } }
После создания класса его необходимо связать с реальным объектом:
BOOL CTestExplolerDlg::OnInitDialog() { ...... // TODO: Add extra initialization here mExp = new IWebBrowserApps; if (!mExp->CreateDispatch("InternetExplorer.Application")) { AfxMessageBox("Error Dispath"); return FALSE; } return TRUE; // return TRUE unless you set the focus to a control }
Естественно, что запись об этом объекте должна быть в реестре в разделе HKEY_CLASSES_ROOT.
Вот теперь все готово к использованию Explorer.
void CTestExplolerDlg::OnButton1() { COleVariant noArg; mExp->Navigate("http://www.firststeps.ru/",&noArg,&noArg,&noArg,&noArg); mExp->SetVisible(TRUE); }
Мы просто воспользовались методами класса.