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

📄 setproxy.cpp

📁 用VC写的浏览器
💻 CPP
📖 第 1 页 / 共 2 页
字号:
// SetProxy.cpp : implementation file
//

#include "stdafx.h"
#include "GreenBrowser.h"
#include "SetProxy.h"
#include "MainFrm.h"
#include "ProxyInfo.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif


//#pragma optimize( "s", on )

/////////////////////////////////////////////////////////////////////////////
// CSetProxy dialog

//0. invalid, 1. slower, 2. slow, 3. normal, 4. fast, 5. faster

CSetProxy::CSetProxy(CWnd* pParent /*=NULL*/)
	: CDialog(CSetProxy::IDD, pParent)
{
	//{{AFX_DATA_INIT(CSetProxy)
	m_bUseWebProxy = FALSE;
	m_bUseProxy = FALSE;
	//}}AFX_DATA_INIT

	m_pDragImage = NULL;
}


void CSetProxy::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CSetProxy)
	DDX_Control(pDX, IDC_BYPASS, m_ByPass);
	DDX_Control(pDX, IDC_CATES, m_CateList);
	DDX_Control(pDX, IDC_PROXY_LIST, m_ProxyList);
	DDX_Check(pDX, IDC_USE_WEB_PROXY, m_bUseWebProxy);
	DDX_Check(pDX, IDC_USER_PROXY, m_bUseProxy);
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CSetProxy, CDialog)
	//{{AFX_MSG_MAP(CSetProxy)
	ON_BN_CLICKED(IDC_PROXY_NEW, OnProxyNew)
	ON_BN_CLICKED(IDC_PROXY_DEL, OnProxyDel)
	ON_NOTIFY(LVN_ENDLABELEDIT, IDC_PROXY_LIST, OnEndlabeleditProxyList)
	ON_NOTIFY(UDN_DELTAPOS, IDC_SPIN1, OnDeltaposSpin1)
	ON_NOTIFY(UDN_DELTAPOS, IDC_SPIN2, OnDeltaposSpin2)
	ON_BN_CLICKED(IDC_MODIFYPROXY, OnModifyproxy)
	ON_NOTIFY(LVN_ITEMCHANGED, IDC_CATES, OnItemchangedCates)
	ON_NOTIFY(LVN_ENDLABELEDIT, IDC_CATES, OnEndlabeleditCates)
	ON_BN_CLICKED(IDC_NEWCATE, OnNewcate)
	ON_EN_CHANGE(IDC_BYPASS, OnChangeBypass)
	ON_BN_CLICKED(IDC_DELCATE, OnDelcate)
	ON_NOTIFY(LVN_ITEMCHANGED, IDC_PROXY_LIST, OnItemchangedProxyList)
	ON_NOTIFY(LVN_BEGINDRAG, IDC_PROXY_LIST, OnBegindragProxyList)
	ON_WM_LBUTTONUP()
	ON_WM_MOUSEMOVE()
	ON_NOTIFY(NM_DBLCLK, IDC_PROXY_LIST, OnDblclkProxyList)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CSetProxy message handlers

BOOL CSetProxy::OnInitDialog() 
{
#ifdef _WRITE_LNG_FILE_
	_WriteDlgString(this,"DialogProxy");
	this->OnCancel();
	return TRUE;
#endif
	LOADDLG("DialogProxy");
	CDialog::OnInitDialog();

	m_ProxyList.SetExtendedStyle(m_ProxyList.GetExtendedStyle()| LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES);
	m_ProxyList.SetBkColor(GetSysColor(COLOR_WINDOW));

	m_tmpProxyCategory = new CProxyCategory(pmf->m_aProxyCategories);

	CString str;
	CRect rect;
	int i=0;
	m_ProxyList.GetWindowRect(rect);
	LOADSTR(str ,IDS_NAME);
	m_ProxyList.InsertColumn(0,str);
	m_ProxyList.SetColumnWidth(0, 110);
	LOADSTR(str ,IDS_URL);
	m_ProxyList.InsertColumn(1, str);
	m_ProxyList.SetColumnWidth(1, rect.Width()-180);
	LOADSTR(str ,IDS_SPEED);
	m_ProxyList.InsertColumn(2, str);
	m_ProxyList.SetColumnWidth(2, 50);

	//image
	CImageList img;
	img.Create(16, 16, ILC_COLORDDB|ILC_MASK, 2, 1);
	HBITMAP hbmp = ::LoadBitmap(AfxGetInstanceHandle(), MAKEINTRESOURCE(IDB_BITMAP10));
	ImageList_AddMasked(img.GetSafeHandle(), hbmp, RGB(255,0,255));
	DeleteObject(hbmp);

	m_CateList.SetExtendedStyle(m_CateList.GetExtendedStyle() | LVS_EX_FULLROWSELECT);
	m_CateList.InsertColumn(0,"");
	m_CateList.GetWindowRect(rect);
	m_CateList.SetColumnWidth(0, rect.Width()-5);

	m_CateList.SetImageList(&img, LVSIL_SMALL);
	img.Detach();

	//fill with the default proxy list
	//category list
	m_nList = m_nSelProxyList;
	int icon;
    for(i=0; i<=m_tmpProxyCategory->m_ProxyCategory.GetUpperBound(); i++)
	{	
		if(m_tmpProxyCategory->m_ProxyCategory.ElementAt(i)->m_bIsWebProxy)
			icon=0;
		else
			icon=1;
		m_CateList.InsertItem(i, m_tmpProxyCategory->m_ProxyCategory.ElementAt(i)->m_strCategoryName, icon);
	}
	CProxyList* pl=NULL;
	if(m_nList>=0 && m_nList<i)
		pl=m_tmpProxyCategory->m_ProxyCategory.GetAt(m_nList);
	if(pl!=NULL)
	{
		for(i=0; i<=pl->m_Proxies.GetUpperBound(); i++)
		{
			m_ProxyList.InsertItem(i, pl->m_Proxies.ElementAt(i)->m_strProxyName);

			m_ProxyList.SetItemText(i, 1, pl->m_Proxies.ElementAt(i)->m_strProxy);
			if(m_SelProxy == pl->m_Proxies.ElementAt(i)->m_strProxy)
				m_ProxyList.SetItemState(i, LVIS_SELECTED, LVIS_SELECTED);

			LOADSTR(str ,IDS_SP_INVALID + pl->m_Proxies.ElementAt(i)->m_nProxySpeed);
			m_ProxyList.SetItemText(i, 2, str);

		}
		m_ByPass.SetWindowText(pl->m_strProxyByPass);
	}

	m_CateList.SetItemState(m_nList, LVIS_SELECTED, LVIS_SELECTED);

	m_bUnUpdateProxy = TRUE;

	return TRUE;  // return TRUE unless you set the focus to a control
	              // EXCEPTION: OCX Property Pages should return FALSE
}

void CSetProxy::OnOK() 
{
	// TODO: Add extra validation here
	try{	 
	pmf->m_aProxyCategories.Copy(*m_tmpProxyCategory);
	delete m_tmpProxyCategory;
	}catch(...){}

	CDialog::OnOK();
}

void CSetProxy::OnProxyNew() 
{
	// TODO: Add your control notification handler code here
	if(m_nList<0)
		return;

	POSITION pos = m_CateList.GetFirstSelectedItemPosition();
	if(pos==NULL)
	{
		m_bUnUpdateProxy = TRUE;
		m_CateList.SetItemState(m_nList, LVIS_SELECTED, LVIS_SELECTED);
	}

	CProxyInfo proxyinfo;
	CProxyList* pl = m_tmpProxyCategory->m_ProxyCategory.ElementAt(m_nList);
	proxyinfo.m_Proxy = "http://";

	if(proxyinfo.DoModal() == IDOK)
	{
		proxyinfo.m_Proxy.TrimLeft();
		proxyinfo.m_Proxy.TrimRight();

		if(proxyinfo.m_ProxyName.IsEmpty())
			proxyinfo.m_ProxyName = proxyinfo.m_Proxy;

		int i; LIST_GET_INSERT_POS(m_ProxyList,&i);
		m_ProxyList.InsertItem(i, proxyinfo.m_ProxyName);
		m_ProxyList.SetItemText(i, 1, proxyinfo.m_Proxy);
		CString str;
		LOADSTR(str ,IDS_SP_INVALID + proxyinfo.m_Speed);
		m_ProxyList.SetItemText(i, 2, str);
		m_ProxyList.EnsureVisible(i, FALSE);
		m_ProxyList.SetFocus();

		CProxyItem* pi;
		pi = new CProxyItem;
		pi->m_nProxySpeed = proxyinfo.m_Speed;
		pi->m_strProxy = proxyinfo.m_Proxy;
		pi->m_strProxyName = proxyinfo.m_ProxyName;
		pl->m_Proxies.InsertAt(i, pi);
	}
}

void CSetProxy::OnProxyDel() 
{
	// TODO: Add your control notification handler code here
	POSITION pos = m_ProxyList.GetFirstSelectedItemPosition();
	if(pos!=NULL)
	{
		int nItem = m_ProxyList.GetNextSelectedItem(pos);
		m_ProxyList.DeleteItem(nItem);
		delete m_tmpProxyCategory->m_ProxyCategory.ElementAt(m_nList)->m_Proxies.GetAt(nItem);
		m_tmpProxyCategory->m_ProxyCategory.ElementAt(m_nList)->m_Proxies.RemoveAt(nItem);
		CProxyList* pl=m_tmpProxyCategory->m_ProxyCategory.GetAt(m_nList);

		if(nItem<m_ProxyList.GetItemCount())
		{
			m_ProxyList.SetItemState(nItem, LVIS_SELECTED,LVIS_SELECTED);
			if(!pl->m_bIsWebProxy)
				m_SelProxy = m_tmpProxyCategory->m_ProxyCategory.ElementAt(m_nList)->m_Proxies.ElementAt(nItem)->m_strProxy;
			else
				m_SelWebProxy = m_tmpProxyCategory->m_ProxyCategory.ElementAt(m_nList)->m_Proxies.ElementAt(nItem)->m_strProxy;
		}
		else
		{
			if(!pl->m_bIsWebProxy)
				m_SelProxy = "";
			else
				m_SelWebProxy = "";
		}
	}
	
}

void CSetProxy::OnEndlabeleditProxyList(NMHDR* pNMHDR, LRESULT* pResult) 
{
	LV_DISPINFO* pDispInfo = (LV_DISPINFO*)pNMHDR;
	// TODO: Add your control notification handler code here
	CString str;
	m_ProxyList.GetEditControl()->GetWindowText(str);
	str.TrimLeft();
	str.TrimRight();

	m_ProxyList.SetItemText(pDispInfo->item.iItem,0,str);
	
	m_tmpProxyCategory->m_ProxyCategory.ElementAt(m_nList)->m_Proxies.ElementAt(pDispInfo->item.iItem)->m_strProxyName = str;

	*pResult = 0;
}

void CSetProxy::OnDeltaposSpin1(NMHDR* pNMHDR, LRESULT* pResult) 
{
	NM_UPDOWN* pNMUpDown = (NM_UPDOWN*)pNMHDR;
	// TODO: Add your control notification handler code here
	POSITION pos = m_ProxyList.GetFirstSelectedItemPosition();
	int nItem = -1, newItem;
	if(pos!=NULL)
	{
		nItem = m_ProxyList.GetNextSelectedItem(pos);
		if(pNMUpDown->iDelta<0)
			newItem = nItem -1;
		else
			newItem = nItem + 1;
		int n = m_ProxyList.GetItemCount();
		if(newItem>=0 && newItem<n)
		{
			CString str = m_ProxyList.GetItemText(nItem,0);
			CString str2 = m_ProxyList.GetItemText(nItem,1);
			m_ProxyList.DeleteItem(nItem);

			m_ProxyList.InsertItem(newItem, str);
			m_ProxyList.SetItemText(newItem, 1, str2);
			LOADSTR(str ,IDS_SP_INVALID + m_tmpProxyCategory->m_ProxyCategory.ElementAt(m_nList)->m_Proxies.ElementAt(nItem)->m_nProxySpeed);
			m_ProxyList.SetItemText(newItem, 2, str);
			m_ProxyList.SetItemState(newItem, LVIS_SELECTED, LVIS_SELECTED);
			m_ProxyList.EnsureVisible(newItem, FALSE);

			int tmp;
			CString strtmp;
			strtmp = m_tmpProxyCategory->m_ProxyCategory.ElementAt(m_nList)->m_Proxies.ElementAt(nItem)->m_strProxyName;
			m_tmpProxyCategory->m_ProxyCategory.ElementAt(m_nList)->m_Proxies.ElementAt(nItem)->m_strProxyName = m_tmpProxyCategory->m_ProxyCategory.ElementAt(m_nList)->m_Proxies.ElementAt(newItem)->m_strProxyName;
			m_tmpProxyCategory->m_ProxyCategory.ElementAt(m_nList)->m_Proxies.ElementAt(newItem)->m_strProxyName = strtmp;

			strtmp = m_tmpProxyCategory->m_ProxyCategory.ElementAt(m_nList)->m_Proxies.ElementAt(nItem)->m_strProxy;
			m_tmpProxyCategory->m_ProxyCategory.ElementAt(m_nList)->m_Proxies.ElementAt(nItem)->m_strProxy = m_tmpProxyCategory->m_ProxyCategory.ElementAt(m_nList)->m_Proxies.ElementAt(newItem)->m_strProxy;
			m_tmpProxyCategory->m_ProxyCategory.ElementAt(m_nList)->m_Proxies.ElementAt(newItem)->m_strProxy = strtmp;
	
			tmp = m_tmpProxyCategory->m_ProxyCategory.ElementAt(m_nList)->m_Proxies.ElementAt(nItem)->m_nProxySpeed;
			m_tmpProxyCategory->m_ProxyCategory.ElementAt(m_nList)->m_Proxies.ElementAt(nItem)->m_nProxySpeed = m_tmpProxyCategory->m_ProxyCategory.ElementAt(m_nList)->m_Proxies.ElementAt(newItem)->m_nProxySpeed;
			m_tmpProxyCategory->m_ProxyCategory.ElementAt(m_nList)->m_Proxies.ElementAt(newItem)->m_nProxySpeed = tmp;
		}
	}

	*pResult = 0;
}

void CSetProxy::OnDeltaposSpin2(NMHDR* pNMHDR, LRESULT* pResult) 
{
	NM_UPDOWN* pNMUpDown = (NM_UPDOWN*)pNMHDR;
	// TODO: Add your control notification handler code here
	POSITION pos = m_CateList.GetFirstSelectedItemPosition();
	int nItem = -1, newItem;
	if(pos!=NULL)
	{
		nItem = m_CateList.GetNextSelectedItem(pos);
		if(pNMUpDown->iDelta<0)
			newItem = nItem -1;
		else
			newItem = nItem + 1;
		int n = m_CateList.GetItemCount();
		if(newItem>=0 && newItem<n)
		{
			CString str = m_CateList.GetItemText(nItem,0);
			CProxyList* pl;
			pl = m_tmpProxyCategory->m_ProxyCategory.GetAt(nItem);
			m_tmpProxyCategory->m_ProxyCategory.SetAt(nItem, m_tmpProxyCategory->m_ProxyCategory.GetAt(newItem));
			m_tmpProxyCategory->m_ProxyCategory.SetAt(newItem, pl);

			int icon;
			if(pl->m_bIsWebProxy)
				icon=0;
			else
				icon=1;
			m_CateList.DeleteItem(nItem);

			m_bUnUpdateProxy = TRUE;
			m_CateList.InsertItem(newItem, str, icon);
			m_CateList.SetItemState(newItem, LVIS_SELECTED, LVIS_SELECTED);
			m_CateList.EnsureVisible(newItem, FALSE);
			m_nList = newItem;
		}
	}

	*pResult = 0;
}

void CSetProxy::OnModifyproxy() 
{
	// TODO: Add your control notification handler code here
	POSITION pos = m_ProxyList.GetFirstSelectedItemPosition();
	if(pos!=NULL)
	{

⌨️ 快捷键说明

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