UIHtmlView.cpp
上传用户:yatsl7111
上传日期:2007-01-08
资源大小:1433k
文件大小:17k
源码类别:

图形图象

开发平台:

Visual C++

  1. //*******************************************************************************
  2. // COPYRIGHT NOTES
  3. // ---------------
  4. // You may use this source code, compile or redistribute it as part of your application 
  5. // for free. You cannot redistribute it as a part of a software development 
  6. // library without the agreement of the author. If the sources are 
  7. // distributed along with the application, you should leave the original 
  8. // copyright notes in the source code without any changes.
  9. // This code can be used WITHOUT ANY WARRANTIES at your own risk.
  10. // 
  11. // For the latest updates to this code, check this site:
  12. // http://www.masmex.com 
  13. // after Sept 2000
  14. // 
  15. // Copyright(C) 2000 Philip Oldaker <email: philip@masmex.com>
  16. //*******************************************************************************
  17. // HtmlMsgView.cpp : implementation file
  18. //
  19. #include "stdafx.h"
  20. #include "UIHtmlView.h"
  21. #include "UIMessages.h"
  22. #include <atlbase.h>
  23. #include <mshtml.h>
  24. #include "UIres.h"
  25. #ifdef _DEBUG
  26. #define new DEBUG_NEW
  27. #undef THIS_FILE
  28. static char THIS_FILE[] = __FILE__;
  29. #endif
  30. /////////////////////////////////////////////////////////////////////////////
  31. // CUIHtmlView
  32. IMPLEMENT_DYNAMIC(CUIHtmlView, CHtmlView)
  33. CUIHtmlView::CUIHtmlView()
  34. {
  35. //{{AFX_DATA_INIT(CUIHtmlView)
  36. // NOTE: the ClassWizard will add member initialization here
  37. //}}AFX_DATA_INIT
  38. m_pHTMLDocument2 = NULL;
  39. m_hNotifyWnd = NULL;
  40. m_bSetCursor = false;
  41. }
  42. CUIHtmlView::~CUIHtmlView()
  43. {
  44. ReleaseDocument();
  45. }
  46. BOOL CUIHtmlView::PreCreateWindow(CREATESTRUCT& cs) 
  47. {
  48. // TODO: Add your specialized code here and/or call the base class
  49. cs.lpszClass = AfxRegisterWndClass(
  50.   CS_DBLCLKS,                       
  51.   NULL,                             
  52.   NULL,                             
  53.   NULL); 
  54. ASSERT(cs.lpszClass);
  55. BOOL bRet = CHtmlView::PreCreateWindow(cs);
  56. cs.dwExStyle |= WS_EX_CLIENTEDGE;
  57. // cs.style |= WS_BORDER;
  58. return bRet;
  59. }
  60. void CUIHtmlView::ReleaseDocument()
  61. {
  62. if (m_pHTMLDocument2)
  63. {
  64. m_pHTMLDocument2->Release();
  65. m_pHTMLDocument2 = NULL;
  66. }
  67. }
  68. void CUIHtmlView::DocumentReady()
  69. {
  70. m_bSetCursor = false;
  71. }
  72. bool CUIHtmlView::ExecScript(LPCTSTR pszScript,LPCTSTR pszLang,_variant_t *pvt)
  73. {
  74. bool bRet = false;
  75. CWaitCursor w;
  76. IHTMLWindow2 *pW2=NULL;
  77. IHTMLDocument2 *pDoc = GetHTMLDocument();
  78. if (pDoc == NULL)
  79. return bRet;
  80. HRESULT hr = pDoc->get_parentWindow(&pW2);
  81. if (SUCCEEDED(hr))
  82. {
  83. if (pszLang == NULL)
  84. pszLang = _T("JScript");
  85. _variant_t v;
  86. hr = pW2->execScript(_bstr_t(pszScript),_bstr_t(pszLang),&v);
  87. if (pvt)
  88. *pvt = v;
  89. pW2->Release();
  90. bRet= true;
  91. }
  92. return bRet;
  93. }
  94. CString CUIHtmlView::GetBodyText()
  95. {
  96. IHTMLElement *pElem=NULL;
  97. GetHTMLDocument()->get_body(&pElem);
  98. _bstr_t bstText;
  99. BSTR bsText;
  100. pElem->get_innerText(&bsText);
  101. pElem->Release();
  102. bstText = bsText;
  103. return (LPCTSTR)bstText;
  104. }
  105. CString CUIHtmlView::GetElementValue(LPCTSTR pszElemID)
  106. {
  107. IHTMLElement *pElem=NULL;
  108. GetElement(pszElemID,&pElem);
  109. BSTR bsText;
  110. _bstr_t bstText;
  111. if (pElem)
  112. {
  113. IHTMLInputTextElement *pInputElem=NULL;
  114. HRESULT hr = pElem->QueryInterface(IID_IHTMLInputTextElement,(LPVOID*)&pInputElem);
  115. if (SUCCEEDED(hr))
  116. {
  117. pInputElem->get_value(&bsText);
  118. bstText= bsText;
  119. pInputElem->Release();
  120. pInputElem = NULL;
  121. }
  122. pElem->Release();
  123. }
  124. return (LPCTSTR)bstText;
  125. }
  126. CString CUIHtmlView::GetElementText(LPCTSTR pszElemID)
  127. {
  128. IHTMLElement *pElem=NULL;
  129. GetElement(pszElemID,&pElem);
  130. if (pElem == NULL)
  131. return _T("");
  132. BSTR bsText;
  133. _bstr_t bstText;
  134. pElem->get_innerText(&bsText);
  135. bstText = bsText;
  136. pElem->Release();
  137. pElem = NULL;
  138. return (LPCTSTR)bstText;
  139. }
  140. CString CUIHtmlView::GetElementHTML(LPCTSTR pszElemID)
  141. {
  142. IHTMLElement *pElem=NULL;
  143. GetElement(pszElemID,&pElem);
  144. BSTR bsText;
  145. _bstr_t bstText;
  146. if (pElem)
  147. {
  148. pElem->get_innerHTML(&bsText);
  149. bstText = bsText;
  150. pElem->Release();
  151. pElem = NULL;
  152. }
  153. return (LPCTSTR)bstText;
  154. }
  155. bool CUIHtmlView::SetElementValue(LPCTSTR pszElemID,LPCTSTR pszText)
  156. {
  157. bool bRet=false;
  158. IHTMLElement *pElem=NULL;
  159. GetElement(pszElemID,&pElem);
  160. if (pElem)
  161. {
  162. IHTMLInputTextElement *pInputElem=NULL;
  163. HRESULT hr = pElem->QueryInterface(IID_IHTMLInputTextElement,(LPVOID*)&pInputElem);
  164. if (SUCCEEDED(hr))
  165. {
  166. pInputElem->put_value(_bstr_t(pszText));
  167. pInputElem->Release();
  168. pInputElem = NULL;
  169. bRet = true;
  170. }
  171. pElem->Release();
  172. pElem = NULL;
  173. }
  174. return bRet;
  175. }
  176. bool CUIHtmlView::SetElementText(LPCTSTR pszElemID,LPCTSTR pszText)
  177. {
  178. bool bRet=false;
  179. IHTMLElement *pElem=NULL;
  180. GetElement(pszElemID,&pElem);
  181. if (pElem == NULL)
  182. return bRet;
  183. pElem->put_innerText(_bstr_t(pszText));
  184. pElem->Release();
  185. pElem = NULL;
  186. bRet= true;
  187. return bRet;
  188. }
  189. bool CUIHtmlView::SetElementHTML(LPCTSTR pszElemID,LPCTSTR pszText)
  190. {
  191. bool bRet=false;
  192. IHTMLElement *pElem=NULL;
  193. GetElement(pszElemID,&pElem);
  194. if (pElem == NULL)
  195. return bRet;
  196. pElem->put_innerHTML(_bstr_t(pszText));
  197. pElem->Release();
  198. pElem = NULL;
  199. bRet= true;
  200. return bRet;
  201. }
  202. bool CUIHtmlView::SetImageSource(LPCTSTR pszElemID,LPCTSTR pszText)
  203. {
  204. bool bRet=false;
  205. IHTMLElement *pElem=NULL;
  206. GetElement(pszElemID,&pElem);
  207. if (pElem == NULL)
  208. return bRet;
  209. IHTMLImgElement *pImgElem=NULL;
  210. HRESULT hr = pElem->QueryInterface(IID_IHTMLImgElement,(LPVOID*)&pImgElem);
  211. pElem->Release();
  212. if (SUCCEEDED(hr))
  213. {
  214. pImgElem->put_src(_bstr_t(pszText));
  215. pImgElem->Release();
  216. bRet = true;
  217. }
  218. return bRet;
  219. }
  220. bool CUIHtmlView::GetOptionString(LPCTSTR pszElemID,CString &sText,CString &sValue)
  221. {
  222. IHTMLElement *pElement = NULL;
  223. GetElement(pszElemID,&pElement);
  224. bool bRet=false;
  225. if (pElement == NULL)
  226. return bRet;
  227. IHTMLSelectElement *pSelElem=NULL;
  228. HRESULT hr = pElement->QueryInterface(IID_IHTMLSelectElement,(LPVOID*)&pSelElem);
  229. pElement->Release();
  230. pElement = NULL;
  231. if (FAILED(hr))
  232. return bRet;
  233. long nSelIndex=-1;
  234. pSelElem->get_selectedIndex(&nSelIndex);
  235. if (nSelIndex == -1)
  236. {
  237. pSelElem->Release();
  238. return bRet;
  239. }
  240. IDispatch *pDisp=NULL;
  241. _variant_t vtName(nSelIndex);
  242. _variant_t vtIndex;
  243. pSelElem->item(vtName,vtIndex,&pDisp);
  244. IHTMLOptionElement *pOptElem=NULL;
  245. hr = pDisp->QueryInterface(IID_IHTMLOptionElement,(LPVOID*)&pOptElem);
  246. if (SUCCEEDED(hr))
  247. {
  248. _bstr_t bstValue;
  249. BSTR bsValue;
  250. pOptElem->get_value(&bsValue);
  251. bstValue = bsValue;
  252. sValue = (LPCTSTR)bstValue;
  253. BSTR bsText;
  254. _bstr_t bstText;
  255. pOptElem->get_text(&bsText);
  256. bstText = bsText;
  257. sText = (LPCTSTR)bstText;
  258. pOptElem->Release();
  259. bRet=true;
  260. }
  261. if (pSelElem)
  262. pSelElem->Release();
  263. return bRet;
  264. }
  265. bool CUIHtmlView::SetOptionString(LPCTSTR pszElemID,LPCTSTR pszText)
  266. {
  267. IHTMLElement *pElement = NULL;
  268. GetElement(pszElemID,&pElement);
  269. bool bRet=false;
  270. if (pElement == NULL)
  271. return bRet;
  272. IHTMLSelectElement *pSelElem=NULL;
  273. IDispatch *pDisp=NULL;
  274. HRESULT hr = pElement->QueryInterface(IID_IHTMLSelectElement,(LPVOID*)&pSelElem);
  275. if (FAILED(hr))
  276. goto SOS_CleanUp;
  277. {
  278. long nLength=0;
  279. pSelElem->get_length(&nLength);
  280. for(long i=0;i < nLength;i++)
  281. {
  282. _variant_t vtName(i);
  283. _variant_t vtIndex;
  284. pSelElem->item(vtName,vtIndex,&pDisp);
  285. if (pDisp == NULL)
  286. continue;
  287. IHTMLOptionElement *pOptElem=NULL;
  288. hr = pDisp->QueryInterface(IID_IHTMLOptionElement,(LPVOID*)&pOptElem);
  289. pDisp->Release();
  290. pDisp = NULL;
  291. if (SUCCEEDED(hr))
  292. {
  293. _bstr_t bstValue;
  294. _bstr_t bstText;
  295. BSTR bsValue;
  296. BSTR bsText;
  297. pOptElem->get_value(&bsValue);
  298. pOptElem->get_text(&bsText);
  299. bstValue = bsValue;
  300. bstText = bsText;
  301. pOptElem->Release();
  302. if (_tcsicmp((LPCTSTR)bstText,pszText) == 0)
  303. {
  304. pSelElem->put_selectedIndex(i);
  305. bRet=true;
  306. break;
  307. }
  308. }
  309. }
  310. }
  311. SOS_CleanUp:
  312. if (pElement)
  313. pElement->Release();
  314. if (pSelElem)
  315. pSelElem->Release();
  316. return bRet;
  317. }
  318. bool CUIHtmlView::AddOptionString(LPCTSTR pszElemID,LPCTSTR pszText,LPCTSTR pszValue,bool bSelect)
  319. {
  320. IHTMLElement *pElement = NULL;
  321. GetElement(pszElemID,&pElement);
  322. bool bRet=false;
  323. if (pElement == NULL)
  324. return bRet;
  325. IHTMLSelectElement *pSelElem=NULL;
  326. HRESULT hr = pElement->QueryInterface(IID_IHTMLSelectElement,(LPVOID*)&pSelElem);
  327. pElement->Release();
  328. if (FAILED(hr))
  329. return bRet;
  330. IHTMLElement *pNewElem=NULL;
  331. GetHTMLDocument()->createElement(_bstr_t(_T("OPTION")),&pNewElem);
  332. IHTMLOptionElement *pNewOptElem=NULL;
  333. hr = E_FAIL;
  334. if (pNewElem)
  335. hr = pNewElem->QueryInterface(IID_IHTMLOptionElement,(LPVOID*)&pNewOptElem);
  336. if (SUCCEEDED(hr))
  337. {
  338. if (pszValue)
  339. {
  340. _bstr_t bsValue(pszValue);
  341. pNewOptElem->put_value(bsValue);
  342. }
  343. _bstr_t bsText(pszText);
  344. pNewOptElem->put_text(bsText);
  345. pSelElem->add(pNewElem,_variant_t(vtMissing));
  346. pNewOptElem->Release();
  347. if (bSelect)
  348. {
  349. long nLength=0;
  350. pSelElem->get_length(&nLength);
  351. if (nLength > 0)
  352. pSelElem->put_selectedIndex(nLength-1);
  353. }
  354. bRet=true;
  355. }
  356. if (pSelElem)
  357. pSelElem->Release();
  358. return bRet;
  359. }
  360. void CUIHtmlView::GetElement(LPCTSTR pszID,IHTMLElement **pElement)
  361. {
  362. *pElement=NULL;
  363. if (m_pHTMLDocument2 == NULL)
  364. return;
  365. CComQIPtr<IHTMLElementCollection> spAllElements;
  366. m_pHTMLDocument2->get_all(&spAllElements);
  367. if (spAllElements)
  368. {
  369. IDispatch *pDisp=NULL;
  370. HRESULT hr = spAllElements->item(CComVariant(pszID),CComVariant(0),&pDisp);
  371. if (SUCCEEDED(hr))
  372. {
  373. hr = pDisp->QueryInterface(IID_IHTMLElement,(LPVOID*)pElement);
  374. }
  375. pDisp->Release();
  376. }
  377. }
  378. void CUIHtmlView::ParseDocument()  
  379. {
  380. if(m_pHTMLDocument2 == NULL)
  381. return;
  382. try
  383. {
  384. CComQIPtr<IHTMLDocument2> spDocument(m_pHTMLDocument2);
  385. CComQIPtr<IHTMLElementCollection> spAllElements;
  386. spDocument->get_all(&spAllElements);
  387.   CComBSTR bsIsControl(_T("OBJECT"));
  388. CComBSTR bsIsImage(_T("IMG"));
  389. long nElems;
  390. spAllElements->get_length(&nElems);
  391. for(long i = 0; i < nElems; i++)
  392. {
  393. CComVariant vIndex(i, VT_I4);
  394. LPDISPATCH pDisp=NULL;
  395. spAllElements->item(vIndex,vIndex,&pDisp);
  396. CComQIPtr<IHTMLElement> spAnElement(pDisp);
  397. pDisp->Release();
  398. CComBSTR bsTagName;
  399. spAnElement->get_tagName(&bsTagName);
  400. if(bsTagName == bsIsControl)
  401. {
  402. // This will get you any ActiveX controls in a page.  It is possible 
  403. // to call methods and properties of the  control off the IHTMLElementPtr.
  404. CComQIPtr<IHTMLObjectElement> spObj(spAnElement);
  405. ActiveXControl(spObj);
  406. }
  407. else if(bsTagName == bsIsImage)
  408. {
  409. CComQIPtr<IHTMLImgElement> spImg(spAnElement);
  410. ImageElement(spImg);
  411. }
  412. else
  413. Element(spAnElement);
  414. }
  415. }
  416. catch(...)
  417. {
  418. #ifdef _DEBUG
  419. AfxMessageBox(_T("Unspecified exception thrown in UIHtmlView"),MB_ICONSTOP);
  420. #endif 
  421. throw;
  422. }
  423. }
  424. void CUIHtmlView::ActiveXControl(IHTMLObjectElement *pObj)
  425. {
  426. }
  427. void CUIHtmlView::ImageElement(IHTMLImgElement *pImg)
  428. {
  429. }
  430. void CUIHtmlView::Element(IHTMLElement *pElement)
  431. {
  432. }
  433. void CUIHtmlView::DoDataExchange(CDataExchange* pDX)
  434. {
  435. CHtmlView::DoDataExchange(pDX);
  436. //{{AFX_DATA_MAP(CUIHtmlView)
  437. // NOTE: the ClassWizard will add DDX and DDV calls here
  438. //}}AFX_DATA_MAP
  439. }
  440. BEGIN_MESSAGE_MAP(CUIHtmlView, CHtmlView)
  441. //{{AFX_MSG_MAP(CUIHtmlView)
  442. ON_WM_SETCURSOR()
  443. ON_COMMAND(ID_BROWSER_GO_BACK, OnBrowserGoBack)
  444. ON_COMMAND(ID_BROWSER_GO_FORWARD, OnBrowserGoForward)
  445. ON_COMMAND(ID_BROWSER_GO_BACK, OnBrowserGoBack)
  446. ON_UPDATE_COMMAND_UI(ID_BROWSER_GO_FORWARD, OnUpdateBrowserGoForward)
  447. ON_UPDATE_COMMAND_UI(ID_BROWSER_GO_BACK, OnUpdateBrowserGoBack)
  448. ON_COMMAND(ID_BROWSER_GO_HOME, OnBrowserGoHome)
  449. ON_COMMAND(ID_BROWSER_REFRESH, OnBrowserRefresh)
  450. ON_COMMAND(ID_BROWSER_STOP, OnBrowserStop)
  451. //}}AFX_MSG_MAP
  452. END_MESSAGE_MAP()
  453. /////////////////////////////////////////////////////////////////////////////
  454. // CUIHtmlView diagnostics
  455. #ifdef _DEBUG
  456. void CUIHtmlView::AssertValid() const
  457. {
  458. CHtmlView::AssertValid();
  459. }
  460. void CUIHtmlView::Dump(CDumpContext& dc) const
  461. {
  462. CHtmlView::Dump(dc);
  463. }
  464. #endif //_DEBUG
  465. /////////////////////////////////////////////////////////////////////////////
  466. // CUIHtmlView message handlers
  467. void CUIHtmlView::DocumentComplete(LPDISPATCH pDisp, VARIANT* URL)
  468. {
  469. // TODO: Add your specialized code here and/or call the base class
  470.    HRESULT   hr;
  471.    LPUNKNOWN lpUnknown;
  472.    LPUNKNOWN lpUnknownWB = NULL;
  473.    LPUNKNOWN lpUnknownDC = NULL;
  474.    lpUnknown = m_wndBrowser.GetControlUnknown();
  475.    ASSERT(lpUnknown);
  476.    if (lpUnknown)
  477.    {
  478.       // Get the IUnknown of the WebBrowser control being hosted.
  479.       // The IUnknown returned from GetControlUnknown is not the 
  480.       // IUnknown of the WebBrowser control.  It's actually a
  481.       // IOleObject pointer.
  482.       // 
  483.       hr = lpUnknown->QueryInterface(IID_IUnknown, 
  484.                              (LPVOID*)&lpUnknownWB);
  485.       ASSERT(SUCCEEDED(hr));
  486.       if (FAILED(hr))
  487.          return;
  488.       // Get the IUnknown of the object that fired this event.
  489.       //
  490.       hr = pDisp->QueryInterface(IID_IUnknown, (LPVOID*)&lpUnknownDC);
  491.       ASSERT(SUCCEEDED(hr));
  492.       if (SUCCEEDED(hr) && lpUnknownWB == lpUnknownDC)
  493.       {
  494.          // The document has finished loading.
  495.          //
  496.   LPDISPATCH pDispatch = GetHtmlDocument();
  497.   if (pDispatch)
  498.   {
  499. hr = pDispatch->QueryInterface(IID_IHTMLDocument2,(LPVOID*)&m_pHTMLDocument2);
  500. DocumentReady();
  501. pDispatch->Release();
  502.   }
  503.       }
  504.       if (lpUnknownWB)
  505.          lpUnknownWB->Release();
  506.       if (lpUnknownDC)
  507.          lpUnknownDC->Release();
  508.    }
  509. }
  510. void CUIHtmlView::OnBeforeNavigate2(LPCTSTR lpszURL, DWORD nFlags, LPCTSTR lpszTargetFrameName, CByteArray& baPostedData, LPCTSTR lpszHeaders, BOOL* pbCancel) 
  511. {
  512. // TODO: Add your specialized code here and/or call the base class ReleaseDocument();
  513. m_bSetCursor = true;
  514. #ifdef _DEBUG
  515. if (GetKeyState(VK_LCONTROL) < 0)
  516. {
  517. if (baPostedData.GetSize() > 0)
  518. {
  519. LPTSTR pszData = new TCHAR[baPostedData.GetSize()+1];
  520. LPTSTR pszPosted = pszData;
  521. for(int i=0;i < baPostedData.GetSize();i++)
  522. {
  523. *pszPosted = baPostedData[i];
  524. pszPosted =_tcsinc(pszPosted);
  525. }
  526. *pszPosted = '';
  527. CString sMess;
  528. sMess = _T("Posted Data: ");
  529. sMess += pszData;
  530. sMess += _T("n");
  531. sMess += _T("URL: ");
  532. sMess += lpszURL;
  533. AfxMessageBox(sMess);
  534. delete pszData;
  535. }
  536. }
  537. #endif
  538. ReleaseDocument();
  539. if (m_hNotifyWnd)
  540. {
  541. ::SendMessage(m_hNotifyWnd,WM_APP_CB_IE_SET_EDIT_TEXT,(WPARAM)lpszURL,0);
  542. }
  543. CHtmlView::OnBeforeNavigate2(lpszURL, nFlags, lpszTargetFrameName, baPostedData, lpszHeaders, pbCancel);
  544. }
  545. BOOL CUIHtmlView::OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message) 
  546. {
  547. // TODO: Add your message handler code here and/or call default
  548. if (m_bSetCursor)
  549. {
  550. SetCursor(::LoadCursor(NULL,IDC_APPSTARTING));
  551. return TRUE;
  552. }
  553. return CHtmlView::OnSetCursor(pWnd, nHitTest, message);
  554. }
  555. void CUIHtmlView::OnUpdate(CView* pSender, LPARAM lHint, CObject* pHint) 
  556. {
  557. // TODO: Add your specialized code here and/or call the base class
  558. }
  559. void CUIHtmlView::OnActivateView(BOOL bActivate, CView* pActivateView, CView* pDeactiveView) 
  560. {
  561. // TODO: Add your specialized code here and/or call the base class
  562. CHtmlView::OnActivateView(bActivate, pActivateView, pDeactiveView);
  563. if (bActivate && pDeactiveView != NULL) 
  564. {
  565. OnTitleChange(GetLocationURL());
  566. SetActiveWindow();
  567. }
  568. }
  569. void CUIHtmlView::OnCommandStateChange(long nCommand, BOOL bEnable) 
  570. {
  571. // TODO: Add your specialized code here and/or call the base class
  572. switch(nCommand) 
  573. {
  574.        case CSC_NAVIGATEFORWARD: 
  575.    m_bGoForward = bEnable;
  576.            break;
  577.        case CSC_NAVIGATEBACK:
  578.            m_bGoBack = bEnable;
  579.            break;       
  580.    default:
  581.            break;
  582. }  
  583. CHtmlView::OnCommandStateChange(nCommand, bEnable);
  584. }
  585. void CUIHtmlView::OnUpdateBrowserGoBack(CCmdUI *pUI)
  586. {
  587. pUI->Enable(m_bGoBack);
  588. }
  589. void CUIHtmlView::OnUpdateBrowserGoForward(CCmdUI *pUI)
  590. {
  591. pUI->Enable(m_bGoForward);
  592. }
  593. void CUIHtmlView::OnBrowserGoBack() 
  594. {
  595. // TODO: Add your command handler code here
  596. GoBack();
  597. }
  598. void CUIHtmlView::OnBrowserGoForward() 
  599. {
  600. // TODO: Add your command handler code here
  601. GoForward();
  602. }
  603. void CUIHtmlView::OnBrowserGoHome() 
  604. {
  605. // TODO: Add your command handler code here
  606. GoHome();
  607. }
  608. void CUIHtmlView::OnBrowserRefresh() 
  609. {
  610. // TODO: Add your command handler code here
  611. Refresh();
  612. }
  613. void CUIHtmlView::OnBrowserStop() 
  614. {
  615. // TODO: Add your command handler code here
  616. Stop();
  617. }
  618. void CUIHtmlView::OnDocumentComplete(LPCTSTR lpszUrl)
  619. {
  620. // make sure the main frame has the new URL.  This call also stops the animation
  621. if (m_hNotifyWnd)
  622. {
  623. ::SendMessage(m_hNotifyWnd,WM_APP_CB_IE_SET_EDIT_TEXT,(WPARAM)lpszUrl,0);
  624. }
  625. CHtmlView::OnDocumentComplete(lpszUrl);
  626. }
  627. void CUIHtmlView::OnTitleChange(LPCTSTR lpszText)
  628. {
  629. // this will change the main frame's title bar
  630. if (m_pDocument != NULL)
  631. m_pDocument->SetTitle(lpszText);
  632. }