cacertinisetpage.cpp

来自「MiniCA V2.0版本源码。《小型CA系统V2.1含源码》发表以来」· C++ 代码 · 共 726 行 · 第 1/2 页

CPP
726
字号
{
	NM_TREEVIEW* pNMTreeView = (NM_TREEVIEW*)pNMHDR;
	// TODO: Add your control notification handler code here
	SelchangedTree(&m_UserTree, pNMTreeView, &m_UserMap);
	*pResult = 0;
}

void CCaCertIniSetPage::OnSelchangedTreeext(NMHDR* pNMHDR, LRESULT* pResult) 
{
	NM_TREEVIEW* pNMTreeView = (NM_TREEVIEW*)pNMHDR;
	// TODO: Add your control notification handler code here
	SelchangedTree(&m_ExtTree, pNMTreeView, &m_ExtMap);
	*pResult = 0;
}

void CCaCertIniSetPage::OnKillfocusEdit2() //更新左侧树中名称
{
	// TODO: Add your control notification handler code here
	CString strDisp;
	GetDlgItemText(IDC_EDIT2, strDisp);
	strDisp.TrimLeft();
	if(!strDisp.IsEmpty())
	{
		if(m_eTreeType == USERTREE)
			m_UserTree.SetItemText(m_hOldItemUser, strDisp);
		else
			m_ExtTree.SetItemText(m_hOldItemExt, strDisp);
	}

}


void CCaCertIniSetPage::OnBSave() 
{
	// TODO: Add your control notification handler code here

	CMap<UINT, UINT, stuINI *, stuINI * > * pMap = NULL;

	CMiniMainDlg * pMain = (CMiniMainDlg *)AfxGetMainWnd();

	BOOL bInfo = ((CButton *)GetDlgItem(IDC_CAINI_RADIO1))->GetCheck();

	CString strIni;
	if(bInfo)//保存信息
	{
		//首先更新当前选中的树项信息,因为如果树项不发生改变,信息不会被更新,这时候需要强制更新
		strIni = ((CMiniCaApp *)AfxGetApp())->GetAppPath() +  "\\MiniCA.ini";
		pMap = &m_UserMap;
		UpdateInfo(&m_UserTree, m_UserTree.GetSelectedItem(), pMap);

	}
	else//保存扩展
	{
		//首先更新当前选中的树项信息,因为如果树项不发生改变,信息不会被更新,这时候需要强制更新
		strIni = ((CMiniCaApp *)AfxGetApp())->GetAppPath() +  "\\MiniExt.ini";
		pMap = &m_ExtMap;
		UpdateInfo(&m_ExtTree, m_ExtTree.GetSelectedItem(), pMap);
	}

	for(int index = 1; index <= pMap->GetCount(); index++)
	{
		stuINI * pstuOld = NULL;
		if(pMap->Lookup(index-1, pstuOld))	//结构MAP从1开始
		{
			CString strIndex, strTemp;
			strIndex.Format("INFO%d", index);

			strTemp.Format("%d", pstuOld->bIsDisp);
			WritePrivateProfileString(strIndex, "IsDisp", strTemp, strIni);

			WritePrivateProfileString(strIndex, "InsideName", pstuOld->cInsideName, strIni);
			WritePrivateProfileString(strIndex, "DispName", pstuOld->cDispName, strIni);
			WritePrivateProfileString(strIndex, "Info", pstuOld->cInfo, strIni);

			strTemp.Format("%d", pstuOld->IsCheck);
			WritePrivateProfileString(strIndex, "IsCheck", strTemp, strIni);

		}
	}
	if(bInfo)//保存信息
	{
		CCaCertWizardSheet * pWizard = (CCaCertWizardSheet *)(pMain->GetPage("CCaCertWizardSheet"));
		if(pWizard)
		{
			CCaCertInfoPage * pInfoPage = (CCaCertInfoPage *)(pWizard->GetPage("CCaCertInfoPage"));
			if(pInfoPage)
				pInfoPage->GetIniInfo(strIni);
		}
	}
	else
	{
		CCaCertWizardSheet * pWizard = (CCaCertWizardSheet *)(pMain->GetPage("CCaCertWizardSheet"));
		if(pWizard)
		{
			CCaCertExtPage * pExtPage = (CCaCertExtPage *)(pWizard->GetPage("CCaCertExtPage"));
			if(pExtPage)
				pExtPage->GetIniInfo(strIni);
		}
	}

}

//切换证书信息与证书配置
void CCaCertIniSetPage::OnRadio1() //从EXT -> USER
{
	// TODO: Add your control notification handler code here
	GetDlgItem(IDC_TREEUSER)->ShowWindow(SW_SHOW);
	GetDlgItem(IDC_TREEEXT)->ShowWindow(SW_HIDE);
	m_eTreeType = USERTREE;

	//更新EXT
	UpdateInfo(&m_ExtTree, m_ExtTree.GetSelectedItem(), &m_ExtMap);


	HTREEITEM hItem = m_UserTree.GetSelectedItem();
	if(hItem)
	{
		DWORD dData = m_UserTree.GetItemData(hItem);
		stuINI * pstuOld = NULL;
		if(m_UserMap.Lookup(dData, pstuOld))	//结构MAP从1开始
		{
			SetDlgItemText(IDC_EDIT1, pstuOld->cInsideName);
			SetDlgItemText(IDC_EDIT2, pstuOld->cDispName);
			SetDlgItemText(IDC_EDIT3, pstuOld->cInfo);
			((CButton *)GetDlgItem(IDC_CAINI_CHECK1))->SetCheck(pstuOld->bIsDisp);
			((CButton *)GetDlgItem(IDC_CAINI_CHECK2))->SetCheck(pstuOld->IsCheck);

		}
	}

}

void CCaCertIniSetPage::OnRadio2() //从USER -> EXT
{
	// TODO: Add your control notification handler code here
	GetDlgItem(IDC_TREEUSER)->ShowWindow(SW_HIDE);
	GetDlgItem(IDC_TREEEXT)->ShowWindow(SW_SHOW);
	m_eTreeType = EXTTREE;

	//更新USER
	UpdateInfo(&m_UserTree, m_UserTree.GetSelectedItem(), &m_UserMap);

	HTREEITEM hItem = m_ExtTree.GetSelectedItem();
	if(hItem)
	{
		DWORD dData = m_ExtTree.GetItemData(hItem);
		stuINI * pstuOld = NULL;
		if(m_ExtMap.Lookup(dData, pstuOld))	//结构MAP从1开始
		{
			SetDlgItemText(IDC_EDIT1, pstuOld->cInsideName);
			SetDlgItemText(IDC_EDIT2, pstuOld->cDispName);
			SetDlgItemText(IDC_EDIT3, pstuOld->cInfo);
			((CButton *)GetDlgItem(IDC_CAINI_CHECK1))->SetCheck(pstuOld->bIsDisp);
			((CButton *)GetDlgItem(IDC_CAINI_CHECK2))->SetCheck(pstuOld->IsCheck);
		}
	}
}

void CCaCertIniSetPage::OnBResert() 
{
	// TODO: Add your control notification handler code here
	
}

void CCaCertIniSetPage::UpdateInfo(CTreeCtrl * pTree, const HTREEITEM hItem, 
								   CMap<UINT, UINT, stuINI *, stuINI * > * pMap)	//信息项发生改变时候,更新MAP
{
	if(!pTree || !hItem || !pMap)
		return;
	DWORD dData = pTree->GetItemData(hItem);
	if(dData != -1)
	{
		CString strInside,
			strDisp,
			strInfo;
		GetDlgItemText(IDC_EDIT1, strInside);
		GetDlgItemText(IDC_EDIT2, strDisp);
		if(strDisp.IsEmpty())
		{
			strDisp = pTree->GetItemText(hItem);
		}
		GetDlgItemText(IDC_EDIT3, strInfo);

		BOOL bIsDisp = ((CButton *)GetDlgItem(IDC_CAINI_CHECK1))->GetCheck();
		BOOL bIsCheck = ((CButton *)GetDlgItem(IDC_CAINI_CHECK2))->GetCheck();
		
		
		//删除原来映射
		stuINI * pstuOld = NULL;
		if(pMap->Lookup(dData, pstuOld))
		{
			delete [] pstuOld;
		}
		
		//增加新映射
		stuINI * pstuIni = new stuINI(bIsDisp, strInside.GetBuffer(255), 
			strDisp.GetBuffer(255), strInfo.GetBuffer(255), bIsCheck);
		pMap->SetAt(dData, pstuIni);
		
		//如果映射不合法,则显示图标为非法  显示在列表中,并且有空项为不合法
		if(bIsDisp)
		{
			if(strInside.IsEmpty() || strDisp.IsEmpty() || strInfo.IsEmpty())		//非法
				pTree->SetItemImage(hItem, 16, 16);
			else
				pTree->SetItemImage(hItem, 1, 1);
		}
		else//显示空白
		{
			pTree->SetItemImage(hItem, 0, 0);
		}
	}
	
}

void CCaCertIniSetPage::OnCheck1() //界面中显示
{
	// TODO: Add your control notification handler code here
	CTreeCtrl * pCtrl = NULL;
	if(m_eTreeType == USERTREE)
	{
		pCtrl = &m_UserTree;
	}
	else
	{
		pCtrl = &m_ExtTree;
	}
	HTREEITEM hItem = pCtrl->GetSelectedItem();
	BOOL bIsDisp =  ((CButton *)GetDlgItem(IDC_CAINI_CHECK1))->GetCheck();
	if(bIsDisp) //如果显示
	{
		//判断是否合法,包括,右侧2项内容是否齐全
		CString strInside,
				strDisp,
				strInfo;
		GetDlgItemText(IDC_EDIT1, strInside);
		GetDlgItemText(IDC_EDIT3, strInfo);

		if(strInside.IsEmpty() || strInfo.IsEmpty())
		{
			pCtrl->SetItemImage(hItem, 16, 16);
		}
		else
			pCtrl->SetItemImage(hItem, 1, 1);

	}
	else
		pCtrl->SetItemImage(hItem, 0, 0);
}

void CCaCertIniSetPage::OnClickTree(NMHDR* pNMHDR, LRESULT* pResult) //用户信息
{
	// TODO: Add your control notification handler code here
	ClickTree(&m_UserTree);
	*pResult = 0;
}

void CCaCertIniSetPage::OnClickTreeext(NMHDR* pNMHDR, LRESULT* pResult) 
{
	// TODO: Add your control notification handler code here
	ClickTree(&m_ExtTree);
	*pResult = 0;
}

void CCaCertIniSetPage::ClickTree(CTreeCtrl *pTree)
{
	CPoint point;
	GetCursorPos(&point); // 当前鼠标坐标
	CPoint PointInTree = point;
	pTree->ScreenToClient( &PointInTree);
	
	UINT nFlag;
	HTREEITEM hItem = pTree->HitTest( PointInTree, &nFlag);
	if(hItem == NULL)
	{
		return;
	}

	pTree->SelectItem(hItem);
	
	if (nFlag&TVHT_ONITEMICON) //点种图标,则选择或不选
	{
		int nImage,nSelectedImage,nState;
		pTree->GetItemImage(hItem,nImage,nSelectedImage);

		CString strInside,
				strDisp,
				strInfo;
			GetDlgItemText(IDC_EDIT1, strInside);
			GetDlgItemText(IDC_EDIT3, strInfo);

		BOOL bInvalid = FALSE;
		if(strInside.IsEmpty() || strInfo.IsEmpty()) //非法
			bInvalid = TRUE;

		if(nImage <3) // 0 -> 1; 1 -> 0
		{
			
			if(nImage == 0) //0 -> 1,需要判断//判断是否合法,包括,右侧2项内容是否齐全
			{
				
				if(bInvalid) //非法
				{
					pTree->SetItemImage(hItem, 16, 16);
				}
				else
				{
					nState = !nImage;
					pTree->SetItemImage(hItem,nState,nState);
					//nState 标示选中状态 0-未选择 1-以选择
					((CButton *)GetDlgItem(IDC_CAINI_CHECK1))->SetCheck(nState);
				}
			}
			else // 1 -> 0
			{
				nState = !nImage;
				pTree->SetItemImage(hItem,nState,nState);
				//nState 标示选中状态 0-未选择 1-以选择
				((CButton *)GetDlgItem(IDC_CAINI_CHECK1))->SetCheck(nState);
			}
		}
		else if(nImage == 16)	//如果合法,可以变成选中,非法只能变成不选
		{
			if(bInvalid) //非法
			{
				pTree->SetItemImage(hItem, 0, 0);
				((CButton *)GetDlgItem(IDC_CAINI_CHECK1))->SetCheck(0);
			}
			else
			{
				pTree->SetItemImage(hItem, 1, 1);
				((CButton *)GetDlgItem(IDC_CAINI_CHECK1))->SetCheck(1);
			}
		}
	}

}


void CCaCertIniSetPage::TranslateCT()
{
	SetDlgItemText(IDC_CAINI_RADIO1,	MiniCT_10401);
	SetDlgItemText(IDC_CAINI_RADIO2,	MiniCT_10402);
	SetDlgItemText(IDC_CAINI_CHECK1,	MiniCT_10403);
	SetDlgItemText(IDC_CAINI_CHECK2,	MiniCT_10404);
	SetDlgItemText(IDC_CAINI_STATIC1,	MiniCT_10405);
	SetDlgItemText(IDC_CAINI_STATIC2,	MiniCT_10406);
	SetDlgItemText(IDC_CAINI_STATIC3,	MiniCT_10407);
	SetDlgItemText(IDC_CAINI_STATIC4,	MiniCT_10408);
	SetDlgItemText(IDC_B_SAVE,			MiniCT_10409);
	SetDlgItemText(IDC_B_RESERT,		MiniCT_10410);
}

BOOL CCaCertIniSetPage::PreTranslateMessage(MSG* pMsg) 
{
	// TODO: Add your specialized code here and/or call the base class
	{
		// Let the ToolTip process this message.
		m_toolTip.RelayEvent(pMsg);
	}
	return CPropertyPage::PreTranslateMessage(pMsg);
}

⌨️ 快捷键说明

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