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

📄 popupmanagertab.h

📁 一个管理ie的软件
💻 H
字号:
#ifndef __PopupManagerTab_h__
#define __PopupManagerTab_h__

extern HWND g_hMainWnd;

class CPopupManagerTab : public CWindowImpl< CPopupManagerTab , CWindow, 
									CWinTraits < WS_CHILD | WS_VISIBLE, 0> >
{
public:
	CPopupTitleDlg	m_TitleDlg;
	CPopupUrlDlg	m_UrlDlg;
	CPopupLogDlg	m_LogDlg;
	int				m_nTabCurrent;

	CPopupManagerTab()
	{
	}

	~CPopupManagerTab()
	{
		if (m_hWnd)
		{
			DestroyWindow();
		}
	}

	void OnFinalMessage(HWND hWnd)
	{
		::PostQuitMessage(0);
	}

	BEGIN_MSG_MAP(CMySubclassedWindow)
		MESSAGE_HANDLER(WM_SIZE, OnSize)
		MESSAGE_HANDLER(WM_ERASEBKGND, OnEraseBkgnd)
		COMMAND_ID_HANDLER(ID_LOG_EXCLUDE, OnLogExclude)
		COMMAND_ID_HANDLER(ID_LOG_GOTO_FILTER, OnLogGotoFilter)
		COMMAND_ID_HANDLER(ID_LOG_CLEAR, OnLogClear)
		COMMAND_ID_HANDLER(ID_LOG_COPY_URL, OnCopyUrl)
		COMMAND_ID_HANDLER(ID_POPUP_SAVE_LOG, OnSaveLog)
	END_MSG_MAP()

	void Init()
	{
		LONG lStyle = ::GetWindowLong(m_hWnd, GWL_STYLE);
		::SetWindowLong(m_hWnd, GWL_STYLE, lStyle | WS_CLIPCHILDREN);

		m_nTabCurrent = 0;

		m_TitleDlg.Create(m_hWnd);
		m_TitleDlg.ShowWindow(SW_SHOW);

		m_UrlDlg.Create(m_hWnd);
		m_UrlDlg.ShowWindow(SW_HIDE);

		m_LogDlg.Create(m_hWnd);
		m_LogDlg.ShowWindow(SW_HIDE);

		SendMessage(m_hWnd, TCM_SETCURFOCUS, 0, 0L);
		ReSize();
	}

	void ReSize()
	{
		CRect rectTab, rectItem;
		int nX, nY, nXc, nYc;

		GetClientRect(&rectTab);
		SendMessage(m_hWnd, TCM_GETITEMRECT, 0, (LPARAM)&rectItem);

		nX=rectItem.left;
		nY=rectItem.bottom+1;
		nXc=rectTab.right-rectItem.left-1;
		nYc=rectTab.bottom-nY-1;

		m_TitleDlg.SetWindowPos(HWND_TOP, nX, nY, nXc, nYc, SWP_NOREDRAW);
		m_UrlDlg.SetWindowPos(HWND_TOP, nX, nY, nXc, nYc, SWP_NOREDRAW);
		m_LogDlg.SetWindowPos(HWND_TOP, nX, nY, nXc, nYc, SWP_NOREDRAW);
	}

	LRESULT OnClick()
	{
		m_nTabCurrent = SendMessage(m_hWnd, TCM_GETCURFOCUS, 0, 0L);

		switch (m_nTabCurrent)
		{
		case 0:
			m_UrlDlg.ShowWindow(SW_HIDE);
			m_LogDlg.ShowWindow(SW_HIDE);
			if (!m_TitleDlg.IsWindowVisible())
			{
				m_TitleDlg.ShowWindow(SW_SHOW);
			}
			break;
		case 1:
			m_TitleDlg.ShowWindow(SW_HIDE);
			m_LogDlg.ShowWindow(SW_HIDE);
			m_UrlDlg.ShowWindow(SW_SHOW);
			break;
		case 2:
			m_TitleDlg.ShowWindow(SW_HIDE);
			m_UrlDlg.ShowWindow(SW_HIDE);
			m_LogDlg.ShowWindow(SW_SHOW);
			break;
		}

		return 0;
	}

	LRESULT OnSize(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
	{
		ReSize();
		return 0;
	}

	LRESULT OnEraseBkgnd(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
	{
		HBRUSH hBrush;
		CRect rectTab, rectItem;

		GetClientRect(&rectTab);
		SendMessage(m_hWnd, TCM_GETITEMRECT, 0, (LPARAM)&rectItem);

		rectItem.left = rectTab.left;
		rectItem.top = rectTab.top;
		rectItem.right = rectTab.right;

		hBrush = GetSysColorBrush(COLOR_BTNFACE);
		FillRect((HDC)wParam, &rectItem, hBrush);
		return 0;
	}

	void AddLog(long lIndex)
	{
		CPopupLog* pLog;
		if (lIndex >= 0 && lIndex < g_Global.m_vecPopupLog.size())
		{
			pLog = g_Global.m_vecPopupLog[lIndex];

			TCHAR szBuffer[128];
			_stprintf(szBuffer, _T("%d-%02d-%02d %02d:%02d:%02d"),
				pLog->m_timeOccur.wYear, pLog->m_timeOccur.wMonth,
				pLog->m_timeOccur.wDay, pLog->m_timeOccur.wHour,
				pLog->m_timeOccur.wMinute, pLog->m_timeOccur.wSecond);

			LV_ITEM	lvi;
			lvi.iItem = lIndex;
			lvi.iSubItem = 0;
			lvi.mask = LVIF_TEXT | LVIF_PARAM;
			lvi.lParam = lIndex;
			lvi.pszText = szBuffer;
			int nIndex = m_LogDlg.m_listLog.InsertItem(&lvi);

			CString sType;
			if (pLog->m_lKillType == KILLED_BY_SIZE)
			{
				sType.LoadString(IDS_KILLED_BY_SIZE);
			}
			else if (pLog->m_lKillType == KILLED_BY_TITLE)
			{
				sType.LoadString(IDS_KILLED_BY_TITLE);
			}
			else //if (pLog->m_lKillType == KILLED_BY_URL)
			{
				sType.LoadString(IDS_KILLED_BY_URL);
			}

			m_LogDlg.m_listLog.SetItemText(nIndex, 1, pLog->m_sTitle);
			m_LogDlg.m_listLog.SetItemText(nIndex, 2, pLog->m_sUrl);
			m_LogDlg.m_listLog.SetItemText(nIndex, 3, sType);
			m_LogDlg.m_listLog.SetItemText(nIndex, 4, pLog->m_sFilter);

			//play sound
			if (g_Global.m_bEnableSound)
			{
				MessageBeep(MB_OK);
			}
		}
	}

	void AddPopupFilter(CFilterSource* pSource)
	{
		CAddFilterDlg dlg;
		if (pSource)
		{
			dlg.m_sTitle = pSource->m_sTitle;
			dlg.m_sUrl = pSource->m_sUrl;
			dlg.m_bAddToExclusions = pSource->m_bAddToExclusions;
			dlg.m_bExclusionsOnly = pSource->m_bExclusionsOnly;
			dlg.m_bShowPopupList = FALSE;
		}
		else
		{
			dlg.m_bAddToExclusions = FALSE;
			dlg.m_bExclusionsOnly = FALSE;
			dlg.m_bShowPopupList = TRUE;
		}

		if (dlg.DoModal() == IDOK)
		{
			if (dlg.m_bTitleFilter)
			{
				if (dlg.m_bAddToExclusions)
				{
					m_TitleDlg.ExclusionAdd(dlg.m_sTitle);
				}
				else
				{
					m_TitleDlg.BlacklistAdd(dlg.m_sTitle);
				}
			}
			else
			{
				if (dlg.m_bAddToExclusions)
				{
					m_UrlDlg.ExclusionAdd(dlg.m_sUrl);
				}
				else
				{
					m_UrlDlg.BlacklistAdd(dlg.m_sUrl);
				}
			}
		}
	}


/////////////////////////////////////////////////////////////////////////////
//	Command handler for CLogDlg
/////////////////////////////////////////////////////////////////////////////

	LRESULT OnLogExclude(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/)
	{
		int nIndex = m_LogDlg.m_listLog.GetNextItem(-1,LVNI_SELECTED);
		DWORD i = m_LogDlg.m_listLog.GetItemData(nIndex);

		CFilterSource source;
		g_Global.m_lockPopupLog.ReadLock();
		CPopupLog* pLog = g_Global.m_vecPopupLog[i];
		source.m_sTitle = pLog->m_sTitle;
		source.m_sUrl = pLog->m_sUrl;
		source.m_bAddToExclusions = TRUE;
		source.m_bExclusionsOnly = TRUE;
		g_Global.m_lockPopupLog.ReadUnlock();

		AddPopupFilter(&source);
		return 0;
	}

	LRESULT OnLogGotoFilter(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/)
	{
		int nIndex = m_LogDlg.m_listLog.GetNextItem(-1,LVNI_SELECTED);
		DWORD i = m_LogDlg.m_listLog.GetItemData(nIndex);

		g_Global.m_lockPopupLog.ReadLock();
		CPopupLog* pLog = g_Global.m_vecPopupLog[i];

		CListViewCtrl* pListView;
		if (pLog->m_lKillType == KILLED_BY_TITLE)
		{
			m_nTabCurrent = 0;
			pListView = &m_TitleDlg.m_listBlackList;
		}
		else if (pLog->m_lKillType == KILLED_BY_URL)
		{
			m_nTabCurrent = 1;
			pListView = &m_UrlDlg.m_listBlackList;
		}

		LVFINDINFO lvfi;
		lvfi.flags = LVFI_STRING;
		lvfi.psz = pLog->m_sFilter.LockBuffer();
		int nItem = pListView->FindItem(&lvfi, -1);
		if (nItem >= 0)
		{
			pListView->SetFocus();
			pListView->SetItemState(nItem,
				LVIS_SELECTED|LVIS_FOCUSED, LVIS_SELECTED|LVIS_FOCUSED);
			pListView->EnsureVisible(nItem, FALSE);
			SendMessage(m_hWnd, TCM_SETCURFOCUS, m_nTabCurrent, 0L);
			OnClick();
		}
		pLog->m_sFilter.UnlockBuffer();
		g_Global.m_lockPopupLog.ReadUnlock();
		return 0;
	}

	LRESULT OnLogClear(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/)
	{
		g_Global.ClearLog();
		m_LogDlg.m_listLog.DeleteAllItems();
		return 0;
	}

	LRESULT OnCopyUrl(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/)
	{
		//get url
		CString sUrl;
		LPTSTR pUrl;
		int nIndex = m_LogDlg.m_listLog.GetNextItem(-1,LVNI_SELECTED);
		pUrl = sUrl.GetBuffer(MAX_PATH);
		m_LogDlg.m_listLog.GetItemText(nIndex, 2, pUrl, MAX_PATH);
		sUrl.ReleaseBuffer();

		//put url in clipboard
		HGLOBAL hClipBuffer;
		LPTSTR pBuffer = NULL;

		if(::OpenClipboard(NULL))
		{
			::EmptyClipboard();
			hClipBuffer = GlobalAlloc(GMEM_DDESHARE, 
				(sUrl.GetLength() + 1)*sizeof(TCHAR));
			pBuffer = (LPTSTR)GlobalLock(hClipBuffer);
			_tcscpy(pBuffer, sUrl);
			GlobalUnlock(hClipBuffer);
			::SetClipboardData(CF_TEXT, hClipBuffer);
			::CloseClipboard();
		}
		return 0;
	}

	LRESULT OnSaveLog(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/)
	{
		::PostMessage(g_hMainWnd, WM_COMMAND, ID_POPUP_SAVE_LOG, 0L);
		return 0;
	}
};


#endif //__PopupManagerTab_h__

⌨️ 快捷键说明

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