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

📄 addfiledlg.cpp

📁 所有压缩格式的压缩解压缩。
💻 CPP
字号:
// AddFileDlg.cpp : implementation file
//

#include "stdafx.h"
#include "Compress.h"
#include "AddFileDlg.h"
#include "dlgs.h"

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

/////////////////////////////////////////////////////////////////////////////
// CAddFileDlg

IMPLEMENT_DYNAMIC(CAddFileDlg, CFileDialog)

CAddFileDlg::CAddFileDlg() :
		CFileDialog(TRUE,NULL,NULL,
		OFN_HIDEREADONLY | OFN_ALLOWMULTISELECT |
		OFN_FILEMUSTEXIST | OFN_PATHMUSTEXIST |
		OFN_ENABLEHOOK | OFN_EXPLORER |
		OFN_OVERWRITEPROMPT,
		NULL,NULL)
{
	CString title;
	title.LoadString(IDS_ADDDLG_TITLE);
	m_ofn.lpstrTitle=title;

	SetTemplate(NULL,"AddFileDlg");

	m_pParent=NULL;
	m_pListCtrl=NULL;
}


BEGIN_MESSAGE_MAP(CAddFileDlg, CFileDialog)
	//{{AFX_MSG_MAP(CAddFileDlg)
	ON_BN_CLICKED(IDC_CHECK_ALL, OnCheckAll)
	ON_BN_CLICKED(IDC_UNCHECK_ALL, OnUncheckAll)
	ON_BN_CLICKED(IDC_CHECK_SEL, OnCheckSel)
	ON_BN_CLICKED(IDC_UNCHECK_SEL, OnUncheckSel)
	//}}AFX_MSG_MAP
	ON_BN_CLICKED(IDOK,OnClickOK)
	ON_BN_CLICKED(IDCANCEL,OnClickCancel)
END_MESSAGE_MAP()

void CAddFileDlg::OnInitDone()
{
	CFileDialog::OnInitDone();

	if (!m_pParent)	m_pParent=(CDialog*)GetParent();

	HideControl(IDOK);
	HideControl(IDCANCEL);
	HideControl(edt1);
	HideControl(stc3);
	HideControl(cmb1);
	HideControl(stc2);

	CRect rc;
	CWnd *pListBox=m_pParent->GetDlgItem(lst1);
	pListBox->GetWindowRect(&rc);
	m_pParent->ScreenToClient(&rc);
	rc.bottom+=60;
	pListBox->MoveWindow(&rc);
}
void CAddFileDlg::OnClickOK()
{
	//////////////////////////////////////////////////////////
	//取得选择的文件及文件夹
	LPITEMIDLIST pidl,pPathIdl,pFullIdl;
	CShellPidl sp;
	SHFILEINFO sfi;
	char fname[MAX_PATH];
	int nItem,Count,size;

	pPathIdl=sp.CreatePidl(MAX_PATH);
	size=m_pParent->SendMessage(CDM_GETFOLDERIDLIST,
						MAX_PATH,
						(LPARAM)(LPVOID)pPathIdl);
	if (size>MAX_PATH)
	{
		CoTaskMemFree(pPathIdl);
		pPathIdl=sp.CreatePidl(size);
		m_pParent->SendMessage(CDM_GETFOLDERIDLIST,
						size,
						(LPARAM)(LPVOID)pPathIdl);
	}

	Count=m_pListCtrl->GetItemCount();
	for (nItem=0;nItem<Count;nItem++)
	{
		if (m_pListCtrl->GetCheck(nItem))
		{
			pidl=(LPITEMIDLIST)m_pListCtrl->GetItemData(nItem);
			pFullIdl=sp.ConcatPidls(pPathIdl,pidl);

			SHGetPathFromIDList(pFullIdl,fname);
			SHGetFileInfo((LPCTSTR)pFullIdl,0,&sfi,
						sizeof(SHFILEINFO),
						SHGFI_PIDL | SHGFI_ATTRIBUTES);
			CoTaskMemFree(pFullIdl);

			if (sfi.dwAttributes & SFGAO_FOLDER)
				m_Folders.Add(fname);
			else
				m_Files.Add(fname);
		}
	}
	CoTaskMemFree(pPathIdl);

	///////////////////////////////////////////////////////////////////
	//取得其它选项
	int sel;
	
	sel=m_pCompressLevel->GetCurSel();

	if (sel==0) m_iCompressLevel=CX_DEFAULT_COMPRESSION;
	else if (sel==1) m_iCompressLevel=CX_BEST_SPEED;
	else if (sel==2) m_iCompressLevel=CX_BEST_COMPRESSION;
	else m_iCompressLevel=CX_NO_COMPRESSION;

	sel=m_pCompressPath->GetCurSel();

	if (sel==0) m_nCompressPath=CCompressDoc::relative;
	else if (sel==1) m_nCompressPath=CCompressDoc::absolute;
	else m_nCompressPath=CCompressDoc::nofolder;

	///////////////////////////////////////////////////////////////////
	//结束对话框
	((CDialog*)GetParent())->EndDialog(IDOK);
}
void CAddFileDlg::OnClickCancel()
{
	((CDialog*)GetParent())->EndDialog(IDCANCEL);
}
BOOL CAddFileDlg::OnFileNameOK()
{
	return TRUE;
}
void CAddFileDlg::OnFolderChange()
{
	m_pListCtrl=(CListCtrl*)GetParent()->GetDlgItem(lst2)->GetWindow(GW_CHILD);

	if (m_pListCtrl)
	{
		DWORD style=m_pListCtrl->GetExStyle();
		style|=LVS_EX_CHECKBOXES;
		m_pListCtrl->SetExtendedStyle(style);
	}
}

void CAddFileDlg::OnCheckAll() 
{
	// TODO: Add your control notification handler code here
	int nItem,Count;
	Count=m_pListCtrl->GetItemCount();
	for (nItem=0;nItem<Count;nItem++)
		m_pListCtrl->SetCheck(nItem);
}

void CAddFileDlg::OnUncheckAll() 
{
	// TODO: Add your control notification handler code here
	int nItem,Count;
	Count=m_pListCtrl->GetItemCount();
	for (nItem=0;nItem<Count;nItem++)
		m_pListCtrl->SetCheck(nItem,FALSE);
}

void CAddFileDlg::OnCheckSel() 
{
	// TODO: Add your control notification handler code here
	int nItem;
	POSITION pos=m_pListCtrl->GetFirstSelectedItemPosition();
	while (pos)
	{
		nItem=m_pListCtrl->GetNextSelectedItem(pos);
		m_pListCtrl->SetCheck(nItem);
	}
}

void CAddFileDlg::OnUncheckSel() 
{
	// TODO: Add your control notification handler code here
	int nItem;
	POSITION pos=m_pListCtrl->GetFirstSelectedItemPosition();
	while (pos)
	{
		nItem=m_pListCtrl->GetNextSelectedItem(pos);
		m_pListCtrl->SetCheck(nItem,FALSE);
	}
}

BOOL CAddFileDlg::OnInitDialog() 
{
	CFileDialog::OnInitDialog();
	
	// TODO: Add extra initialization here
	m_pCompressLevel=(CComboBox*)GetDlgItem(IDC_COMBO_LEVEL);
	m_pCompressLevel->AddString("正常压缩");
	m_pCompressLevel->AddString("最快压缩");
	m_pCompressLevel->AddString("最好压缩率(最慢)");
	m_pCompressLevel->AddString("不压缩");
	m_pCompressLevel->SetCurSel(0);

	m_pCompressPath=(CComboBox*)GetDlgItem(IDC_COMBO_PATH);
	m_pCompressPath->AddString("压缩相对路径");
	m_pCompressPath->AddString("压缩绝对路径");
	m_pCompressPath->AddString("不压缩路径");
	m_pCompressPath->SetCurSel(1);

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

⌨️ 快捷键说明

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