📄 addfilterdlg.h
字号:
// AddFilterDlg.h : interface of the CAddFilterDlg class
//
/////////////////////////////////////////////////////////////////////////////
#ifndef __AddFilterDlg_h__
#define __AddFilterDlg_h__
class CAddFilterDlg : public CDialogImpl<CAddFilterDlg>
{
public:
enum { IDD = IDD_ADD_FILTER };
CString m_sTitle;
CString m_sUrl;
BOOL m_bTitleFilter;
BOOL m_bAddToExclusions;
BOOL m_bExclusionsOnly;
BOOL m_bShowPopupList;
CButton m_btnFilterType1;//Title
CButton m_btnFilterType2;//URL
CButton m_btnAddToExclusions;
CListViewCtrl m_listPopup;
CDlgItemResizer m_Resizer;
BEGIN_MSG_MAP(CAddFilterDlg)
MESSAGE_HANDLER(WM_INITDIALOG, OnInitDialog)
MESSAGE_HANDLER(WM_SIZE, OnSize)
COMMAND_HANDLER(IDC_FILTER_TYPE1, BN_CLICKED, OnClickedType1)
COMMAND_HANDLER(IDC_FILTER_TYPE2, BN_CLICKED, OnClickedType2)
NOTIFY_HANDLER(IDC_POPUP_LIST, NM_CLICK , OnClickedPopupList)
COMMAND_ID_HANDLER(IDOK, OnOK)
COMMAND_ID_HANDLER(IDCANCEL, OnCancel)
END_MSG_MAP()
LRESULT OnInitDialog(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& /*bHandled*/)
{
//add controls to resize manager
m_Resizer.Add(m_hWnd, IDOK, RESIZE_LOCKBOTTOM);
m_Resizer.Add(m_hWnd, IDCANCEL, RESIZE_LOCKBOTTOM);
// initial controls
SetDlgItemText(IDC_POPUP_TITLE, m_sTitle);
SetDlgItemText(IDC_POPUP_URL, m_sUrl);
m_btnFilterType1.Attach(GetDlgItem(IDC_FILTER_TYPE1));
m_btnFilterType2.Attach(GetDlgItem(IDC_FILTER_TYPE2));
m_btnAddToExclusions.Attach(GetDlgItem(IDC_ADD_TO_EXCLUSIONS));
if (m_sTitle.GetLength() == 0 && m_sUrl.GetLength() > 0)
{
m_btnFilterType2.SetCheck(1);
::EnableWindow(GetDlgItem(IDC_POPUP_TITLE), FALSE);
}
else
{
m_btnFilterType1.SetCheck(1);
::EnableWindow(GetDlgItem(IDC_POPUP_URL), FALSE);
}
m_btnAddToExclusions.SetCheck(m_bAddToExclusions ? 1 : 0);
if (m_bExclusionsOnly)
{
m_btnAddToExclusions.EnableWindow(FALSE);
}
m_listPopup.Attach(GetDlgItem(IDC_POPUP_LIST));
DWORD dwStyle;
dwStyle = m_listPopup.SendMessage(LVM_GETEXTENDEDLISTVIEWSTYLE);
dwStyle |= LVS_EX_FULLROWSELECT | LVS_EX_LABELTIP;
m_listPopup.SendMessage(LVM_SETEXTENDEDLISTVIEWSTYLE, 0, (LPARAM)dwStyle);
if (!m_bShowPopupList)
{
CRect rectDlg;
CRect rectStatic;
CRect rectOkButton;
::GetWindowRect(m_hWnd, &rectDlg);
::GetWindowRect(GetDlgItem(IDC_STATIC_POPUP), &rectStatic);
::GetWindowRect(GetDlgItem(IDOK), &rectOkButton);
rectDlg.bottom -= rectOkButton.top - rectStatic.top;
::SetWindowPos(m_hWnd, HWND_TOP,
rectDlg.left, rectDlg.top,
rectDlg.right - rectDlg.left,
rectDlg.bottom - rectDlg.top, SWP_SHOWWINDOW);
m_listPopup.EnableWindow(FALSE);
m_listPopup.ShowWindow(SW_HIDE);
::ShowWindow(GetDlgItem(IDC_STATIC_POPUP), SW_HIDE);
}
else
{
// set column header
CString sHeaderTitle;
LV_COLUMN lvc;
lvc.mask = LVCF_FMT | LVCF_WIDTH | LVCF_TEXT | LVCF_SUBITEM;
sHeaderTitle.LoadString(IDS_LOG_TITLE);
lvc.iSubItem = 0;
lvc.pszText = sHeaderTitle.LockBuffer();
lvc.cx = 160;
lvc.fmt = LVCFMT_LEFT;
m_listPopup.InsertColumn(0, &lvc);
sHeaderTitle.UnlockBuffer();
sHeaderTitle.LoadString(IDS_LOG_URL);
lvc.iSubItem = 1;
lvc.pszText = sHeaderTitle.LockBuffer();
lvc.cx = 220;
lvc.fmt = LVCFMT_LEFT;
m_listPopup.InsertColumn(1, &lvc);
sHeaderTitle.UnlockBuffer();
//fill list
USES_CONVERSION;
HRESULT hr;
SHDocVw::IShellWindowsPtr pShellWindows;
CComQIPtr<IWebBrowser2, &IID_IWebBrowser2> pBrowser;
CComQIPtr<IHTMLDocument2, &IID_IHTMLDocument2> pDocument;
IDispatch* pDisp = NULL;
if (pShellWindows.CreateInstance(__uuidof(SHDocVw::ShellWindows)) == S_OK)
{
long lCount = pShellWindows->GetCount();
long j = 0;
int nIndex;
BSTR bstrTitle = NULL;
BSTR bstrUrl = NULL;
HWND hBrowserWnd;
TCHAR szClassName[MAX_PATH];
for (long i=0; i<lCount; i++)
{
_variant_t va(i, VT_I4);
pShellWindows->raw_Item(va, &pDisp);
if (!pDisp)
{
continue;
}
pBrowser = pDisp;
pDisp->Release();
if (!pBrowser)
{
continue;
}
pBrowser->get_HWND((long*)&hBrowserWnd);
GetClassName(hBrowserWnd, szClassName, MAX_PATH);
if (_tcscmp(szClassName, _T("ExploreWClass")) == 0)
{
continue;
}
pBrowser->get_LocationURL(&bstrUrl);
hr = pBrowser->get_Document(&pDisp);
if (SUCCEEDED(hr) && pDisp != NULL)
{
pDocument = pDisp;
pDisp->Release();
if (pDocument)
{
pDocument->get_title(&bstrTitle);
}
LV_ITEM lvi;
lvi.mask = LVIF_TEXT;
lvi.iItem = j;
lvi.iSubItem = 0;
lvi.pszText = W2T(bstrTitle);
nIndex = m_listPopup.InsertItem(&lvi);
m_listPopup.SetItemText(nIndex, 1, W2T(bstrUrl));
j++;
}
if (bstrTitle)
{
SysFreeString(bstrTitle);
}
if (bstrUrl)
{
SysFreeString(bstrUrl);
}
}
}
}
::SetFocus(GetDlgItem(IDC_POPUP_TITLE));
CenterWindow(GetParent());
return FALSE;
}
LRESULT OnSize(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
{
m_Resizer.Resize(m_hWnd);
return 0;
}
LRESULT OnClickedType1(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled)
{
m_btnFilterType2.SetCheck(0);
::EnableWindow(GetDlgItem(IDC_POPUP_TITLE), TRUE);
::EnableWindow(GetDlgItem(IDC_POPUP_URL), FALSE);
return 0;
}
LRESULT OnClickedType2(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled)
{
m_btnFilterType1.SetCheck(0);
::EnableWindow(GetDlgItem(IDC_POPUP_TITLE), FALSE);
::EnableWindow(GetDlgItem(IDC_POPUP_URL), TRUE);
return 0;
}
LRESULT OnClickedPopupList(int idCtrl, LPNMHDR pnmh, BOOL& bHandled)
{
LPNMITEMACTIVATE lpnmitem = (LPNMITEMACTIVATE)pnmh;
CString sTitle;
LPTSTR pTitle;
CString sUrl;
LPTSTR pUrl;
pTitle = sTitle.GetBuffer(MAX_PATH);
m_listPopup.GetItemText(lpnmitem->iItem, 0, pTitle, MAX_PATH);
sTitle.ReleaseBuffer();
pUrl = sUrl.GetBuffer(MAX_PATH);
m_listPopup.GetItemText(lpnmitem->iItem, 1, pUrl, MAX_PATH);
sUrl.ReleaseBuffer();
SetDlgItemText(IDC_POPUP_TITLE, sTitle);
SetDlgItemText(IDC_POPUP_URL, sUrl);
return 0;
}
LRESULT OnOK(WORD /*wNotifyCode*/, WORD wID, HWND /*hWndCtl*/, BOOL& /*bHandled*/)
{
CString sText;
LPTSTR pText = sText.GetBuffer(MAX_PATH);
m_bTitleFilter = m_btnFilterType1.GetCheck();
if (m_bTitleFilter)
{
GetDlgItemText(IDC_POPUP_TITLE, pText, MAX_PATH);
}
else
{
GetDlgItemText(IDC_POPUP_URL, pText, MAX_PATH);
}
sText.ReleaseBuffer();
// sText.TrimLeft();
// sText.TrimRight();
if (sText.GetLength() == 0)
{
CString sErrorMsg;
sErrorMsg.LoadString(IDS_INVALID_INPUT);
MessageBox(sErrorMsg, NULL, MB_OK | MB_ICONERROR);
return 0;
}
if (m_bTitleFilter)
{
m_sTitle = sText;
}
else
{
m_sUrl = sText;
}
m_bAddToExclusions = m_btnAddToExclusions.GetCheck();
EndDialog(IDOK);
return 0;
}
LRESULT OnCancel(WORD /*wNotifyCode*/, WORD wID, HWND /*hWndCtl*/, BOOL& /*bHandled*/)
{
EndDialog(IDCANCEL);
return 0;
}
};
#endif //__AddFilterDlg_h__
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -