📄 closetitle.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 + -