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

📄 donutoptions.h

📁 一个使用wtl写的完整的多窗口浏览器
💻 H
📖 第 1 页 / 共 3 页
字号:
			CDLControlOption::s_dwDLControlFlags |= DLCTL_NO_SCRIPTS;
		if (m_nJava == 0)
			CDLControlOption::s_dwDLControlFlags |= DLCTL_NO_JAVA;

		if (m_nMozilla == 1)
			_bMozilla = true;
		else
			_bMozilla = false;

		if (m_nNaviLock == 1)
			_bNaviLock = true;
		else
			_bNaviLock = false;
	}

	void _SetData()
	{
		m_nBGSounds = CDLControlOption::s_dwDLControlFlags & DLCTL_BGSOUNDS ? 1 : 0;
		m_nVideos = CDLControlOption::s_dwDLControlFlags & DLCTL_VIDEOS ? 1 : 0;
		m_nDLImages = CDLControlOption::s_dwDLControlFlags & DLCTL_DLIMAGES ? 1 : 0;

		m_nRunActiveXCtls = CDLControlOption::s_dwDLControlFlags & DLCTL_NO_RUNACTIVEXCTLS ? 0 : 1;
		m_nDLActiveXCtls = CDLControlOption::s_dwDLControlFlags & DLCTL_NO_DLACTIVEXCTLS ? 0 : 1;
		m_nScripts = CDLControlOption::s_dwDLControlFlags & DLCTL_NO_SCRIPTS ? 0 : 1;
		m_nJava = CDLControlOption::s_dwDLControlFlags & DLCTL_NO_JAVA ? 0 : 1;

		m_nMozilla = _bMozilla ? 1 : 0;
		m_nNaviLock = _bNaviLock ? 1 : 0;
	}
};


class CIgnoredURLsOption
{
public:
	typedef std::list<CString> CStringList;
	static CStringList* s_pIgnoredURLs;
	static bool s_bValid;

	static void GetProfile()
	{
		CIniSection pr;
		pr.Open(_szIniFileName, _T("IgnoredURLs"));

		s_pIgnoredURLs = new CStringList;
		MtlGetProfileString(pr, std::back_inserter(*s_pIgnoredURLs), _T("url"));
		
		DWORD dwValid;
		LONG lRet = pr.QueryValue(dwValid, _T("IsValid"));
		if (lRet == ERROR_SUCCESS)
			s_bValid = (dwValid == 1);

		pr.Close();
	}

	static void WriteProfile()
	{
		CIniSection pr;

		MtlIniDeleteSection(_szIniFileName, _T("IgnoredURLs"));// clean up
		pr.Open(_szIniFileName, _T("IgnoredURLs"));
		MtlWriteProfileString(s_pIgnoredURLs->begin(), s_pIgnoredURLs->end(), pr, _T("url"));

		pr.SetValue(s_bValid == true ? 1 : 0, _T("IsValid"));

		pr.Close();

		delete s_pIgnoredURLs;
	}

	static bool SearchString(const CString& strURL)
	{
		ATLASSERT(s_pIgnoredURLs != NULL);
		if (!s_bValid)// allways can't found
			return false;

		return MtlSearchStringWildCard(s_pIgnoredURLs->begin(), s_pIgnoredURLs->end(), strURL);
	}

	static void Add(const CString& strURL)
	{
		if (!SearchString(strURL))
			s_pIgnoredURLs->push_back(strURL);
	}
};

__declspec(selectany) CIgnoredURLsOption::CStringList* CIgnoredURLsOption::s_pIgnoredURLs = NULL;
__declspec(selectany) bool CIgnoredURLsOption::s_bValid = true;

class CIgnoredURLsPropertyPage : public CPropertyPageImpl<CIgnoredURLsPropertyPage>,
	public CWinDataExchange<CIgnoredURLsPropertyPage>
{
public:
// Declarations
	enum { IDD = IDD_PROPPAGE_IGNOREDURLS };

// Data members
	CIgnoredURLsOption::CStringList m_urls;
	CString m_strAddressBar;
	CListBox m_listbox;
	CEdit m_edit;
	int m_nValid;

// Constructor
	CIgnoredURLsPropertyPage(const CString& strAddressBar)
		: m_urls(*CIgnoredURLsOption::s_pIgnoredURLs), m_strAddressBar(strAddressBar)
	{
		m_urls.sort();
		m_nValid = CIgnoredURLsOption::s_bValid ? 1 : 0;
	}

// DDX map
	BEGIN_DDX_MAP(CDLControlPropertyPage)
		DDX_CHECK(IDC_IGNORED_URL_VALID, m_nValid)
	END_DDX_MAP()

// Overrides
	BOOL OnSetActive()
	{
		SetModified(TRUE);
		return _DoDataExchange(FALSE);
	}
	BOOL OnKillActive()
	{
		return _DoDataExchange(TRUE);
	}
	BOOL OnApply()
	{
		if (_DoDataExchange(TRUE)) {
			_GetData();
			return TRUE;
		}
		else 
			return FALSE;
	}

// overrides
	BOOL _DoDataExchange(BOOL bSaveAndValidate)// get data from controls?
	{
		if (!bSaveAndValidate) {// set data of control
			m_listbox.Attach(GetDlgItem(IDC_IGNORED_URL_LIST));
			m_listbox.ResetContent();
			std::for_each(m_urls.begin(), m_urls.end(), _AddToListBox(m_listbox));

			m_edit.Attach(GetDlgItem(IDC_URL_EDIT));
			m_edit.SetWindowText(m_strAddressBar);
		}

		return DoDataExchange(bSaveAndValidate);
	}

// Message map and handlers
	BEGIN_MSG_MAP(CIgnoredURLsPropertyPage)
		COMMAND_ID_HANDLER_EX(IDC_ADD_BUTTON, OnAddCmd)
		COMMAND_ID_HANDLER_EX(IDC_DELALL_BUTTON,OnDelAllCmd)
		COMMAND_ID_HANDLER_EX(IDC_DEL_BUTTON, OnDelCmd)
		COMMAND_HANDLER_EX(IDC_IGNORED_URL_LIST, LBN_SELCHANGE, OnSelChange)
		CHAIN_MSG_MAP(CPropertyPageImpl<CIgnoredURLsPropertyPage>)
	END_MSG_MAP()

	void OnDelCmd(UINT /*wNotifyCode*/, int /*wID*/, HWND /*hWndCtl*/)
	{
		int nIndex = m_listbox.GetCurSel();
		if (nIndex == LB_ERR)
			return;
		
		m_listbox.DeleteString(nIndex);
		CIgnoredURLsOption::CStringList::iterator it = m_urls.begin();
		std::advance(it, nIndex);
		m_urls.erase(it);
	}

	void OnDelAllCmd(UINT /*wNotifyCode*/, int /*wID*/, HWND /*hWndCtl*/)
	{
		m_listbox.ResetContent();
		m_urls.clear();
	}

	void OnAddCmd(UINT /*wNotifyCode*/, int /*wID*/, HWND /*hWndCtl*/)
	{
		TCHAR szEdit[MAX_PATH];
		if (m_edit.GetWindowText(szEdit, MAX_PATH) == 0)
			return;

		CIgnoredURLsOption::CStringList::iterator it = std::find(m_urls.begin(), m_urls.end(), szEdit);
		if (it == m_urls.end()) {
			m_listbox.AddString(szEdit);
			m_urls.push_back(szEdit);
		}
		else {
#ifdef __SGI_STL_INTERNAL_ITERATOR_BASE_H
			int n = 0;
			std::distance(m_urls.begin(), it, n);
			m_listbox.SetCurSel(n);
#else
			m_listbox.SetCurSel(std::distance(m_urls.begin(), it));
#endif
		}
	}

	void OnSelChange(UINT code, int id, HWND hWnd)
	{
		int nIndex = m_listbox.GetCurSel();
		CString strBox;
		m_listbox.GetText(nIndex, strBox);
		m_edit.SetWindowText(strBox);
	}

// Implementation
private:
	// function objects
	struct _AddToListBox : public std::unary_function<const CString&, void>
	{
		CListBox& _box;
		_AddToListBox(CListBox& box) : _box(box) { }
		result_type operator()(argument_type src)
		{
			_box.AddString(src);
		}
	};

	void _GetData()
	{
		// update ignored urls list
		*CIgnoredURLsOption::s_pIgnoredURLs = m_urls;
		CIgnoredURLsOption::s_bValid = m_nValid == 1 ? true : false;
	}
};

#define DVS_AUTOREFRESH_15SEC	0x00000001L
#define DVS_AUTOREFRESH_30SEC	0x00000002L
#define DVS_AUTOREFRESH_1MIN	0x00000004L
#define DVS_AUTOREFRESH_2MIN	0x00000008L
#define DVS_AUTOREFRESH_5MIN	0x00000010L

#define DVS_EX_OPENNEWWIN		0x00000001L

template <class _DonutView>
class CDonutViewOption
{
public:
	DWORD m_dwAutoRefreshStyle;
	DWORD m_dwExStyle;
	CString m_strURL;

	_DonutView* __m_pDonutView;
	UINT m_nIDEvent;

	CDonutViewOption(_DonutView* __pDonutView)
		: __m_pDonutView(__pDonutView), m_nIDEvent(0),
		  m_dwAutoRefreshStyle(0), m_dwExStyle(0)
	{
		m_nIDEvent = 0;
	}

	void Init()
	{
		_SetTimer();
	}

	void Uninit()
	{
		_KillTimer();
	}

// Message map and handlers
	BEGIN_MSG_MAP(CDonutViewOption)
		COMMAND_ID_HANDLER_EX(ID_AUTOREFRESH_NONE, OnAutoRefreshNone)
		COMMAND_ID_HANDLER_EX(ID_AUTOREFRESH_15SEC, OnAutoRefresh15sec)
		COMMAND_ID_HANDLER_EX(ID_AUTOREFRESH_30SEC, OnAutoRefresh30sec)
		COMMAND_ID_HANDLER_EX(ID_AUTOREFRESH_1MIN, OnAutoRefresh1min)
		COMMAND_ID_HANDLER_EX(ID_AUTOREFRESH_2MIN, OnAutoRefresh2min)
		COMMAND_ID_HANDLER_EX(ID_AUTOREFRESH_5MIN, OnAutoRefresh5min)

//		COMMAND_ID_HANDLER_EX(ID_DOCHOSTUI_OPENNEWWIN, OnDocHostUIOpenNewWin)
		MSG_WM_TIMER(OnTimer)
	END_MSG_MAP()

	void OnDocHostUIOpenNewWin(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/)
	{
		if (m_dwExStyle & DVS_EX_OPENNEWWIN) {
			m_dwExStyle &= ~DVS_EX_OPENNEWWIN;
//			__m_pDonutView->_DocHostUIOpenNewWin(false);
		}
		else {
			m_dwExStyle |= DVS_EX_OPENNEWWIN;
//			__m_pDonutView->_DocHostUIOpenNewWin(true);
		}
	}

	void OnAutoRefreshNone(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/)
	{
		m_dwAutoRefreshStyle = 0;
		_KillTimer();
	}
	void OnAutoRefresh15sec(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/)
	{
		m_dwAutoRefreshStyle = 0;
		m_dwAutoRefreshStyle |= DVS_AUTOREFRESH_15SEC;
		_KillTimer();
		_SetTimer();
	}
	void OnAutoRefresh30sec(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/)
	{
		m_dwAutoRefreshStyle = 0;
		m_dwAutoRefreshStyle |= DVS_AUTOREFRESH_30SEC;
		_KillTimer();
		_SetTimer();
	}
	void OnAutoRefresh1min(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/)
	{
		m_dwAutoRefreshStyle = 0;
		m_dwAutoRefreshStyle |= DVS_AUTOREFRESH_1MIN;
		_KillTimer();
		_SetTimer();
	}
	void OnAutoRefresh2min(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/)
	{
		m_dwAutoRefreshStyle = 0;
		m_dwAutoRefreshStyle |= DVS_AUTOREFRESH_2MIN;
		_KillTimer();
		_SetTimer();
	}
	
	void OnAutoRefresh5min(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/)
	{
		m_dwAutoRefreshStyle = 0;
		m_dwAutoRefreshStyle |= DVS_AUTOREFRESH_5MIN;
		_KillTimer();
		_SetTimer();
	}

	void OnTimer(UINT wTimerID, TIMERPROC*)
	{
		ATLTRACE2(atlTraceUser, 4, _T("CChildFrame::OnTimer\n"));
		if (wTimerID == m_nIDEvent)
			::PostMessage(__m_pDonutView->GetParent(), WM_COMMAND, (WPARAM)ID_VIEW_REFRESH, 0);
//			__m_pDonutView->m_spBrowser->Refresh();
		else
			SetMsgHandled(FALSE);
	}

	int _GetElapse()
	{
		if (m_dwAutoRefreshStyle == 0)
			return -1;
		else if (m_dwAutoRefreshStyle & DVS_AUTOREFRESH_15SEC)
			return 15*1000;
		else if (m_dwAutoRefreshStyle & DVS_AUTOREFRESH_30SEC)
			return 30*1000;
		else if (m_dwAutoRefreshStyle & DVS_AUTOREFRESH_1MIN)
			return 1*60*1000;
		else if (m_dwAutoRefreshStyle & DVS_AUTOREFRESH_2MIN)
			return 2*60*1000;
		else if (m_dwAutoRefreshStyle & DVS_AUTOREFRESH_5MIN)
			return 5*60*1000;

		return -1;
	}

	void _KillTimer()
	{
		if (m_nIDEvent != 0) {
			MTLVERIFY(::KillTimer(__m_pDonutView->m_hWnd, m_nIDEvent));
			m_nIDEvent = 0;
		}
	}

	void _SetTimer()
	{
		int nElapse = _GetElapse();
		if (nElapse != -1)
			m_nIDEvent = ::SetTimer(__m_pDonutView->m_hWnd, 1, _GetElapse(), NULL);
	}

	void WriteProfile(const CString& strFileName, int nIndex)
	{
		CIniSection pr;

		CString strSectionName = _T("Window");
		strSectionName.Append(nIndex);
		pr.Open(strFileName, strSectionName);

		pr.SetValue(__m_pDonutView->GetLocationURL(), _T("Location_URL"));
		pr.SetValue(__m_pDonutView->GetDLControlFlags(), _T("DL_Control_Flags"));
		pr.SetValue(m_dwAutoRefreshStyle, _T("Auto_Refresh_Style"));
		MtlWriteProfileChildFrameState(pr, __m_pDonutView->GetParent(), _T("child."));

		// save extended style
		pr.SetValue(m_dwExStyle, _T("Extended_Style"));

		pr.Close();
	}

	void GetProfile(const CString& strFileName, int nIndex, bool bGetChildFrameState)
	{
		CIniSection pr;

		CString strSectionName = _T("Window");
		strSectionName.Append(nIndex);
		pr.Open(strFileName, strSectionName);

		DWORD dwDLControlFlags = DLCTL_DEFAULT;
		if (pr.QueryValue(dwDLControlFlags, _T("DL_Control_Flags")) == ERROR_SUCCESS)
			__m_pDonutView->PutDLControlFlags(dwDLControlFlags);

		TCHAR sz[INTERNET_MAX_PATH_LENGTH];
		DWORD dwBytes = INTERNET_MAX_PATH_LENGTH;
		if (pr.QueryValue(sz, _T("Location_URL"), &dwBytes) == ERROR_SUCCESS) {
			// avoid endless loop
			CString strURL(sz);
			bool bMaybeEndless = (strURL == _T("javascript:location.reload()"));
			if (!bMaybeEndless)
				__m_pDonutView->Navigate2(sz);
		}

⌨️ 快捷键说明

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