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

📄 selecturl.cpp

📁 1.MyIE开源工程协议 MyIE开源工程遵循GNU通用公共许可证GPL(GNU General Public License)开发,任何人都可以永久免费安装使用,在你下载和使用MyIE源代码前,请
💻 CPP
字号:
// SelectURL.cpp : implementation file
//

#include "stdafx.h"
#include "MyIE.h"
#include "SelectURL.h"
#include "mainfrm.h"
#include "wininet.h"//for INTERNET_MAX_PATH_LENGTH
#include "InputDlg.h"

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

/////////////////////////////////////////////////////////////////////////////
// CSelectURL dialog


CSelectURL::CSelectURL(CWnd* pParent /*=NULL*/)
	: CDialog(CSelectURL::IDD, pParent)
{
	//{{AFX_DATA_INIT(CSelectURL)
	//}}AFX_DATA_INIT
	m_nUrlType = 0;
}


void CSelectURL::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CSelectURL)
	DDX_Control(pDX, IDC_TAB1, m_tab);
	DDX_Control(pDX, IDC_LIST, m_list);
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CSelectURL, CDialog)
	//{{AFX_MSG_MAP(CSelectURL)
	ON_BN_CLICKED(IDC_SELECT_ALL, OnSelectAll)
	ON_BN_CLICKED(IDC_SELECT_NONE, OnSelectNone)
	ON_BN_CLICKED(IDC_OFFLINE, OnOffline)
	ON_NOTIFY(NM_DBLCLK, IDC_LIST, OnDblclkList)
	ON_BN_CLICKED(IDC_DEL_CURRENT, OnDelCurrent)
	ON_BN_CLICKED(IDC_DEL_URL, OnDelUrl)
	ON_NOTIFY(TCN_SELCHANGE, IDC_TAB1, OnSelchangeTab)
	ON_BN_CLICKED(IDC_EDIT_TITLE, OnEditTitle)
	ON_BN_CLICKED(IDC_EDIT_URL, OnEditUrl)
	ON_NOTIFY(NM_RDBLCLK, IDC_LIST, OnRdblclkList)
	ON_BN_CLICKED(IDC_OPEN_CURRENT, OnOpenCurrent)
	ON_BN_CLICKED(IDC_OPEN_SELECTED, OnOpenSelected)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CSelectURL message handlers
void CSelectURL::LoadLastVisiting()
{
	char state[10]="state",name[9]="name",url[8]="url"; // x+5
	CString filename = theApp.m_strUser+"LastVisit.ini";
	int i=0,nState;
	char tmp[INTERNET_MAX_PATH_LENGTH];
	BOOL r = TRUE;
	CString strUrl;
	while(r)
	{
		itoa(i, state+5, 10);
		itoa(i, name+4, 10);
		itoa(i, url+3, 10);
		nState = ::GetPrivateProfileInt("LastVisit", state, 0, filename);
		r = ::GetPrivateProfileString("LastVisit", url, NULL, tmp, INTERNET_MAX_PATH_LENGTH, filename);
		if (r)
		{
			strUrl = tmp;
			::GetPrivateProfileString("LastVisit", name, NULL, tmp, INTERNET_MAX_PATH_LENGTH, filename);
			m_list.InsertItem(i, tmp, nState);//the name maybe null
			m_list.SetItemText(i,1,strUrl);
		}
		i++;
	}
	m_list.AddSortIndexData();
}

void CSelectURL::LoadLastClosed()
{
	char name[9]="name",url[8]="url"; // x+5
	CString filename = theApp.m_strUser+"LastClose.ini";
	int i=0;
	char tmp[INTERNET_MAX_PATH_LENGTH];
	BOOL r = TRUE;
	while(r)
	{
		itoa(i, name+4, 10);
		itoa(i, url+3, 10);
		r = GetPrivateProfileString("LastClose", name, NULL, tmp, INTERNET_MAX_PATH_LENGTH, filename);
		if (r)
		{
			m_list.InsertItem(0, tmp,TI_NO);
			r = ::GetPrivateProfileString("LastClose", url, NULL, tmp, INTERNET_MAX_PATH_LENGTH, filename);
			if (r)
				m_list.SetItemText(0,1,tmp);
		}
		i++;
	}
	m_list.AddSortIndexData();
}

void CSelectURL::LoadVisting()
{
	CChildFrame* tcf;
	int n = pmf->m_wndTab.GetItemCount();
	pmf->m_nWin = n;
	TCITEM TabCtrlItem;
	TabCtrlItem.mask = TCIF_PARAM;

	for( int i=0; i<n; i++)
	{
		pmf->m_wndTab.GetItem(i, &TabCtrlItem);
		tcf = ((CChildFrame*)TabCtrlItem.lParam);
		if(tcf != NULL && tcf->m_pView!=NULL)
		{
			if(!tcf->m_pView->m_lpszUrl.IsEmpty() && !tcf->m_pView->m_bToClose)
			{
				if(tcf->m_strStickName.GetLength()>0)
					m_list.InsertItem(i, tcf->m_strStickName, tcf->m_pView->m_nOldIcon);
				else
					m_list.InsertItem(i, tcf->m_strTitle, tcf->m_pView->m_nOldIcon);
				m_list.SetItemText(i,1,tcf->m_pView->m_lpszUrl);
			}
		}
	}
	m_list.AddSortIndexData();
}

void CSelectURL::LoadClosed()
{
	//fill undo close
	int nCur = pmf->m_nUndoStart;
	while(nCur != pmf->m_nUndoEnd)
	{
		m_list.InsertItem(0, pmf->m_strUndoName[nCur],TI_NO);
		m_list.SetItemText(0,1,pmf->m_strUndoURL[nCur]);
		nCur++;
		if (nCur>=MAX_UNDO)
			nCur -= MAX_UNDO;
	}
	m_list.AddSortIndexData();
}

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

	try{
	m_list.SetExtendedStyle(m_list.GetExtendedStyle()| LVS_EX_FULLROWSELECT|LVS_EX_CHECKBOXES|LVS_EX_HEADERDRAGDROP);
	//setup list ctrl
	CRect rect;
	m_list.GetWindowRect(&rect);
	CString str;
	LOADSTR(str ,IDS_TITLE);
	m_list.InsertColumn(0, str);
	m_list.SetColumnWidth(0, 200);
	LOADSTR(str ,IDS_URL);
	m_list.InsertColumn(1, str);
	m_list.SetColumnWidth(1, rect.Width()-230);
	//
	CImageList img;
	img.Create(pmf->m_wndTab.GetImageList());
	m_list.SetImageList(&img, LVSIL_SMALL);
	img.Detach();

	//load last visit
	LOADSTR(str ,IDS_LAST_VISITING_PAGES);
	m_tab.InsertItem(0, str);
	LOADSTR(str ,IDS_LAST_CLOSED_PAGES);
	m_tab.InsertItem(1, str);
	LOADSTR(str ,IDS_VISITING_PAGES);
	m_tab.InsertItem(2, str);
	LOADSTR(str ,IDS_CLOSED_PAGES);
	m_tab.InsertItem(3, str);
	//
	m_tab.SetCurSel(m_nUrlType);
	LoadNewUrl();
	//
	if (m_nUrlType==0)
		OnSelectAll();
	DWORD dwRet = _RegGetDword(HKEY_CURRENT_USER,
		"Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings",
		"GlobalUserOffline"
		);
	CheckDlgButton(IDC_OFFLINE, dwRet);

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

void CSelectURL::OkClosed()
{
	int i,count = m_list.GetItemCount();

	pmf->m_nUndoStart = 0;
	pmf->m_nUndoEnd = 0;
	CString strTitle;
	CString strUrl;
	for (i=count-1;i>=0;i--)
	{
		strTitle = m_list.GetItemText(i,0);
		strUrl = m_list.GetItemText(i,1);
		pmf->m_strUndoName[pmf->m_nUndoEnd] = strTitle;
		pmf->m_strUndoURL[pmf->m_nUndoEnd] = strUrl;
		pmf->m_nUndoEnd = (pmf->m_nUndoEnd+1)%MAX_UNDO;
		if(pmf->m_nUndoStart == pmf->m_nUndoEnd)
			pmf->m_nUndoStart = (pmf->m_nUndoStart + 1)%MAX_UNDO;
	}
	pmf->UpdateUndoMenu();
}

void CSelectURL::OnOK() 
{
	// TODO: Add extra validation here
	m_nUrlType = m_tab.GetCurSel();
	if (m_nUrlType!=2)
		OpenSelected();
	switch (m_nUrlType)
	{
	case 2:	pmf->SaveLastVisit(1); break;
	case 3: OkClosed();	break;
	}
	//
	CDialog::OnOK();
}

void CSelectURL::OnSelectNone() 
{
	// TODO: Add your control notification handler code here
	int i,count = m_list.GetItemCount();
	for(i=0;i<count;i++)
		m_list.SetCheck(i,FALSE);
}

void CSelectURL::OnSelectAll() 
{
	// TODO: Add your control notification handler code here
	int i,count = m_list.GetItemCount();
	for(i=0;i<count;i++)
		m_list.SetCheck(i,TRUE);
}

void CSelectURL::OnOffline() 
{
	// TODO: Add your control notification handler code here
	pmf->SendMessage(WM_COMMAND,	ID_FILE_WORKOFFLINE);
}

void CSelectURL::OnEditTitle() 
{
	// TODO: Add your control notification handler code here
	POSITION pos = m_list.GetFirstSelectedItemPosition();
	int current = m_list.GetNextSelectedItem(pos);
	if (current<0)
		return;
	CInputDlg dlg;
	CString strMsg;
	LOADSTR(strMsg ,IDS_INPUT_TITLE);
	dlg.m_strMsg = strMsg;
	CString strData = m_list.GetItemText(current,0);
	dlg.m_strOutput = strData;
	
	if(dlg.DoModal() == IDOK)
		m_list.SetItemText(current,0,dlg.m_strOutput);
}

void CSelectURL::OnEditUrl() 
{
	// TODO: Add your control notification handler code here
	POSITION pos = m_list.GetFirstSelectedItemPosition();
	int current = m_list.GetNextSelectedItem(pos);
	if (current<0)
		return;
	CInputDlg dlg;
	CString strMsg;
	LOADSTR(strMsg ,IDS_INPUT_URL);
	dlg.m_strMsg = strMsg;
	CString strData = m_list.GetItemText(current,1);
	dlg.m_strOutput = strData;
	
	if(dlg.DoModal() == IDOK)
		m_list.SetItemText(current,1,dlg.m_strOutput);
}

void CSelectURL::OnDblclkList(NMHDR* pNMHDR, LRESULT* pResult) 
{
	// TODO: Add your control notification handler code here
	OnOpenCurrent();
	*pResult = 0;
}

void CSelectURL::OnRdblclkList(NMHDR* pNMHDR, LRESULT* pResult) 
{
	// TODO: Add your control notification handler code here
	NM_LISTVIEW* pNMListView = (NM_LISTVIEW*) pNMHDR;
	if (pNMListView->iSubItem==0)
		OnEditTitle();
	else
		OnEditUrl();
	*pResult = 0;
}

void CSelectURL::OnDelCurrent() 
{
	// TODO: Add your control notification handler code here
	POSITION pos = m_list.GetFirstSelectedItemPosition();
	int current = m_list.GetNextSelectedItem(pos);
	if (current<0)
		return;
	//
	if (m_nUrlType==2)
	{
		TCITEM TabCtrlItem;
		TabCtrlItem.mask = TCIF_PARAM;
		CChildFrame* tcf;
		pmf->m_wndTab.GetItem(current, &TabCtrlItem);
		tcf = ((CChildFrame*)TabCtrlItem.lParam);
		CLOSE_PAGE(tcf);
	}
	//
	m_list.DeleteItem(current);
	LIST_FOCUS_POS(m_list, current);
}

void CSelectURL::OnDelUrl() 
{
	// TODO: Add your control notification handler code here
	int i,count = m_list.GetItemCount();
	if (count<=0)
		return;
	//
	if (m_nUrlType==2)
	{
		TCITEM TabCtrlItem;
		TabCtrlItem.mask = TCIF_PARAM;
		CChildFrame* tcf;

		int i,count = m_list.GetItemCount();
		int index=0;
		for (i=0;i<count;i++)
		{
			if (m_list.GetCheck(i))
			{
				pmf->m_wndTab.GetItem(i, &TabCtrlItem);
				tcf = ((CChildFrame*)TabCtrlItem.lParam);
				CLOSE_PAGE(tcf);
			}
		}
	}
	//
	for (i=count-1;i>=0;i--)
	{
		if (m_list.GetCheck(i))
			m_list.DeleteItem(i);
	}
}

void CSelectURL::OnSelchangeTab(NMHDR* pNMHDR, LRESULT* pResult) 
{
	// TODO: Add your control notification handler code here
	m_nUrlType = m_tab.GetCurSel();
	LoadNewUrl();
	//
	*pResult = 0;
}

void CSelectURL::LoadNewUrl()
{
	m_list.DeleteAllItems();
	switch(m_nUrlType)
	{
	case 0:	LoadLastVisiting(); break;
	case 1:	LoadLastClosed(); break;
	case 2:	LoadVisting(); break;
	case 3:	LoadClosed(); break;
	}
}

void CSelectURL::OnOpenCurrent() 
{
	// TODO: Add your control notification handler code here
	POSITION pos = m_list.GetFirstSelectedItemPosition();
	int current = m_list.GetNextSelectedItem(pos);
	if (current<0)
		return;
	if (m_nUrlType==2)//active current
	{
		TCITEM TabCtrlItem;
		TabCtrlItem.mask = TCIF_PARAM;
		CChildFrame* tcf;
		pmf->m_wndTab.GetItem(current, &TabCtrlItem);
		tcf = ((CChildFrame*)TabCtrlItem.lParam);
		if(tcf != NULL)
		{
			pmf->MDIActivate(tcf);
			pmf->m_wndTab.SetCurSel(current);
		}
	}
	else//open
	{
		CString url = m_list.GetItemText(current,1);
		CChildFrame *tcf = pmf->NewChildWindow(0);
		if(tcf && tcf->m_pView)
		{
			tcf->m_pView->ToNavigate(url, 0, NULL);
			//
			LVITEMA item;
			item.mask = LVIF_IMAGE ;
			item.iSubItem = 0;
			item.iItem = current;
			m_list.GetItem(&item);
			if (item.iImage ==4)
				tcf->m_bLock = TRUE;
		}
	}
}

void CSelectURL::OpenSelected()
{
	BOOL bTemp = pmf->m_nNewSequence;
	pmf->m_nNewSequence = 0;
	CChildFrame *tcf;
	CString url;
	//
	LVITEMA item;
	item.mask = LVIF_IMAGE ;
	item.iSubItem = 0;
	//
	int count = m_list.GetItemCount();
	for (int i=0;i<count;i++)
	{
		if (m_list.GetCheck(i))
		{
			url = m_list.GetItemText(i,1);
			tcf = pmf->NewChildWindow(0);
			if(tcf && tcf->m_pView)
			{
				tcf->m_pView->ToNavigate(url, 0, NULL);
				//
				item.iItem = i;
				m_list.GetItem(&item);
				if (item.iImage ==4)
					tcf->m_bLock = TRUE;
			}
		}
	}
	pmf->m_nNewSequence  = bTemp;
}

void CSelectURL::OnOpenSelected() 
{
	// TODO: Add your control notification handler code here
	if (m_nUrlType==2)
		return;
	OpenSelected();
	OnCancel();	
}

⌨️ 快捷键说明

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