ExplorerBar.cpp
上传用户:szled88
上传日期:2015-04-09
资源大小:43957k
文件大小:8k
源码类别:

对话框与窗口

开发平台:

Visual C++

  1. #include "StdAfx.h"
  2. #include "styler.h"
  3. #include "explorerbar.h"
  4.  
  5. #include "StylerDoc.h"
  6. #include "StylerView.h"
  7. CExplorerBar::CExplorerBar(void)
  8. {
  9. m_pSearch = 0;
  10. }
  11. CExplorerBar::~CExplorerBar(void)
  12. {
  13. delete m_pSearch;
  14. }
  15. int CExplorerBar::OnViewSearch()
  16. {
  17. if (!m_pSearch)
  18. {
  19. try
  20. {
  21. m_pSearch = new CWebBrowserCtrl;
  22. if (!m_pSearch->Create(NULL, WS_CLIPSIBLINGS|WS_CLIPCHILDREN|WS_CHILD|WS_VISIBLE, CRect(0,0,0,0), this, AFX_IDW_PANE_FIRST))
  23. return -1;
  24. AfxEnableControlContainer();
  25. m_pSearch->ModifyStyle(0, WS_BORDER);
  26. LPDISPATCH lpDisp = m_pSearch->get_Application();
  27. if (lpDisp)
  28. {
  29. CComPtr<IOleObject> spOleObj;
  30. lpDisp->QueryInterface(IID_IOleObject, (void**)&spOleObj);
  31. if (spOleObj)
  32. spOleObj->SetClientSite(&m_xOleClientSite );
  33. lpDisp->Release();
  34. }
  35. CString strPath = GetModuleDir() + _T("search.htm");
  36. m_pSearch->Navigate2(strPath);
  37. }
  38. catch (...) 
  39. {
  40. }
  41. }
  42. return 0;
  43. }
  44. BEGIN_EVENTSINK_MAP(CExplorerBar, CWnd)
  45. ON_EVENT(CExplorerBar, AFX_IDW_PANE_FIRST, 251 /* NewWindow2 */, OnNewWindow2, VTS_PDISPATCH VTS_PBOOL)
  46. END_EVENTSINK_MAP()
  47. void CExplorerBar::OnNewWindow2(LPDISPATCH* ppDisp, BOOL* /*bCancel*/)
  48. {
  49.    CWinApp* pApp = AfxGetApp();
  50.    // Get the correct document template.
  51.    POSITION pos = pApp->GetFirstDocTemplatePosition();
  52.    CDocTemplate* pDocTemplate = pApp->GetNextDocTemplate( pos );
  53.    
  54.    CStylerDoc* pDoc = (CStylerDoc*)pDocTemplate->CreateNewDocument();
  55.    pDoc->SetUrl(_T("Search Result"));
  56.    // Create a new frame.
  57.    CFrameWnd* pFrame = pDocTemplate->CreateNewFrame(pDoc, (CFrameWnd*)AfxGetMainWnd() );
  58.    // Activate the frame.
  59.    pDocTemplate->InitialUpdateFrame( pFrame, NULL );
  60.    CStylerView* pView = (CStylerView*)pFrame->GetActiveView();
  61.    // Pass pointer of WebBrowser object.
  62.    pView->SetRegisterAsBrowser( TRUE );
  63.    *ppDisp = pView->GetApplication();   
  64. }
  65. BEGIN_INTERFACE_MAP(CExplorerBar, CCmdTarget)
  66. INTERFACE_PART(CExplorerBar, IID_IDocHostUIHandler, DocHostUIHandler)
  67. INTERFACE_PART(CExplorerBar, IID_IOleClientSite, OleClientSite)
  68. END_INTERFACE_MAP()
  69. // **************************************************************************
  70. // * IDocHostUIHandler methods
  71. // **************************************************************************
  72. ULONG FAR EXPORT  CExplorerBar::XDocHostUIHandler::AddRef()
  73. {
  74. METHOD_PROLOGUE(CExplorerBar, DocHostUIHandler)
  75. return pThis->ExternalAddRef();
  76. }ULONG FAR EXPORT  CExplorerBar::XDocHostUIHandler::Release()
  77. {                            
  78.         METHOD_PROLOGUE(CExplorerBar, DocHostUIHandler)
  79.         return pThis->ExternalRelease();
  80. }
  81. HRESULT FAR EXPORT  CExplorerBar::XDocHostUIHandler::QueryInterface
  82. (REFIID riid, void **ppvObj)
  83. {
  84.         METHOD_PROLOGUE(CExplorerBar, DocHostUIHandler)
  85.         HRESULT hr = (HRESULT)pThis->ExternalQueryInterface(&riid, ppvObj);
  86.         return hr;
  87. }// CImpIDocHostUIHandler::GetHostInfo
  88. HRESULT FAR EXPORT  CExplorerBar::XDocHostUIHandler::GetHostInfo
  89. ( DOCHOSTUIINFO* pInfo )
  90. {
  91.         METHOD_PROLOGUE(CExplorerBar, DocHostUIHandler)
  92.         pInfo->dwFlags = DOCHOSTUIFLAG_NO3DBORDER | DOCHOSTUIFLAG_SCROLL_NO ;
  93.         pInfo->dwDoubleClick = DOCHOSTUIDBLCLK_DEFAULT;
  94.         return S_OK;
  95. }// CImpIDocHostUIHandler::ShowUI
  96. HRESULT FAR EXPORT  CExplorerBar::XDocHostUIHandler::ShowUI(
  97. DWORD /*dwID*/, 
  98. IOleInPlaceActiveObject * /*pActiveObject*/,
  99. IOleCommandTarget * /*pCommandTarget*/,
  100. IOleInPlaceFrame * /*pFrame*/,
  101. IOleInPlaceUIWindow * /*pDoc*/)
  102. {
  103.         METHOD_PROLOGUE(CExplorerBar, DocHostUIHandler)
  104.         return S_OK;
  105. }// CImpIDocHostUIHandler::HideUI
  106. HRESULT FAR EXPORT  CExplorerBar::XDocHostUIHandler::HideUI(void)
  107. {
  108.         METHOD_PROLOGUE(CExplorerBar, DocHostUIHandler)
  109.         return S_OK;
  110. }// CImpIDocHostUIHandler::UpdateUI
  111. HRESULT FAR EXPORT  CExplorerBar::XDocHostUIHandler::UpdateUI(void)
  112. {
  113.         METHOD_PROLOGUE(CExplorerBar, DocHostUIHandler)
  114.         return S_OK;
  115. }// CImpIDocHostUIHandler::EnableModeless
  116. HRESULT FAR EXPORT  CExplorerBar::XDocHostUIHandler::EnableModeless
  117. (BOOL /*fEnable*/)
  118. {
  119.         METHOD_PROLOGUE(CExplorerBar, DocHostUIHandler)
  120.         return E_NOTIMPL;
  121. }// CImpIDocHostUIHandler::OnDocWindowActivate
  122. HRESULT FAR EXPORT  CExplorerBar::XDocHostUIHandler::OnDocWindowActivate
  123. (BOOL /*fActivate*/)
  124. {
  125.         METHOD_PROLOGUE(CExplorerBar, DocHostUIHandler)
  126.         return E_NOTIMPL;
  127. }// CImpIDocHostUIHandler::OnFrameWindowActivate
  128. HRESULT FAR EXPORT  CExplorerBar::XDocHostUIHandler::OnFrameWindowActivate
  129. (BOOL /*fActivate*/)
  130. {
  131.         METHOD_PROLOGUE(CExplorerBar, DocHostUIHandler)
  132.         return E_NOTIMPL;
  133. }// CImpIDocHostUIHandler::ResizeBorder
  134. HRESULT FAR EXPORT  CExplorerBar::XDocHostUIHandler::ResizeBorder(
  135. LPCRECT /*prcBorder*/, 
  136. IOleInPlaceUIWindow* /*pUIWindow*/,
  137. BOOL /*fRameWindow*/)
  138. {
  139.         METHOD_PROLOGUE(CExplorerBar, DocHostUIHandler)
  140.         return E_NOTIMPL;
  141. }
  142. // CImpIDocHostUIHandler::ShowContextMenu
  143. HRESULT FAR EXPORT  CExplorerBar::XDocHostUIHandler::ShowContextMenu(
  144. DWORD /*dwID*/, 
  145. POINT* /*pptPosition*/,
  146. IUnknown* /*pCommandTarget*/,
  147. IDispatch* /*pDispatchObjectHit*/)
  148. {
  149.         METHOD_PROLOGUE(CExplorerBar, DocHostUIHandler)
  150.         return S_FALSE;
  151. }
  152. // CImpIDocHostUIHandler::TranslateAccelerator
  153. HRESULT FAR EXPORT  CExplorerBar::XDocHostUIHandler::TranslateAccelerator(LPMSG /*lpMsg*/,
  154.             /* [in] */ const GUID __RPC_FAR* /*pguidCmdGroup*/,
  155.             /* [in] */ DWORD /*nCmdID*/)
  156. {
  157.         METHOD_PROLOGUE(CExplorerBar, DocHostUIHandler)
  158.         return S_FALSE;
  159. }
  160. // CImpIDocHostUIHandler::GetOptionKeyPath
  161. HRESULT FAR EXPORT  CExplorerBar::XDocHostUIHandler::GetOptionKeyPath
  162. (BSTR* /*pbstrKey*/, DWORD)
  163. {
  164. METHOD_PROLOGUE(CExplorerBar, DocHostUIHandler)
  165. return E_NOTIMPL;
  166. }
  167. STDMETHODIMP CExplorerBar::XDocHostUIHandler::GetDropTarget( 
  168.             /* [in] */ IDropTarget __RPC_FAR* /*pDropTarget*/,
  169.             /* [out] */ IDropTarget __RPC_FAR *__RPC_FAR* /*ppDropTarget*/)
  170. {
  171. METHOD_PROLOGUE(CExplorerBar, DocHostUIHandler)
  172. return E_NOTIMPL;
  173. }
  174. STDMETHODIMP CExplorerBar::XDocHostUIHandler::GetExternal( 
  175.             /* [out] */ IDispatch __RPC_FAR *__RPC_FAR* /*ppDispatch*/)
  176. {
  177. return E_NOTIMPL;
  178. }
  179.         
  180. STDMETHODIMP CExplorerBar::XDocHostUIHandler::TranslateUrl( 
  181.             /* [in] */ DWORD /*dwTranslate*/,
  182.             /* [in] */ OLECHAR __RPC_FAR* /*pchURLIn*/,
  183.             /* [out] */ OLECHAR __RPC_FAR *__RPC_FAR* /*ppchURLOut*/)
  184. {
  185. METHOD_PROLOGUE(CExplorerBar, DocHostUIHandler)
  186. return E_NOTIMPL;
  187. }
  188.         
  189. STDMETHODIMP CExplorerBar::XDocHostUIHandler::FilterDataObject( 
  190.             /* [in] */ IDataObject __RPC_FAR* /*pDO*/,
  191.             /* [out] */ IDataObject __RPC_FAR *__RPC_FAR* /*ppDORet*/)
  192. {
  193. METHOD_PROLOGUE(CExplorerBar, DocHostUIHandler)
  194. return E_NOTIMPL;
  195. }
  196. STDMETHODIMP CExplorerBar::XDocHostUIHandler::GetOverrideKeyPath(
  197.     LPOLESTR* /*pchKey*/, DWORD /*dw*/)
  198. {
  199. /*
  200.  * This is not called due to the bug.
  201.  */
  202. METHOD_PROLOGUE(CExplorerBar, DocHostUIHandler)
  203. return E_NOTIMPL;
  204. ULONG FAR EXPORT  CExplorerBar::XOleClientSite::AddRef()
  205. {
  206. METHOD_PROLOGUE(CExplorerBar, OleClientSite)
  207. return pThis->ExternalAddRef();
  208. }ULONG FAR EXPORT  CExplorerBar::XOleClientSite::Release()
  209. {                            
  210.         METHOD_PROLOGUE(CExplorerBar, OleClientSite)
  211.         return pThis->ExternalRelease();
  212. }
  213. HRESULT FAR EXPORT  CExplorerBar::XOleClientSite::QueryInterface
  214. (REFIID riid, void **ppvObj)
  215. {
  216.         METHOD_PROLOGUE(CExplorerBar, OleClientSite)
  217.         HRESULT hr = (HRESULT)pThis->ExternalQueryInterface(&riid, ppvObj);
  218.         return hr;
  219. }// CImpIDocHostUIHandler::GetHostInfo
  220. BEGIN_MESSAGE_MAP(CExplorerBar, CWnd)
  221. ON_WM_SIZE()
  222. END_MESSAGE_MAP()
  223. void CExplorerBar::OnSize(UINT nType, int cx, int cy)
  224. {
  225. CWnd::OnSize(nType, cx, cy);
  226. if (m_pSearch)
  227. {
  228. m_pSearch->MoveWindow(0, 0, cx, cy);
  229. }
  230. }