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

📄 webcertmanpage.cpp

📁 MiniCA V2.0版本源码。《小型CA系统V2.1含源码》发表以来
💻 CPP
📖 第 1 页 / 共 3 页
字号:
// WebCertManPage.cpp : implementation file
//

#include "stdafx.h"
#include "minica.h"
#include "WebCertManPage.h"
#include "MiniMainDlg.h"
#include ".\GenericClass\Language.h"
#include "minict.h"

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

/////////////////////////////////////////////////////////////////////////////
// CWebCertManPage property page

IMPLEMENT_DYNCREATE(CWebCertManPage, CPropertyPage)

CWebCertManPage::CWebCertManPage() : CPropertyPage(CWebCertManPage::IDD)
{
	//{{AFX_DATA_INIT(CWebCertManPage)
		// NOTE: the ClassWizard will add member initialization here
	//}}AFX_DATA_INIT
	m_dCurrentPage = 1;	//当前页次
	m_bIsSignleRec = FALSE;
}

CWebCertManPage::~CWebCertManPage()
{
}

void CWebCertManPage::DoDataExchange(CDataExchange* pDX)
{
	CPropertyPage::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CWebCertManPage)
	DDX_Control(pDX, IDC_SLIDER, m_Slider);
	DDX_Control(pDX, IDC_LIST_ONE, m_ListOne);
	DDX_Control(pDX, IDC_LIST, m_List);
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CWebCertManPage, CPropertyPage)
	//{{AFX_MSG_MAP(CWebCertManPage)
	ON_BN_CLICKED(IDC_BQUERY, OnBquery)
	ON_NOTIFY(NM_DBLCLK, IDC_LIST, OnDblclkList)
	ON_WM_DESTROY()
	ON_NOTIFY(NM_DBLCLK, IDC_LIST_ONE, OnDblclkListOne)
	ON_BN_CLICKED(IDC_BCVIEW, OnBcview)
	ON_NOTIFY(NM_RCLICK, IDC_LIST, OnRclickList)
	//}}AFX_MSG_MAP
	ON_MESSAGE(WM_BITMAPSLIDER_MOVED, OnBitmapSliderMoved)
	ON_MESSAGE(WM_BITMAPSLIDER_MOVING, OnBitmapSliderMoving)
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CWebCertManPage message handlers

BOOL CWebCertManPage::OnInitDialog() 
{
	CPropertyPage::OnInitDialog();

	m_Image.Create(16,16,TRUE|ILC_COLOR24,20,1);
	//24:每个图片的宽度为24
	//24:每个图片的高度为24
	//TRUE  该图以透明方式显示
	//ILC_COLOR24,  颜色数为24位(其他可选常量祥见有关API)
	//16:    创建时容量为3个图片
	//1:    图片数量超出当前容量时,自动扩容,每次扩容1个图片的容量

	HICON hIcon =  NULL;

	hIcon =  (HICON)::LoadImage(::AfxGetInstanceHandle(),
		MAKEINTRESOURCE(IDI_ICON_YELLO), IMAGE_ICON, 16, 16, 0);
	m_Image.Add(hIcon);//0 - 申请
	DestroyIcon(hIcon);
	
	hIcon =  (HICON)::LoadImage(::AfxGetInstanceHandle(), 
		MAKEINTRESOURCE(IDI_ICON_BLUE), IMAGE_ICON, 16, 16, 0);
	m_Image.Add(hIcon);//1   - 标记制作
	DestroyIcon(hIcon);
	
	hIcon =  (HICON)::LoadImage(::AfxGetInstanceHandle(), 
		MAKEINTRESOURCE(IDI_ICON_GREEN), IMAGE_ICON, 16, 16, 0);
	m_Image.Add(hIcon);//2   - 制作成功
	DestroyIcon(hIcon);
	
	hIcon =  (HICON)::LoadImage(::AfxGetInstanceHandle(), 
		MAKEINTRESOURCE(IDI_ICON_RED), IMAGE_ICON, 16, 16, 0);
	m_Image.Add(hIcon);//3   - 已经作废
	DestroyIcon(hIcon);
	
	hIcon =  (HICON)::LoadImage(::AfxGetInstanceHandle(), 
		MAKEINTRESOURCE(IDI_ICON_LIST), IMAGE_ICON, 16, 16, 0);
	m_Image.Add(hIcon);//4   - 多记录条目,可展开的项
	DestroyIcon(hIcon);

	hIcon =  (HICON)::LoadImage(::AfxGetInstanceHandle(), 
		MAKEINTRESOURCE(IDI_ICON_MROOT), IMAGE_ICON, 16, 16, 0);
	m_Image.Add(hIcon);//5   - 单记录条目
	DestroyIcon(hIcon);

	hIcon =  (HICON)::LoadImage(::AfxGetInstanceHandle(), 
		MAKEINTRESOURCE(IDI_ICON_CLOCK), IMAGE_ICON, 16, 16, 0);
	m_Image.Add(hIcon);//6   - 时间
	DestroyIcon(hIcon);

	// TODO: Add extra initialization here
	//初始化多页列表
	m_List.InsertColumn(0,MiniCT_1100,LVCFMT_LEFT,80);					//MiniCT_1100 "ID"
//	m_List.InsertColumn(1,CMiniCaApp::NormalCode("申请者信息"),LVCFMT_LEFT,150);
	m_List.InsertColumn(1,MiniCT_1101,LVCFMT_LEFT,60);			//MiniCT_1101 "密钥长度"
	m_List.InsertColumn(2,MiniCT_1102,LVCFMT_LEFT,50);				//MiniCT_1102 "有效期"
	m_List.InsertColumn(3,MiniCT_1103,LVCFMT_LEFT,80);			//MiniCT_1103 "好记名称"
	m_List.InsertColumn(4,MiniCT_1104,LVCFMT_LEFT,40);				//MiniCT_1104 "种类"
	m_List.InsertColumn(5,MiniCT_1105,LVCFMT_LEFT,40);				//MiniCT_1105 "状态"
	m_List.InsertColumn(6,MiniCT_1106,LVCFMT_LEFT,100);			//MiniCT_1106 "申请时间"
//	m_List.InsertColumn(6,CMiniCaApp::NormalCode("密钥用途"),LVCFMT_LEFT,100);
//	m_List.InsertColumn(7,CMiniCaApp::NormalCode("扩展用途"),LVCFMT_LEFT,100);
//	m_List.SetExtendedStyle(LVS_EX_UNDERLINECOLD|LVS_EX_FULLROWSELECT);
	m_List.SetExtendedStyle(LVS_EX_GRIDLINES | LVS_EX_FULLROWSELECT);
	m_List.SetImageList(&m_Image, LVSIL_SMALL);

	//初始化单页列表
	m_ListOne.SetImageList(&m_Image, LVSIL_SMALL);
	m_ListOne.SetExtendedStyle(LVS_EX_GRIDLINES);
	m_ListOne.InsertColumn(0, MiniCT_1107, LVCFMT_LEFT, 200);	//MiniCT_1107 "申请条目"
	m_ListOne.InsertColumn(1, MiniCT_1108, LVCFMT_LEFT, 250);		//MiniCT_1108 "内容"
	AddList();

	//设置显示列表
	if(m_bIsSignleRec)
	{
		GetDlgItem(IDC_LIST_ONE)->ShowWindow(SW_SHOW);
		GetDlgItem(IDC_LIST)->ShowWindow(SW_HIDE);
	}
	else
	{
		GetDlgItem(IDC_LIST_ONE)->ShowWindow(SW_HIDE);
		GetDlgItem(IDC_LIST)->ShowWindow(SW_SHOW);
	}


	m_Slider.SetBitmapChannel( IDB_BITSLIDER, IDB_BITSLIDER, TRUE);	//透明 要透明的部分用黑色表示
	m_Slider.SetBitmapThumb( IDB_BITMAP2, IDB_BITMAP3, TRUE);//透明
	m_Slider.DrawFocusRect( FALSE );

	m_Slider.SetPageSize(1);
	m_Slider.Enable(FALSE);


	return TRUE;  // return TRUE unless you set the focus to a control
	              // EXCEPTION: OCX Property Pages should return FALSE
}


LRESULT CWebCertManPage::OnBitmapSliderMoved(WPARAM wParam, LPARAM lParam/*当前值*/)
{
	switch( wParam )
	{
	case IDC_SLIDER :
		int pos = m_Slider.GetPos();
		if(m_dCurrentPage == pos)
			break;
		m_dCurrentPage = pos;
		GoToPage(m_dCurrentPage);
		break;
	}
	return 0;
}

LRESULT CWebCertManPage::OnBitmapSliderMoving(WPARAM wParam, LPARAM lParam/*当前值*/)
{
	switch( wParam )
	{
	case IDC_SLIDER :
		int pos = m_Slider.GetPos();
		if(m_dCurrentPage == pos)
			break;
		m_dCurrentPage = pos;
		GoToPage(m_dCurrentPage);
		break;
	}
	return 0;
}


void CWebCertManPage::OnBquery() 
{
	// TODO: Add your control notification handler code here
	////////////连接数据库///////////////////////////////////////////////////////////
	CString lpszFile = ((CMiniCaApp *)AfxGetApp())->GetAppPath() + "\\MiniCA.mdb";

	CString strConnection ;
	strConnection.Format("Provider=Microsoft.Jet.OLEDB.4.0;\
		Data Source=%s;Persist Security Info=False;Jet OLEDB:Database Password=hpxs", lpszFile);
	
	try
	{
		m_pDb.Open(strConnection);
		m_pRs = CADORecordset(&m_pDb);//ID,USERINFO,KEYLEN,DAY,FRINEDNAME,CERTTYPE,KEYUSAGE,KEYEUSAGE,CERTSTATE,INPUTTIME,MADETIME, REVOKETIME
		m_pRs.Open("Select * From WebCert Order by ID", CADORecordset::openQuery); //adOpenDynamic

		if(!m_pRs.IsEof())		//存在记录
		{
			m_Slider.Enable();
			m_dCurrentPage = 1;
			GoToPage(m_dCurrentPage);
		}

	}
	catch(CADOException & eAdo)
	{
		AddMsg(eAdo.GetErrorMessage(), M_ERROR);
		return;
	}
}

void CWebCertManPage::GoToPage(int nPageIndex, CString strUserId) //strId只是单记录->多记录时候,用于高亮多记录的当前条目的
{
	try
	{
		if(!m_pRs.IsOpen())
			return;
		
		if(m_bIsSignleRec)
			m_pRs.SetPageSize(Single_RecodePerPage);	//设置每页数据个数
		else
			m_pRs.SetPageSize(Multi_RecodePerPage);	//设置每页数据个数

		DWORD dPageCount = m_pRs.GetPageCount();
		
		if(nPageIndex < 1)
		{
			m_dCurrentPage = 1;
			return;
		}
		else if( nPageIndex > dPageCount)
		{
			m_dCurrentPage = dPageCount;
			return;
		}

		//设置滑快范围
		m_Slider.SetRange(1, dPageCount);
		m_Slider.SetPos(m_dCurrentPage);
		CString strText;
		strText.Format("%u/%u", m_dCurrentPage, dPageCount);
		SetDlgItemText(IDC_RECORD, strText);

//		m_Slider.SetMargin( 2, 3, 2, 0 );

		
		m_pRs.SetAbsolutePage(nPageIndex);
		
		int nIndex = -1; //用于记录多记录的当前项
		
		if(m_bIsSignleRec)
		{
			m_ListOne.SetRedraw(FALSE);
			m_ListOne.DeleteAll();
			AddList();
		}
		else
		{
			nIndex = m_List.GetSelectionMark();	//记录当前选中的条目,翻页时候继续保持
			m_List.SetRedraw(FALSE);
			m_List.DeleteAllItems();
		}
		
		CString strUserInfo,
			strId,
			strKeyLen,
			strDay,
			strFrendName,
			strCertType,
			strCertState,
			strKeyUsage,
			strEkeyUsage,
			strInputTime,
			strMadeTime,
			strRevokeTime;
		
		for(register int nRecNumber = 0; nRecNumber < m_pRs.GetPageSize(); nRecNumber++)
		{
			m_pRs.GetFieldValue("ID", strId);
			m_pRs.GetFieldValue("USERINFO", strUserInfo);
			m_pRs.GetFieldValue("KEYLEN", strKeyLen);
			m_pRs.GetFieldValue("DAY", strDay);
			m_pRs.GetFieldValue("FRINEDNAME", strFrendName);
			m_pRs.GetFieldValue("CERTTYPE", strCertType);
			m_pRs.GetFieldValue("KEYUSAGE", strKeyUsage);
			m_pRs.GetFieldValue("KEYEUSAGE", strEkeyUsage);
			m_pRs.GetFieldValue("CERTSTATE", strCertState);
			m_pRs.GetFieldValue("INPUTTIME", strInputTime);
			m_pRs.GetFieldValue("MADETIME", strMadeTime);
			m_pRs.GetFieldValue("REVOKETIME", strRevokeTime);
			
			int uCertState = 0;
			m_pRs.GetFieldValue("CERTSTATE", uCertState);	//证书状态分别对应了四种图标
			
			if(!m_bIsSignleRec)
			{
				//m_List处理********************************begin*******************************
				
				m_List.InsertItem(0, strId, uCertState);
				//		m_List.SetItemText(0, 1, strUserInfo);
				m_List.SetItemText(0, 1, strKeyLen);
				m_List.SetItemText(0, 2, strDay);
				m_List.SetItemText(0, 3, strFrendName);
				m_List.SetItemText(0, 4, strCertType);
				m_List.SetItemText(0, 5, strCertState);
				m_List.SetItemText(0, 6, strInputTime);
				//		m_List.SetItemText(0, 6, strKeyUsage);
				//		m_List.SetItemText(0, 7, strEkeyUsage);
				//m_List处理*********************************end*******************************
			}
			else
			{
				//m_ListOne处理*****************************begin***********************************
				UINT nCount = 0;
				CString strSub,
					strLeft,
					strRight;
				
				//修改根名
				int iGetCurIndex = m_ListOne.GetCurIndex(m_pRootItem);
				m_ListOne.SetItemText(iGetCurIndex, 0, strId);
				CItemInfo *lp = m_ListOne.GetData(m_pRootItem);
				if(lp!=NULL)
				{
					lp->SetImage(uCertState);
					//m_ListOne.UpdateData(m_ItemInfo[FRINEDNAME], lp); //update internal nodes
				}
				LVITEM lvItem;
				lvItem.mask =  LVIF_IMAGE; 
				lvItem.iItem = 0;
				lvItem.iImage = uCertState;
				m_ListOne.SetItem(&lvItem);				//更改图标
				
				
				while(AfxExtractSubString(strSub, strUserInfo, nCount++, ' '))	//分解用户信息 strUserInfo
				{	
					CItemInfo* lpItemInfoi = new CItemInfo();
					
					int n = strSub.Find('=');
					strLeft = strSub.Left(n);
					strRight = strSub.Right(strSub.GetLength() - n -1);
					lpItemInfoi->SetItemText(strLeft);
					lpItemInfoi->SetSubItemText(0, strRight);
					
					lpItemInfoi->SetImage(5);
					m_ListOne.InsertItem(m_ItemInfo[USERINFO], lpItemInfoi);
				}
				
				nCount = 0;
				while(AfxExtractSubString(strSub, strKeyUsage, nCount++, ' '))	//分解密钥用途 strKeyUsage
				{
					CItemInfo* lpItemInfoi = new CItemInfo();
					lpItemInfoi->SetItemText(strSub);
					lpItemInfoi->SetImage(5);
					m_ListOne.InsertItem(m_ItemInfo[KEYUSAGE], lpItemInfoi);
				}
				
				nCount = 0;
				while(AfxExtractSubString(strSub, strEkeyUsage, nCount++, ' '))	//分解扩展密钥用途 strEkeyUsage
				{
					CItemInfo* lpItemInfoi = new CItemInfo();
					lpItemInfoi->SetItemText(strSub);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -