📄 dlgencporgress.cpp
字号:
return -3;
}
return 0;
}
BOOL CDlgEncPorgress::OnInitDialog()
{
CDialog::OnInitDialog();
// TODO: Add extra initialization here
// 启动工作线程 [5/7/2008 By willing]
if (Run() != 0)
{
OnOK();// 工作线程启动失败,关闭对话框 [5/7/2008 By willing]
}
return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}
// 设置要显示的信息 [6/1/2007 by willing]
void CDlgEncPorgress::SetMsg(CString strMsg,int nColorIndex)
{
if ("" == strMsg)
{
return;
}
char szTemp[MAX_PATH]={0};
sprintf(szTemp,"%s",strMsg);
m_listbox.AddLine((CXListBox::Color)nColorIndex, (CXListBox::Color)CXListBox::White, szTemp);
return ;
}
// 在Static控件上显示消息 [5/8/2008 By willing]
void CDlgEncPorgress::ShowStaticMsg(CString strMsg)
{
SetDlgItemText(IDC_STATIC_MSG,strMsg);
}
// 如果没有操作失败的文件,则按照配置进行自动关闭对话框 [5/8/2008 By willing]
LRESULT CDlgEncPorgress::AutoExit(WPARAM wParam,LPARAM lParam)
{
SetDlgItemText(IDCANCEL,"关闭");
CButton* ptrButton = (CButton*)GetDlgItem(IDC_CHECK);
if (NULL == ptrButton)
{
return 0;
}
if (ptrButton->GetCheck() == BST_CHECKED)
{
OnOK();
}
return 0;
}
// 接收设置主进度的范围的消息处理函数 [6/1/2007 by willing]
LRESULT CDlgEncPorgress::SetProgress(WPARAM wParam,LPARAM lParam)
{
int nUp = (int)wParam;
m_ProgressCtrl.SetRange32(0,nUp);
m_ProgressCtrl.SetStep(1);
m_ProgressCtrl.SetPos(0);
return 0;
}
// 设置当前进度条的进度 [5/8/2008 By willing]
LRESULT CDlgEncPorgress::SetCurPos(WPARAM wParam,LPARAM lParam)
{
int nPos = (int)wParam;
nPos = (nPos>0)?nPos:0;
m_ProgressCtrl.SetPos(nPos);
return 0;
}
// 显示加密过程中显示的详细信息 [5/8/2008 By willing]
LRESULT CDlgEncPorgress::ShowEncMsg(WPARAM wParam,LPARAM lParam)
{
if (NULL == wParam)
{
return 0;
}
ENC_MSG* ptrEncMsg = (ENC_MSG*)wParam;
SetMsg(CString(ptrEncMsg->szMsg),ptrEncMsg->nTextColor);
delete ptrEncMsg;
ptrEncMsg = NULL;
return 0;
}
// 停止加密线程 [5/14/2008 By willing]
int CDlgEncPorgress::Stop()
{
if (NULL != m_hExitFlag)
{
// 设置退出标志 [1/16/2008 By willing]
OutputDebugString("CDlgEncPorgress::Stop() SetEvent");
::SetEvent(m_hExitFlag);
}
if (NULL != m_hThreadHandle)
{
if (::WaitForSingleObject(this->m_hThreadHandle, 1000*10) == WAIT_TIMEOUT)
{
//线程退出超时,强制结束线程
OutputDebugString("线程退出超时,强制结束线程");
TerminateThread(this->m_hThreadHandle,0);
}
}
if(this->m_hExitFlag != NULL)
{
::CloseHandle(this->m_hExitFlag);
this->m_hExitFlag = NULL;
}
this->m_hThreadHandle = NULL;
return 0;
}
void CDlgEncPorgress::OnCancel()
{
// TODO: Add extra cleanup here
if (::WaitForSingleObject(this->m_hThreadHandle, 1) == WAIT_OBJECT_0)
{
// 加密工作已经结束 [5/15/2008 By willing]
CDialog::OnCancel();
return;
}else{
if (NULL != m_hWaitFlag)
{
SuspendThread(m_hThreadHandle);
if (IDYES == MessageBox("确定要取消加密吗?","提示",MB_YESNO))
{
ResumeThread(m_hThreadHandle);
Stop();
CDialog::OnCancel();
}else{
ResumeThread(m_hThreadHandle);
}
}
}
}
// 写入加密后的数据 [5/14/2008 By willing]
int CDlgEncPorgress::WriteBuffer(CFile &m_File,
char *ptrBuffer,
DWORD dwLen)
{
if (ptrBuffer == NULL)
{
return -1;
}
char szBuffer[BUFFER_SIZE]={0};
CToolsKit ToolsKit;
BOOL bResult = FALSE;
CMD5Checksum MD5Checksum;
CString strPwdMD5 = "";
// 构造密钥 [5/9/2008 By willing]
if ("" == m_strPwd)
{
strPwdMD5 = (MD5Checksum.GetMD5(DES_MIYAO)).Left(8);
}else{
strPwdMD5 = (MD5Checksum.GetMD5(m_strPwd)).Left(8);
}
char szPwdMd5[9]={0};
sprintf(szPwdMd5,"%s",strPwdMD5);
if( m_nEncSuanFa == ENCTYPE_DES)
{
bResult = ToolsKit.Encrypt(szBuffer,ptrBuffer,dwLen,szPwdMd5,8);
}else if (m_nEncSuanFa == ENCTYPE_3DES)
{
bResult = ToolsKit.Encrypt(szBuffer,ptrBuffer,dwLen,szPwdMd5,16);
}
if (bResult)
{
m_File.Write(szBuffer,BUFFER_SIZE);
}else{
OutputDebugString("加密失败");
return -2;
}
return 0;
}
// 写生成的文件的头文件 [5/8/2008 By willing]
int CDlgEncPorgress::WriteEncFileHead(CFile &encFile,
const CString strXML)
{
// 获取XML的MD5签名 [5/8/2008 By willing]
CMD5Checksum MD5Checksum;
CString strXMLMD5 = MD5Checksum.GetMD5(strXML);
OutputDebugString("加密时的头信息");
OutputDebugString(strXML);
CString strMsg = "";
strMsg.Format("strXml = %d",strXML.GetLength());
OutputDebugString(strMsg);
if (strXMLMD5 == "")
{
return -1;
}
CToolsKit ToolsKit;
int nXmlLen = strXML.GetLength();
char* pszXml = new char[nXmlLen+1];
if (NULL == pszXml)
{
return -2;
}
memset(pszXml,0,nXmlLen+1);
sprintf(pszXml,"%s",strXML);
char* pszOut = new char[nXmlLen+8];
if (NULL == pszOut)
{
delete pszXml;
pszXml = NULL;
}
memset(pszOut,0,nXmlLen+8);
BOOL bFlag = FALSE;
if ("" == strXML)
{
// 没有用密码进行加密 [5/8/2008 By willing]
bFlag = ToolsKit.Encrypt(pszOut,pszXml,nXmlLen,DES_MIYAO,strlen(DES_MIYAO));
}else{
// 加密时使用了密码,则用密码的MD5值做密钥 [5/9/2008 By willing]
CString strPwdMd5 = MD5Checksum.GetMD5(m_strPwd);
strPwdMd5 = strPwdMd5.Left(8);
char szPwdMD5[9]={0};
sprintf(szPwdMD5,"%s",strPwdMd5);
bFlag = ToolsKit.Encrypt(pszOut,pszXml,nXmlLen,szPwdMD5,strlen(szPwdMD5));
}
// 判断加密是否成功 [5/9/2008 By willing]
if (FALSE == bFlag)
{
return -3;
}
long len = nXmlLen+8;//strlen(pszOut);
CString str = "";
str.Format("写入的加密后XML的长度 %d",len);
OutputDebugString(str);
encFile.Write(&len,sizeof(long));
encFile.Write(pszOut,nXmlLen+8/*len*/);
encFile.Write(strXMLMD5,strXMLMD5.GetLength());
if (NULL != pszOut)
{
delete pszOut;
pszOut = NULL;
}
if (NULL != pszXml)
{
delete pszXml;
pszXml = NULL;
}
return 0;
}
CString CDlgEncPorgress::CreateEncFileHeadXml(CSelectFile SelectFile)
{
CString strFormat = "<CONFIG>"
"<ENCTYPE>%d</ENCTYPE>"
"<ENCMETHOD>%d</ENCMETHOD>"
"<PWD>%s</PWD>"
"<HOSTCODE>%s</HOSTCODE>"
"<FILELEN>%d</FILELEN>"
"<FILETYPE>%s</FILETYPE>"
"<FILENAME>%s</FILENAME>"
"</CONFIG>";
CString strRe = "";
CString strFileExt = "";
if (SelectFile.GetFileExt(strFileExt) != 0)
{
OutputDebugString("CDlgEncPorgress::CreateEncFileHeadXml 111");
return "";
}
int filelen = SelectFile.GetFileLen();
CString strMsg = "";
strMsg.Format("CDlgEncPorgress::CreateEncFileHeadXml nFileLen = %d",filelen);
OutputDebugString(strMsg);
if (filelen <= 0)
{
OutputDebugString("构造加密文件的头XML时获取文件大小失败");
return "";
}
CString strHostCode = "";
if (0 != m_dwEncType)
{
CToolsKit ToolsKit;
strHostCode = ToolsKit.GetHostCode();
}
strRe.Format(strFormat,m_dwEncType,m_nEncSuanFa,m_strPwd,strHostCode,filelen,strFileExt,SelectFile.GetFileName());
return strRe;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -