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

📄 orggroupdlg.cpp

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

#include "stdafx.h"
#include "GreenBrowser.h"
#include "MainFrm.h"
#include "OrgGroupDlg.h"
#include "GroupUrlDlg.h"

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

#define	INTERNET_MAX_PATH_LENGTH	2048
//#pragma optimize( "s", on )

/////////////////////////////////////////////////////////////////////////////
// COrgGroupDlg dialog


COrgGroupDlg::COrgGroupDlg(CWnd* pParent /*=NULL*/)
	: CDialog(COrgGroupDlg::IDD, pParent)
{
	//{{AFX_DATA_INIT(COrgGroupDlg)
	//}}AFX_DATA_INIT
	m_pDragImage = NULL;

}


void COrgGroupDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(COrgGroupDlg)
	DDX_Control(pDX, IDC_CLOSE_ALL_BEFORE_NEW_GROUP, m_CloseAllBeforeNewGroup);
	DDX_Control(pDX, IDC_SHOW_GROUP_MEMBER, m_GroupShowMember);
	DDX_Control(pDX, IDC_INSERT, m_btnInsert);
	DDX_Control(pDX, IDC_URL_LIST, m_UrlList);
	DDX_Control(pDX, IDC_GROUP_LIST, m_GroupList);
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(COrgGroupDlg, CDialog)
	//{{AFX_MSG_MAP(COrgGroupDlg)
	ON_NOTIFY(LVN_ITEMCHANGED, IDC_GROUP_LIST, OnSelChanging)
	ON_BN_CLICKED(IDC_NEW_GROUP, OnNewGroup)
	ON_BN_CLICKED(IDC_DEL_GROUP, OnDelGroup)
	ON_BN_CLICKED(IDC_DELETE, OnDelete)
	ON_NOTIFY(LVN_ENDLABELEDIT, IDC_GROUP_LIST, OnEndlabeleditGroupList)
	ON_BN_CLICKED(IDC_INSERT, OnInsert)
	ON_BN_CLICKED(IDC_UPDATE, OnUpdate)
	ON_NOTIFY(UDN_DELTAPOS, IDC_SPIN1, OnDeltaposSpin1)
	ON_NOTIFY(UDN_DELTAPOS, IDC_SPIN2, OnDeltaposSpin2)
	ON_NOTIFY(NM_CLICK, IDC_GROUP_LIST, OnClickGroupList)
	ON_NOTIFY(LVN_BEGINDRAG, IDC_URL_LIST, OnBegindragUrlList)
	ON_WM_LBUTTONUP()
	ON_WM_MOUSEMOVE()
	ON_NOTIFY(NM_DBLCLK, IDC_URL_LIST, OnDblclkUrlList)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// COrgGroupDlg message handlers

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

	m_bInit = TRUE;
	// TODO: Add extra initialization here
	m_GroupList.SetExtendedStyle(m_GroupList.GetExtendedStyle()|LVS_EX_CHECKBOXES | LVS_EX_FULLROWSELECT);
	m_UrlList.SetExtendedStyle(m_UrlList.GetExtendedStyle() | LVS_EX_FULLROWSELECT|LVS_EX_CHECKBOXES);
	//setup list ctrl
	CRect rect;
	m_GroupList.InsertColumn(0,"");
	m_GroupList.GetWindowRect(rect);
	m_GroupList.SetColumnWidth(0, rect.Width()-25);

	CString str;
	LOADSTR(str ,IDS_NAME);
	m_UrlList.InsertColumn(0,str);
	m_UrlList.GetWindowRect(rect);
	m_UrlList.SetColumnWidth(0, 100);
	LOADSTR(str ,IDS_URL);
	m_UrlList.InsertColumn(1,str);
	m_UrlList.SetColumnWidth(1, rect.Width()-125);

	//load group list
	m_strStartGroup = pmf->m_strStartGroup;

	int i=0;
	CString strMenu;
	for (i=0; i<=pmf->m_astrGroup.GetUpperBound(); i++)
	{
		strMenu = pmf->m_astrGroup.GetAt(i);
		strMenu = strMenu.Left(strMenu.GetLength()-4);
		m_GroupList.InsertItem(i, strMenu);
		if(strMenu == m_strStartGroup)
		{
			m_GroupList.SetCheck(i);
		}
	}

	m_GroupList.SetItemState(0, LVIS_SELECTED, LVIS_SELECTED);
	
	m_nLastSelItemID = -1;
	FillUrlList(0);
	if(i==0)
		m_btnInsert.EnableWindow(FALSE);

	m_bInit = FALSE;

	m_GroupShowMember.SetCheck( pmf->m_bGroupMenuShowMember );
	m_CloseAllBeforeNewGroup.SetCheck( pmf->m_bCloseAllBeforeNewGroup);

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

void COrgGroupDlg::FillUrlList(int index)
{
	try{
	if(m_nLastSelItemID == index)
		return;
	if(m_nLastSelItemID>=0)
		SaveUrlList(m_nLastSelItemID);

	m_nLastSelItemID = index;
	//remove all first
	m_UrlList.DeleteAllItems();
	m_UrlList.SetItemCount(0);

	if(index<0)
		return;
	CString filename;
	filename = m_GroupList.GetItemText(index, 0);
	filename = theApp.m_strGroupPath + filename+".cgp";

	char state[10]="state",name[9]="name",url[8]="url",download[13]="download"; // x+5
	int i=0,nState;
	char tmp[INTERNET_MAX_PATH_LENGTH];
	BOOL r = TRUE;
	DWORD dwProperty;
	while(r)
	{
		itoa(i, state+5, 10);
		itoa(i, name+4, 10);
		itoa(i, url+3, 10);
		itoa(i, download+8, 10);
		nState = ::GetPrivateProfileInt("Group", state, 1, filename);
		r = ::GetPrivateProfileString("Group", name, NULL, tmp, INTERNET_MAX_PATH_LENGTH, filename);
		if (r)
		{
			m_UrlList.InsertItem(i, tmp);
			m_UrlList.SetCheck(i, nState);
			r = ::GetPrivateProfileString("Group", url, NULL, tmp, INTERNET_MAX_PATH_LENGTH, filename);
			if (r)
				m_UrlList.SetItemText(i,1,tmp);
			dwProperty = ::GetPrivateProfileInt("Group", download, DEFAULT_PROPERTY, filename);
			m_UrlList.SetItemData(i,dwProperty);
		}
		i++;
	}
	}catch(...){}
}

void COrgGroupDlg::SaveUrlList(int index)
{
	try{
	if(index<0)
		return;

	CString filename;
	filename = m_GroupList.GetItemText(index, 0);
	if(filename.IsEmpty())
		return;

	char state[10]="state",name[9]="name",url[8]="url",download[13]="download"; // x+5
	char num[15];
	filename = theApp.m_strGroupPath + filename+".cgp";
	int n = m_UrlList.GetItemCount();
	WritePrivateProfileSection("Group", NULL, filename);
	for( int i=0; i<n; i++)
	{
		itoa(i, state+5, 10);
		itoa(i, name+4, 10);
		itoa(i, url+3, 10);
		itoa(i, download+8, 10);
		if (m_UrlList.GetCheck(i)==FALSE)
		{
			itoa( 0, num, 10);
			::WritePrivateProfileString("Group", state, num, filename);
		}
		::WritePrivateProfileString("Group", name, m_UrlList.GetItemText(i,0), filename);
		::WritePrivateProfileString("Group", url, m_UrlList.GetItemText(i,1), filename);
		if (m_UrlList.GetItemData(i) != DEFAULT_PROPERTY)
		{
			ultoa( m_UrlList.GetItemData(i), num, 10);
			::WritePrivateProfileString("Group", download, num, filename);
		}
	}
	}catch(...){}
}

void COrgGroupDlg::OnSelChanging(NMHDR* pNMHDR, LRESULT* pResult) 
{
	if(m_bInit)
		return;

	NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;
	// TODO: Add your control notification handler code here
	int i = m_GroupList.GetSelectedCount();
	if(i>0)
	{
		POSITION pos = m_GroupList.GetFirstSelectedItemPosition();
		int item = m_GroupList.GetNextSelectedItem(pos);
		FillUrlList(item);
		m_btnInsert.EnableWindow(1);
	}
	else
	{
		FillUrlList(-1);
		m_btnInsert.EnableWindow(0);
	}

	*pResult = 0;
}

void COrgGroupDlg::OnNewGroup() 
{
	// TODO: Add your control notification handler code here
	CString def, str;
	LOADSTR(def ,IDS_NEW_GROUP);
	str = def;
	
	char si[5]; int i=0;
	LVFINDINFO info;
	info.flags = LVFI_STRING;
	info.psz = str;
	
	while (m_GroupList.FindItem(&info) != -1)
	{
		i++;
		itoa(i, si, 10);
		str = def + " (";
		str += si;
		str += ")";
		info.psz = str;
	}
	
	i = m_GroupList.GetItemCount();
	m_GroupList.InsertItem(i, str);
	m_GroupList.SetFocus();
	m_GroupList.SetItemState(i, LVIS_SELECTED, LVIS_SELECTED);

	CString filename;
	filename = theApp.m_strGroupPath + str+".cgp";

	HANDLE hfile = CreateFile(filename, GENERIC_READ, FILE_SHARE_READ, NULL, CREATE_NEW, FILE_ATTRIBUTE_NORMAL, NULL);
	CloseHandle(hfile);

	m_GroupList.EnsureVisible(i,FALSE);
	m_GroupList.EditLabel(i);
}

void COrgGroupDlg::OnDelGroup() 
{
	// TODO: Add your control notification handler code here
	int i = m_GroupList.GetSelectedCount();
	if(i>0)
	{
		POSITION pos = m_GroupList.GetFirstSelectedItemPosition();
		int item = m_GroupList.GetNextSelectedItem(pos);
		if(MSGBOX(IDS_CONFIRM_DEL, MB_YESNO|MB_ICONQUESTION) == IDYES)
		{
			BOOL rem = FALSE;
			CString filename;
			filename = m_GroupList.GetItemText(item, 0);
			if(filename == m_strStartGroup)
				rem = TRUE;
			filename = theApp.m_strGroupPath + filename+".cgp";
			if(DeleteFile(filename))
			{
				m_nLastSelItemID = -1;
				m_GroupList.DeleteItem(item);
				m_UrlList.DeleteAllItems();
				if(rem)
					m_strStartGroup = "";
			}
			//
			LIST_FOCUS_POS(m_GroupList, item);
		}
	}
}

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

	//rename file
	CString filename;
	BOOL ren = FALSE;
	filename = m_GroupList.GetItemText(pDispInfo->item.iItem, 0);
	if(filename == m_strStartGroup)
		ren = TRUE;
	filename = theApp.m_strGroupPath + filename+".cgp";
	if(MoveFile(filename, theApp.m_strGroupPath + str + ".cgp"))
	{
		m_GroupList.SetItemText(pDispInfo->item.iItem,0,str);
		if(ren)
			m_strStartGroup = str;
	}
	
	*pResult = 0;
}

void COrgGroupDlg::OnOK() 
{
	// TODO: Add extra validation here
	int i = m_GroupList.GetSelectedCount();
	if(i>0)
	{
		POSITION pos = m_GroupList.GetFirstSelectedItemPosition();
		int item = m_GroupList.GetNextSelectedItem(pos);
		SaveUrlList(item);
	}
	pmf->m_strStartGroup = m_strStartGroup;
	pmf->m_bGroupMenuShowMember = m_GroupShowMember.GetCheck();
	pmf->m_bCloseAllBeforeNewGroup = m_CloseAllBeforeNewGroup.GetCheck();

	//get order
	CString strItem;
	CString strOrder;
	for (i=0;i<m_GroupList.GetItemCount();i++)

⌨️ 快捷键说明

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