📄 yeetoomd5pdlg.cpp
字号:
// YeeTooMD5PDlg.cpp : implementation file
//
#include "stdafx.h"
#include "YeeTooMD5P.h"
#include "YeeTooMD5PDlg.h"
#include "md5module.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CYeeTooMD5PDlg dialog
CYeeTooMD5PDlg::CYeeTooMD5PDlg(CWnd* pParent /*=NULL*/)
: CDialog(CYeeTooMD5PDlg::IDD, pParent)
{
//{{AFX_DATA_INIT(CYeeTooMD5PDlg)
m_Text = _T("");
m_MD5 = _T("");
m_FileName = _T("");
m_CheckMD5 = _T("");
//}}AFX_DATA_INIT
// Note that LoadIcon does not require a subsequent DestroyIcon in Win32
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}
void CYeeTooMD5PDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CYeeTooMD5PDlg)
DDX_Control(pDX, IDC_RESULT, m_Result);
DDX_Text(pDX, IDC_TEXT, m_Text);
DDX_Text(pDX, IDC_MD5, m_MD5);
DDX_Text(pDX, IDC_FILENAME, m_FileName);
DDX_Text(pDX, IDC_CHECKMD5, m_CheckMD5);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CYeeTooMD5PDlg, CDialog)
//{{AFX_MSG_MAP(CYeeTooMD5PDlg)
ON_EN_CHANGE(IDC_TEXT, OnChangeText)
ON_BN_CLICKED(IDC_OPEN, OnOpen)
ON_EN_CHANGE(IDC_FILENAME, OnChangeFilename)
ON_EN_CHANGE(IDC_CHECKMD5, OnChangeCheckmd5)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CYeeTooMD5PDlg message handlers
BOOL CYeeTooMD5PDlg::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
CenterWindow(GetDesktopWindow()); // center to the hpc screen
// TODO: Add extra initialization here
return TRUE; // return TRUE unless you set the focus to a control
}
void CYeeTooMD5PDlg::OnChangeText()
{
// TODO: If this is a RICHEDIT control, the control will not
// send this notification unless you override the CDialog::OnInitDialog()
// function and call CRichEditCtrl().SetEventMask()
// with the ENM_CHANGE flag ORed into the mask.
// TODO: Add your control notification handler code here
this->UpdateData(TRUE);
m_MD5.Empty();
int nLength=m_Text.GetLength();
if(nLength>0)
{
unsigned char szmd5sum[16];
md5_context ctx;
md5_starts(&ctx);
char *text;
text=new char [m_Text.GetLength()];
//转换
int actuallength=0;
actuallength=WideCharToMultiByte(CP_ACP,NULL,(LPCWSTR)m_Text.GetBuffer(0),m_Text.GetLength(),(LPSTR)text,0,NULL,NULL);
delete text;
text=new char [actuallength];
ZeroMemory(text,actuallength);
WideCharToMultiByte(CP_ACP,NULL,(LPCWSTR)m_Text.GetBuffer(0),m_Text.GetLength(),(LPSTR)text,actuallength,NULL,NULL);
md5_update(&ctx,(unsigned char*)text,actuallength);
md5_finish(&ctx,szmd5sum);
delete text;
char szChar[3];
for(int i=0;i<16;i++)
{
_itoa(szmd5sum[i],szChar,16);
if(strlen(szChar)==1)
m_MD5+="0";
m_MD5+=szChar;
}
}
this->UpdateData(FALSE);
if(m_MD5 == m_CheckMD5)
m_Result.SetCheck(1);
else
m_Result.SetCheck(0);
}
void CYeeTooMD5PDlg::OnOpen()
{
CFileDialog dlg(TRUE,NULL,NULL,OFN_HIDEREADONLY,TEXT("All Files(*.*)|*.*||"));
if(dlg.DoModal()==IDOK)
{
m_FileName=dlg.GetPathName();
}
this->UpdateData(FALSE);
OnChangeFilename();
}
void CYeeTooMD5PDlg::OnChangeFilename()
{
this->UpdateData(TRUE);
m_MD5.Empty();
if(m_FileName.GetLength()<1)
return;
WIN32_FIND_DATA fData;
if(FindClose(FindFirstFile(m_FileName,&fData)) == TRUE)
{
DWORD nFileSize=fData.nFileSizeHigh+fData.nFileSizeLow;
HANDLE hFile=CreateFile(m_FileName,GENERIC_READ,FILE_SHARE_READ,NULL,OPEN_EXISTING,0,NULL);
if(hFile != (HANDLE)0xffffffff)
{
char * lpFile=new char[nFileSize];
DWORD dwRead;
ReadFile(hFile,lpFile,nFileSize,&dwRead,NULL);
CloseHandle(hFile);
//get md5 sum - start
unsigned char szmd5sum[16];
md5_context ctx;
md5_starts(&ctx);
md5_update(&ctx,(unsigned char *)lpFile,nFileSize);
md5_finish(&ctx,szmd5sum);
char szChar[3];
for(int i=0;i<16;i++)
{
_itoa(szmd5sum[i],szChar,16);
if(strlen(szChar)==1)
m_MD5+="0";
m_MD5+=szChar;
}
//get md5 sum - end
delete [] lpFile;
}
}
this->UpdateData(FALSE);
if(m_MD5 == m_CheckMD5)
m_Result.SetCheck(1);
else
m_Result.SetCheck(0);
}
void CYeeTooMD5PDlg::OnChangeCheckmd5()
{
this->UpdateData(TRUE);
if(m_MD5 == m_CheckMD5)
m_Result.SetCheck(1);
else
m_Result.SetCheck(0);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -