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

📄 dlgencporgress.cpp

📁 COM 组建的开发
💻 CPP
📖 第 1 页 / 共 2 页
字号:
		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 + -