Transferred from: http://blog.csdn.net/one_in_one/article/details/26372981
(1) Create a new MFC dialog Box project
(2) Add Webbrower Control to the dialog box, Add Method: Click menu Bar Tool, select Toolbox item, and in the Popup Select Toolbox Item dialog box Select COM component->microsoft Web browser-> OK, add to dialog box.
(3) Add the header file and implementation of class CWebBrowser2
Right-click Project, add Class->visual C + +, Mfc->activex control, MFC class, click Add button, add Class from registry source, available ActiveX controls select Microsoft Web browser<1.0>-> Interface Selection iwebbrowser2-> Click > button, click the Finish button, You can add CWebBrowser2.h and CWebBrowser2.cpp to your project, XXXdlg.h contains header files
#include "CWebbrowser2.h", define variable CWebBrowser2 m_web;
(4) XXXdlg.cpp add a control to a variable dynamically bound to the DoDataExchange
DDX_Control (PDX, Idc_explorer1, M_web);
(5) Add the XXXdlg.cpp initialization function
VARIANT VT;
COleVariant vaurl=_t ("http://www.baidu.com");
M_web. Navigate2 (VAURL,&VT,&VT,&VT,&VT);
Run the program, you can see the automatic loading Baidu page.
(6) XXXdlg.h add a statement to further manipulate the page when the page is loaded
Declare_eventsink_map ()
void Documentcompleteexplorer (Lpdispatch pdisp, variant* URL);
(7) Add in XXXdlg.cpp
Begin_eventsink_map (Cbaidudlg, CDialogEx)
On_event (Cbaidudlg, Idc_explorer1, 259, Cbaidudlg::D ocumentcompleteexplorer, Vts_dispatch VTS_PVARIANT)
End_eventsink_map ()
(8) Realizing Documentcompleteexplorer
Analysis Baidu source code can get the input box ID is KW1, the button ID is su1. Due to Baidu page label changes, their own attention to replace.
[CPP]View Plaincopy
- <span style="FONT-SIZE:18PX;" >void Cbaidudlg::D ocumentcompleteexplorer (lpdispatch pdisp, variant* URL)
- {
- HRESULT HR;
- Lpunknown Lpunknown;
- Lpunknown LPUNKNOWNWB = NULL;
- Lpunknown LPUNKNOWNDC = NULL;
- IHTMLElementCollection *objallelement=null;
- IHTMLDocument2 *objdocument=null;
- CString strurl,strtemp;
- Lpunknown = M_web. GetControlUnknown ();
- ASSERT (Lpunknown);
- if (lpunknown)
- {
- hr = Lpunknown->queryinterface (IID_IUnknown, (lpvoid*) &LPUNKNOWNWB);
- ASSERT (SUCCEEDED (HR));
- if (FAILED (HR))
- return;
- hr = Pdisp->queryinterface (IID_IUnknown, (lpvoid*) &LPUNKNOWNDC);
- ASSERT (SUCCEEDED (HR));
- if (SUCCEEDED (hr) && LPUNKNOWNWB = = LPUNKNOWNDC)
- {
- //The document has finished loading.
- Strurl=m_web.get_locationurl ();
- if (Strurl.isempty ())
- {
- return;
- }
- Objdocument= (ihtmldocument2*) m_web.get_document ();
- Objdocument->get_all (&objallelement);
- if (strurl==_t ("http://www.baidu.com/"))
- {
- ccomptr<idispatch>pdisp;
- Objallelement->item (COleVariant (_t ("KW1")), COleVariant ((long) 0), &pdisp);
- Ccomqiptr<ihtmlelement, &IID_IHTMLElement>pElement;
- if (pdisp==null)
- {
- return;
- }
- Else
- {
- Pelement=pdisp;
- Pelement->put_innertext (_t ("test")); //Fill out form
- }
- VARIANT name;
- CComBSTR tag;
- long Index;
- Objallelement-> get_length (&index);
- NAME.VT=VT_I4;
- for (long i=0; I <index; i++)//Traverse all elements, get value by ID property
- {
- Name.lval = i;
- IDispatch * PDISPATCH=NULL;
- Objallelement-> item (Name,name,&pdispatch);
- ihtmlelement* spelement;
- Pdispatch-> QueryInterface (Iid_ihtmlelement, (void**) &spelement);
- BSTR tag;
- SPELEMENT->GET_ID (&tag);
- CString SS (TAG);
- if (ss = = "su1")
- Spelement->click ();
- Spelement->release ();
- }
- }
- }
- }
- if (LPUNKNOWNWB)
- Lpunknownwb->release ();
- if (LPUNKNOWNDC)
- Lpunknowndc->release ();
- }</span>
Run can see Baidu automatic search
Attached: VS2008 platform Source Download
Using WebBrowser control to implement Baidu automatic search