📄 bztestdlg.cpp
字号:
// BZTestDlg.cpp : implementation file
//
#include "stdafx.h"
#include "BZTest.h"
#include "BZTestDlg.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CBZTestDlg dialog
CBZTestDlg::CBZTestDlg(CWnd* pParent /*=NULL*/)
: CDialog(CBZTestDlg::IDD, pParent) , CBZ2Compress(m_szWriteBuffer,sizeof(m_szWriteBuffer)) , CBZ2Decompress(m_szWriteBuffer,sizeof(m_szWriteBuffer))
{
//{{AFX_DATA_INIT(CBZTestDlg)
m_szSource = _T("");
m_szTarget = _T("");
//}}AFX_DATA_INIT
// Note that LoadIcon does not require a subsequent DestroyIcon in Win32
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}
void CBZTestDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CBZTestDlg)
DDX_Text(pDX, IDC_SOURCE, m_szSource);
DDX_Text(pDX, IDC_TARGET, m_szTarget);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CBZTestDlg, CDialog)
//{{AFX_MSG_MAP(CBZTestDlg)
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
ON_BN_CLICKED(IDC_BROWSESOURCE, OnBrowseSource)
ON_BN_CLICKED(IDC_BROWSETARGET, OnBrowseTarget)
ON_BN_CLICKED(IDC_COMPRESS, OnCompress)
ON_BN_CLICKED(IDC_DECOMPRESS, OnDecompress)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CBZTestDlg message handlers
BOOL CBZTestDlg::OnInitDialog()
{
CDialog::OnInitDialog();
// Set the icon for this dialog. The framework does this automatically
// when the application's main window is not a dialog
SetIcon(m_hIcon, TRUE); // Set big icon
SetIcon(m_hIcon, FALSE); // Set small icon
// TODO: Add extra initialization here
return TRUE; // return TRUE unless you set the focus to a control
}
// If you add a minimize button to your dialog, you will need the code below
// to draw the icon. For MFC applications using the document/view model,
// this is automatically done for you by the framework.
void CBZTestDlg::OnPaint()
{
if (IsIconic())
{
CPaintDC dc(this); // device context for painting
SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);
// Center icon in client rectangle
int cxIcon = GetSystemMetrics(SM_CXICON);
int cyIcon = GetSystemMetrics(SM_CYICON);
CRect rect;
GetClientRect(&rect);
int x = (rect.Width() - cxIcon + 1) / 2;
int y = (rect.Height() - cyIcon + 1) / 2;
// Draw the icon
dc.DrawIcon(x, y, m_hIcon);
}
else
{
CDialog::OnPaint();
}
}
// The system calls this to obtain the cursor to display while the user drags
// the minimized window.
HCURSOR CBZTestDlg::OnQueryDragIcon()
{
return (HCURSOR) m_hIcon;
}
void CBZTestDlg::OnBrowseSource()
{
UpdateData();
CFileDialog Dlg(TRUE,NULL,m_szSource,OFN_HIDEREADONLY,_T("All Files (*.*)|*.*||"),this);
if (Dlg.DoModal()!=IDOK)
return;
m_szSource=Dlg.GetPathName();
UpdateData(FALSE);
}
void CBZTestDlg::OnBrowseTarget()
{
UpdateData();
CFileDialog Dlg(FALSE,_T(".bz2"),m_szTarget,OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,_T("BZ2 Files (*.bz2)|*.bz2|All Files (*.*)|*.*||"),this);
if (Dlg.DoModal()!=IDOK)
return;
m_szTarget=Dlg.GetPathName();
UpdateData(FALSE);
}
void CBZTestDlg::OnCompress()
{
UpdateData();
if (m_fileSource.Open(m_szSource,CFile::modeRead))
{
if (m_fileTarget.Open(m_szTarget,CFile::modeWrite|CFile::modeCreate))
{
unsigned int nPackedSize=Compress();
if (nPackedSize>0)
{
CString szMessage;
szMessage.Format(IDS_RATIO,m_fileSource.GetLength(),nPackedSize,nPackedSize*100/m_fileSource.GetLength());
AfxMessageBox(szMessage,MB_ICONINFORMATION);
}
else
AfxMessageBox(IDS_ERRCOMPRESS);
m_fileTarget.Close();
}
else
AfxMessageBox(IDS_ERRFILETARGET);
m_fileSource.Close();
}
else
AfxMessageBox(IDS_ERRFILETARGET);
}
unsigned int CBZTestDlg::OnCompressRead(char *&pBuffer)
{
return m_fileSource.Read(pBuffer=m_szReadBuffer,sizeof(m_szReadBuffer));
}
void CBZTestDlg::OnCompressWrite(const char *pBuffer, unsigned int nLength)
{
m_fileTarget.Write(pBuffer,nLength);
}
void CBZTestDlg::OnDecompress()
{
UpdateData();
if (m_fileSource.Open(m_szSource,CFile::modeRead))
{
if (m_fileTarget.Open(m_szTarget,CFile::modeWrite|CFile::modeCreate))
{
unsigned int nOriginalSize=Decompress();
if (nOriginalSize>0)
{
CString szMessage;
szMessage.Format(IDS_RATIO,m_fileSource.GetLength(),nOriginalSize,nOriginalSize*100/m_fileSource.GetLength());
AfxMessageBox(szMessage,MB_ICONINFORMATION);
}
else
AfxMessageBox(IDS_ERRDECOMPRESS);
m_fileTarget.Close();
}
else
AfxMessageBox(IDS_ERRFILETARGET);
m_fileSource.Close();
}
else
AfxMessageBox(IDS_ERRFILETARGET);
}
unsigned int CBZTestDlg::OnDecompressRead(char* &pBuffer)
{
return m_fileSource.Read(pBuffer=m_szReadBuffer,sizeof(m_szReadBuffer));
}
void CBZTestDlg::OnDecompressWrite(const char* pBuffer,unsigned int nLength)
{
m_fileTarget.Write(pBuffer,nLength);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -