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

📄 ceroutguide.cpp

📁 密钥的管理中心
💻 CPP
字号:
// Ceroutguide.cpp : implementation file
//

#include "stdafx.h"
#include "bishe.h"
#include "Ceroutguide.h"
#include <afxdb.h>

#include "Usefulkey.h"

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

/////////////////////////////////////////////////////////////////////////////
// CCeroutguide dialog


CCeroutguide::CCeroutguide(CWnd* pParent /*=NULL*/)
	: CDialog(CCeroutguide::IDD, pParent)
{
	//{{AFX_DATA_INIT(CCeroutguide)
		// NOTE: the ClassWizard will add member initialization here
	//}}AFX_DATA_INIT
	pPageLink=NULL;
	nPageCount=0;
	nCurrentPage=0;
}


void CCeroutguide::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CCeroutguide)
		// NOTE: the ClassWizard will add DDX and DDV calls here
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CCeroutguide, CDialog)
	//{{AFX_MSG_MAP(CCeroutguide)
	ON_BN_CLICKED(IDC_CANCEL, OnCancel)
	ON_BN_CLICKED(IDC_FINISH, OnFinish)
	ON_BN_CLICKED(IDC_NEXT, OnNext)
	ON_BN_CLICKED(IDC_PREV, OnPrev)
	ON_WM_DESTROY()
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CCeroutguide message handlers
//CCeroutguide所使用到的函数 添加一个新页到Wizard框架,入口参数为要添加的对话框指针和ID 
void CCeroutguide::AddPage(UINT nID)
{
    struct PAGELINK* pTemp=pPageLink;
    //插入新生成的结点
	struct PAGELINK* pNewPage=new struct PAGELINK;
	switch(nID)
	{
		case IDD_CEROUT1: pNewPage->pDialog=new CCerout1;
			break;
		case IDD_CEROUT2: pNewPage->pDialog=new CCerout2;
			break;
		//case IDD_CEROUT3: pNewPage->pDialog=new CCerout3;
		//	break;
		case IDD_CEROUT4: pNewPage->pDialog=new CCerout4;
			break;
		case IDD_CEROUT5: pNewPage->pDialog=new CCerout5;
			break;
	}



    //pNewPage->pDialog=new CDialog;
    ASSERT(pNewPage->pDialog->Create(nID,this));
	// Is window created
    ASSERT(::IsWindow(pNewPage->pDialog->m_hWnd));
    // 检查每页的样式
	DWORD dwStyle = pNewPage->pDialog->GetStyle();
	ASSERT((dwStyle & WS_CHILD) != 0); //子窗体
	ASSERT((dwStyle & WS_BORDER) == 0); //无边界
	//显示
	pNewPage->pDialog->ShowWindow(SW_HIDE); //先隐藏,需要时再显示
	pNewPage->pDialog->MoveWindow(rectPage);
    //移动对话框到制定位置,rectPage已经初始化了
	pNewPage->Next=NULL;
    pNewPage->nNum=++nPageCount; //计数器加1
    if (pTemp) //插入到链表 
	{
		//如果不是空链表
      while (pTemp->Next)
      pTemp=pTemp->Next; //移动链表末尾
      pTemp->Next=pNewPage;
	}
    else// 空链表 
    pPageLink=pNewPage; //若是第一个接点
}

//显示的页,入口参数为要显示的某特定页的编码 
void CCeroutguide::ShowPage(UINT nPos)
{
	struct PAGELINK* pTemp=pPageLink;
    while(pTemp)
	{
		if (pTemp->nNum==nPos)
		{
			pTemp->pDialog->ShowWindow(SW_SHOW);
			pTemp=pTemp->Next;
		}
		else
        //不显示
		{
		pTemp->pDialog->ShowWindow(SW_HIDE);
		pTemp=pTemp->Next;
		}
		if (nPos>=nPageCount) //最后一页
		{
			nCurrentPage=nPageCount;
			SetWizButton(2);
		}
		else if (nPos<=1) //首页 
		{
			nCurrentPage=1;
			SetWizButton(0);

		}
		else //中间步
		SetWizButton(1);
	}
}


//为了与显示统一,需要相应的设置按钮 
void CCeroutguide::SetWizButton(UINT uFlag)
{
	GetDlgItem(IDC_CANCEL)->EnableWindow(TRUE);
	GetDlgItem(IDC_PREV)->EnableWindow(TRUE);
	GetDlgItem(IDC_NEXT)->EnableWindow(TRUE);
	GetDlgItem(IDC_FINISH)->EnableWindow(TRUE);
	switch(uFlag)
	{
		case 0: //第一步
			GetDlgItem(IDC_PREV)->EnableWindow(FALSE);
			break;
		case 1: //中间步
			break;
		case 2://最后一步
			GetDlgItem(IDC_NEXT)->EnableWindow(FALSE);
			break;
	}
}


void CCeroutguide::OnCancel() 
{
	// TODO: Add your control notification handler code here
	//if(AfxMessageBox(IDC_CANCEL,MB_OKCANCEL|MB_ICONQUESTION)==IDCANCEL)
     //  return; 
    CDialog::OnCancel();
}

void CCeroutguide::OnFinish() 
{
	// TODO: Add your control notification handler code here
	//将文件导出

	FILE *fp;
	unsigned int len;
	char errMsg[200];
	char filename[300];
	char pkey[512];
//	HANDLE hFile;
//	DWORD written;
	 if(nCurrentPage==4)
	{
		 CDatabase m_pDatabase;
	     CUsefulkey m_use(&m_pDatabase);  
	     CString m_pRecordSet=(_T("[usefulkey]"));
         m_use.Open(AFX_DB_USE_DEFAULT_TYPE,m_pRecordSet);
		 m_use.AddNew();

		 m_use.m_username=g_USERNAME;
		 m_use.m_dk=g_SE;
		 m_use.m_cer=g_Cdir;
         m_use.m_keydate=g_sTime;
	     m_use.Update();//更新数据库
 

         m_pDatabase.Close();
		 //将用户的密钥保存到数据库

	   	 wsprintf(filename,"%s%s%s","Certification\\",g_OUTFILE,".key");
		 if((fp = fopen(filename,"w+")) == NULL)
		 {
			memset(errMsg,0,200);
			wsprintf(errMsg, "%s%s%s", "file ", filename, " can't open");
			AfxMessageBox(errMsg);
			return;
		}

		len = strlen(g_SD);
		strcpy(pkey,g_SD);
		pkey[len] = '\0';
		if(fwrite(pkey, sizeof(char), len,fp) != len)
		{
			memset(errMsg, 0, 200);
			wsprintf(errMsg, "%s%s%s", "write file ", filename, " fail");
			AfxMessageBox(errMsg);
			return;
		}
	
		fclose(fp);//导出私钥

		
		ZeroMemory(filename, 300);
		wsprintf(filename, "%s%s%s", "Certification\\",g_OUTFILE, ".cer");
		if((fp = fopen(filename, "w+")) == NULL)
		{
			memset(errMsg,0,200);
			wsprintf(errMsg, "%s%s%s", "file ", filename, " can't open");
			AfxMessageBox(errMsg);
			return;
		}
	

		len = strlen(g_cerinfo);
		if(fwrite(g_cerinfo, sizeof(char), len, fp) != len)
		{
			memset(errMsg, 0, 200);
			wsprintf(errMsg, "%s%s%s", "write file ", filename, " fail");
			AfxMessageBox(errMsg);
			return;
		}

		fclose(fp);//导出证书
	}
/*	hFile = CreateFile(filename,FILE_ALL_ACCESS,FILE_SHARE_WRITE,
		               NULL, CREATE_NEW,FILE_ATTRIBUTE_NORMAL,NULL);
	len = strlen(g_cerinfo);
	WriteFile(hFile, g_cerinfo, len, &written, NULL);*/
	AfxMessageBox("导出成功.");	
	    
    CDialog::OnOK();
}

void CCeroutguide::OnNext() 
{
	// TODO: Add your control notification handler code here
	struct PAGELINK *pTemp=pPageLink;
//	CCerout3 * cerout3 = (CCerout3*)(pTemp->Next->Next->pDialog);
	CCerout4 * cerout4 = (CCerout4*)(pTemp->Next->Next->pDialog);
	CCerout5 * cerout5 = (CCerout5*)(pTemp->Next->Next->Next->pDialog);
	
    /*if(nCurrentPage==3)
	{
		cerout3->GetData();
		if(strlen(cerout3->m_key)<16)
		{
			AfxMessageBox("密码长度不正确.");
			return;
		}

		else	
			ShowPage(++nCurrentPage);
	}

	else*/
	if(nCurrentPage==3)
	{ 
		cerout4->GetData();
		if(cerout4->m_outfile=="")
		{	
			AfxMessageBox("文件名不能为空.");
			return;
		}
		else ShowPage(++nCurrentPage);
	}
	else
	 ShowPage(++nCurrentPage);
}

void CCeroutguide::OnPrev() 
{
	// TODO: Add your control notification handler code here
    ShowPage(--nCurrentPage);
}

void CCeroutguide::OnDestroy() 
{
	CDialog::OnDestroy();
	
	// TODO: Add your message handler code here
	struct PAGELINK* pTemp=pPageLink;
	while(pTemp)
	{
		pTemp->pDialog->DestroyWindow();
		pTemp=pTemp->Next;
	}
}

BOOL CCeroutguide::OnInitDialog() 
{
	CDialog::OnInitDialog();
	// TODO: Add extra initialization here
	//获得每页显示的范围
    CRect Rect1;
	GetWindowRect(&Rect1); //获得主窗口的位置
	int nCaption = ::GetSystemMetrics(SM_CYCAPTION);
	int nXEdge = ::GetSystemMetrics(SM_CXEDGE);
	int nYEdge = ::GetSystemMetrics(SM_CYEDGE);
	CRect Rect2;
	GetDlgItem(IDC_POS)->GetWindowRect(&Rect2); //获得框架的位置
	Rect1.top=Rect1.top+nCaption+nYEdge; //相对坐标
	Rect1.left=Rect1.left+2*nXEdge;
	//计算机位置
	rectPage.top=Rect2.top-Rect1.top;
	rectPage.left=Rect2.left-Rect1.left;
	rectPage.bottom=Rect2.bottom-Rect1.top;
	rectPage.right=Rect2.right-Rect1.left;
	//添加要显示的页
	AddPage(IDD_CEROUT1);
	AddPage(IDD_CEROUT2);
//	AddPage(IDD_CEROUT3);
	AddPage(IDD_CEROUT4);
	AddPage(IDD_CEROUT5);


	//显示第一页
	ShowPage(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 + -