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

📄 closetitle.h

📁 一个使用wtl写的完整的多窗口浏览器
💻 H
字号:
#pragma once

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

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

		s_pCloseTitles = new CStringList;
		MtlGetProfileString(pr, std::back_inserter(*s_pCloseTitles), _T("title"));
		
		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("CloseTitles"));// clean up
		pr.Open(_szIniFileName, _T("CloseTitles"));
		MtlWriteProfileString(s_pCloseTitles->begin(), s_pCloseTitles->end(), pr, _T("title"));

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

		pr.Close();

		delete s_pCloseTitles;
	}

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

		return MtlSearchStringWildCard(s_pCloseTitles->begin(), s_pCloseTitles->end(), strTitle);
	}

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

__declspec(selectany) CCloseTitlesOption::CStringList* CCloseTitlesOption::s_pCloseTitles = NULL;
__declspec(selectany) bool CCloseTitlesOption::s_bValid = true;

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

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

// Constructor
	CCloseTitlesPropertyPage(const CString& strAddressBar)
		: m_urls(*CCloseTitlesOption::s_pCloseTitles), m_strAddressBar(strAddressBar)
	{
		m_urls.sort();
		m_nValid = CCloseTitlesOption::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(CCloseTitlesPropertyPage)
		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<CCloseTitlesPropertyPage>)
	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);
		CCloseTitlesOption::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;

		CCloseTitlesOption::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));// is C++ standard.
#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
		*CCloseTitlesOption::s_pCloseTitles = m_urls;
		CCloseTitlesOption::s_bValid = m_nValid == 1 ? true : false;
	}
};

⌨️ 快捷键说明

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