📄 webcertmanpage.cpp
字号:
// 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 + -