⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 chtm.h

📁 IE toolbar
💻 H
字号:
// CHTM.h : Declaration of the CCHTM

#ifndef __CHTM_H_
#define __CHTM_H_
#define MIN_SIZE_X 100
#define MIN_SIZE_Y 100

#include "resource.h"       // main symbols
#include <atlctl.h>
#include <shlguid.h>
#include <shlobj.h>
#include <comdef.h>
#include <comutil.h>




/////////////////////////////////////////////////////////////////////////////
// CCHTM
class ATL_NO_VTABLE CCHTM : 
	public CComObjectRootEx<CComSingleThreadModel>,
	public IDispatchImpl<ICHTM, &IID_ICHTM, &LIBID_BANDLib>,
	public IDispatchImpl<ICHTMUI, &IID_ICHTMUI, &LIBID_BANDLib>,
	public CWindowImpl<CCHTM>,
	public IPersistStreamInitImpl<CCHTM>,
	public IObjectWithSiteImpl<CCHTM>,
	public IDeskBand,
	public CComCoClass<CCHTM, &CLSID_CHTM>
{
public:
	CCHTM()
	{
	_hwndParent = NULL;
	m_dwBandID = NULL; 
	m_dwViewMode = NULL;
	m_bRequiresSave = FALSE;
	s_pFrameWB = NULL;
	_pSite = NULL;
	}

DECLARE_REGISTRY_RESOURCEID(IDR_CHTM)

DECLARE_PROTECT_FINAL_CONSTRUCT()

BEGIN_COM_MAP(CCHTM)
	COM_INTERFACE_ENTRY(ICHTM)
	COM_INTERFACE_ENTRY(ICHTMUI)
	COM_INTERFACE_ENTRY2(IDispatch, ICHTMUI)
	COM_INTERFACE_ENTRY(IObjectWithSite)
	COM_INTERFACE_ENTRY_IID(IID_IDeskBand,IDeskBand)
	COM_INTERFACE_ENTRY(IPersistStreamInit)
	COM_INTERFACE_ENTRY2(IPersist, IPersistStreamInit)
END_COM_MAP()

BEGIN_PROP_MAP(CCHTM)

END_PROP_MAP()

BEGIN_MSG_MAP(CCHTM)
	MESSAGE_HANDLER(WM_CREATE, OnCreate)

END_MSG_MAP()
// Handler prototypes:
//  LRESULT MessageHandler(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
//  LRESULT CommandHandler(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled);
//  LRESULT NotifyHandler(int idCtrl, LPNMHDR pnmh, BOOL& bHandled);



// IViewObjectEx


// ICHTM
public:

// ICHTMUI
public:
	STDMETHOD(OnNav)(IDispatch*  pDisp, VARIANT varLnk);
	// Example method called by the HTML to change the <BODY> background color
	STDMETHOD(OnClick)(IDispatch* pdispBody, VARIANT varColor)
	{
		CComQIPtr<IHTMLBodyElement> spBody(pdispBody);
		if (spBody != NULL)
			spBody->put_bgColor(varColor);
		return S_OK;
	}
	STDMETHOD(OnNag)(IDispatch* pdisp, BSTR varLnk)
	{

		

		CComVariant vtEmpty;
		HRESULT h = m_spBrowser->Navigate(varLnk,&vtEmpty,&vtEmpty,&vtEmpty,&vtEmpty);
	
	
		

	/*	This is the case when you want to display your contents inside main window.
	CComQIPtr<IHTMLAnchorElement> spBody(pdisp);
		
		if (spBody != NULL)
			{	
				s_pFrameWB->Navigate(varLnk,&vtEmpty,&vtEmpty,&vtEmpty,&vtEmpty);
			}
	*/
		

		return S_OK;
	}


	LRESULT OnCreate(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& /*bHandled*/)
	{
		CAxWindow wnd(m_hWnd);
		HRESULT hr = wnd.CreateControl(IDH_CHTM);

		if (SUCCEEDED(hr))
		{
			hr = wnd.SetExternalDispatch(static_cast<ICHTMUI*>(this));
			long dwStyle = wnd.GetWindowLong(GWL_STYLE);
			wnd.SetWindowLong(GWL_STYLE,dwStyle | WS_HSCROLL | WS_VSCROLL);
			

		}
		if (SUCCEEDED(hr))
			hr = wnd.QueryControl(IID_IWebBrowser2, (void**)&m_spBrowser);
		return SUCCEEDED(hr) ? 0 : -1;
	}

	

LRESULT OnHScroll(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
{
		// TODO : Add Code for message handler. Call DefWindowProc if necessary.
		int nInc;
		UINT nPos=HIWORD(wParam);

		nInc = ::GetScrollPos(m_hWnd, SB_HORZ) - 10 ;

		::ScrollWindow(m_hWnd,10, 0, NULL, NULL);
		::SetScrollPos(m_hWnd, SB_HORZ, nInc  , TRUE);
		::UpdateWindow(m_hWnd);

		::MessageBox(NULL,LPCTSTR("Scrollbar" ),"Title",MB_OK);


	/*	switch (LOWORD(wParam))
		{
		case SB_TOP: nInc = -m_nHscrollPos; break;
		case SB_BOTTOM: nInc = m_nHscrollMax-m_nHscrollPos; break;
		case SB_LINEUP: nInc = -1; break;
		case SB_LINEDOWN: nInc = 1; break;
		case SB_PAGEUP: nInc = -HORZ_PTS; break;
		case SB_PAGEDOWN: nInc = HORZ_PTS; break;
		case SB_THUMBTRACK: nInc = nPos - m_nHscrollPos; break;
		default: nInc = 0;

		}

		nInc = max(-m_nHscrollPos, min(nInc, m_nHscrollMax - m_nHscrollPos));

		if (nInc)
		{

		m_nHscrollPos += nInc;
		int iMove = -HORZ_PTS * nInc;
		::ScrollWindow(m_hWnd,iMove, 0, NULL, NULL);
		::SetScrollPos(m_hWnd,SB_HORZ, m_nHscrollPos, TRUE);
		::UpdateWindow(m_hWnd);
		}

		return 0;
		}
		LRESULT OnSize(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
		{
		if (!m_bInitialized)
		return -1;

		::ScrollWindow(m_hWnd,m_nHscrollPos*HORZ_PTS, 0, NULL, NULL);
		::ScrollWindow(m_hWnd,0, m_nVscrollPos*VERT_PTS, NULL, NULL);
		m_nHscrollPos = 0;
		m_nVscrollPos = 0;
		::SetScrollPos(m_hWnd,SB_HORZ, m_nHscrollPos, TRUE);
		::SetScrollPos(m_hWnd,SB_VERT, m_nVscrollPos, TRUE);
		CRect tempRect;

		::GetClientRect(m_hWnd,&tempRect);

		// Calculate how many scrolling increments for the client area
		m_nHorzInc = (m_ClientRect.Width() - tempRect.Width())/HORZ_PTS;
		m_nVertInc = (m_ClientRect.Height() - tempRect.Height())/VERT_PTS;

		// Set the vertical and horizontal scrolling info
		m_nHscrollMax = max(0, m_nHorzInc);
		m_nHscrollPos = min (m_nHscrollPos, m_nHscrollMax);

		::SetScrollRange(m_hWnd,SB_HORZ, 0, m_nHscrollMax, FALSE);
		::SetScrollPos(m_hWnd,SB_HORZ, m_nHscrollPos, TRUE);

		m_nVscrollMax = max(0, m_nVertInc);
		m_nVscrollPos = min(m_nVscrollPos, m_nVscrollMax);
		// MessageBox("The Size handler");
		::SetScrollRange(m_hWnd,SB_VERT, 0, m_nVscrollMax, FALSE);
		::SetScrollPos(m_hWnd,SB_VERT, m_nVscrollPos, TRUE);

  */
		return 0;
}


LRESULT OnVScroll(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
{
		int nInc;


		UINT nPos=HIWORD(wParam);
		::MessageBox(NULL,LPCTSTR("Scrollbar" ),"Title",MB_OK);
	/*	switch (LOWORD(wParam))
		{
		case SB_TOP: nInc = -m_nVscrollPos; break;
		case SB_BOTTOM: nInc = m_nVscrollMax-m_nVscrollPos; break;
		case SB_LINEUP: nInc = -1; break;
		case SB_LINEDOWN: nInc = 1; break;
		case SB_PAGEUP: nInc = min(-1, -m_nVertInc); break;
		case SB_PAGEDOWN: nInc = max(1, m_nVertInc); break;
		case SB_THUMBTRACK: nInc = nPos - m_nVscrollPos; break;
		default: nInc = 0;
		}

		nInc = max(-m_nVscrollPos, min(nInc, m_nVscrollMax - m_nVscrollPos));

		if (nInc)
		{
		m_nVscrollPos += nInc;
		int iMove = -VERT_PTS * nInc;
		::ScrollWindow(m_hWnd,0, iMove, NULL, NULL);
		::SetScrollPos(m_hWnd,SB_VERT, m_nVscrollPos, TRUE);
		}*/
		return 0;
}





	

	STDMETHODIMP SetSite(IUnknown* pUnkSite);
	STDMETHODIMP GetSite(REFIID riid, void **ppvSite);
	CComPtr<IWebBrowser2> m_spBrowser;
	STDMETHODIMP GetWindow(HWND* phwnd)
	{
		*phwnd = m_hWnd;
		return S_OK;
	}
	STDMETHODIMP ContextSensitiveHelp(BOOL)
	{
		return E_NOTIMPL;
	}
	STDMETHODIMP ShowDW(BOOL fShow)
	{
		if(m_hWnd)
		{
			if(fShow)
			{
				::ShowWindow(m_hWnd,SW_SHOW);
			}
			else
			{
				::ShowWindow(m_hWnd,SW_HIDE);
			}
		}
		return S_OK;
	}
	STDMETHODIMP CloseDW(unsigned long dwReserved)
	{
		ShowDW(FALSE);
		if(::IsWindow(m_hWnd))
			::DestroyWindow(m_hWnd);
		m_hWnd = NULL;
		return S_OK;
	}
	STDMETHODIMP ResizeBorderDW(const RECT*  prcBorder,
                                     IUnknown* punkToolbarSite,
                                     BOOL      fReserved)
	{
		return E_NOTIMPL;
	}
	STDMETHODIMP GetBandInfo(DWORD dwBandID, DWORD dwViewMode,DESKBANDINFO* pdbi);
	BOOL m_bRequiresSave;

	int m_nHscrollPos ;
	int m_nVscrollPos ;
	BOOL m_bInitialized ;

private:
	IWebBrowser2 *s_pFrameWB;
	HWND _hwndParent;
	IInputObjectSite*  _pSite;
	DWORD m_dwBandID; 
	DWORD m_dwViewMode;

};

#endif //__CHTM_H_



/*
LRESULT OnCreate(UINT , WPARAM , LPARAM , BOOL& )
{
CAxWindow wnd(m_hWnd);
HRESULT hr = wnd.CreateControl(IDH_BROWSER);
long dwStyle=wnd.GetWindowLong(GWL_STYLE);
wnd.SetWindowLong(GWL_STYLE,dwStyle | WS_HSCROLL | WS_VSCROLL);
if (SUCCEEDED(hr))
hr = wnd.SetExternalDispatch(static_cast(this));
if (SUCCEEDED(hr)) {
hr = wnd.QueryControl(IID_IWebBrowser2, (void**)&m_spBrowser);
_bstr_t path("www.yahoo.com");
m_spBrowser->put_StatusBar(true);
m_spBrowser->Navigate(path,NULL,NULL,NULL,NULL);
} 
m_nHscrollPos = 0;
m_nVscrollPos = 0;

// Get the initial dimensions of the dialog
::GetClientRect(m_hWnd,&m_ClientRect);
m_bInitialized = TRUE;
}
*/

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -