CaCertExtPage.cpp
上传用户:dengkfang
上传日期:2008-12-30
资源大小:5233k
文件大小:7k
源码类别:

CA认证

开发平台:

Visual C++

  1. // CaCertExtPage.cpp : implementation file
  2. //
  3. #include "stdafx.h"
  4. #include "minica.h"
  5. #include "CaCertExtPage.h"
  6. #include "MiniMainDlg.h"
  7. #include ".GenericClassLanguage.h"
  8. #include "minict.h"
  9. #ifdef _DEBUG
  10. #define new DEBUG_NEW
  11. #undef THIS_FILE
  12. static char THIS_FILE[] = __FILE__;
  13. #endif
  14. /////////////////////////////////////////////////////////////////////////////
  15. // CCaCertExtPage property page
  16. IMPLEMENT_DYNCREATE(CCaCertExtPage, CPropertyPage)
  17. CCaCertExtPage::CCaCertExtPage() : CPropertyPage(CCaCertExtPage::IDD)
  18. {
  19. //{{AFX_DATA_INIT(CCaCertExtPage)
  20. // NOTE: the ClassWizard will add member initialization here
  21. //}}AFX_DATA_INIT
  22. }
  23. CCaCertExtPage::~CCaCertExtPage()
  24. {
  25. }
  26. void CCaCertExtPage::DoDataExchange(CDataExchange* pDX)
  27. {
  28. CPropertyPage::DoDataExchange(pDX);
  29. //{{AFX_DATA_MAP(CCaCertExtPage)
  30. DDX_Control(pDX, IDC_LIST, m_CheckList);
  31. //}}AFX_DATA_MAP
  32. }
  33. BEGIN_MESSAGE_MAP(CCaCertExtPage, CPropertyPage)
  34. //{{AFX_MSG_MAP(CCaCertExtPage)
  35. ON_NOTIFY(LVN_ITEMCHANGING, IDC_LIST, OnItemchangingList)
  36. //}}AFX_MSG_MAP
  37. END_MESSAGE_MAP()
  38. /////////////////////////////////////////////////////////////////////////////
  39. // CCaCertExtPage message handlers
  40. BOOL CCaCertExtPage::OnInitDialog() 
  41. {
  42. CPropertyPage::OnInitDialog();
  43. // TODO: Add extra initialization here
  44. ClassXP(GetDlgItem(IDC_LIST)->m_hWnd,TRUE);
  45. CImageList * pImgList = ((CMiniCaApp *)AfxGetApp())->GetImgList();
  46. m_CheckList.SetImageList(pImgList,LVSIL_SMALL);//用来改变LISTCTRL行宽度
  47. ListView_SetExtendedListViewStyle(m_CheckList.m_hWnd, LVS_EX_CHECKBOXES | LVS_EX_SUBITEMIMAGES |
  48. LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES);
  49. CRect rect;
  50. m_CheckList.GetClientRect(rect);
  51. int width = rect.Width();
  52. m_CheckList.InsertColumn(0, MiniCT_0400, LVCFMT_LEFT,width/3); //MiniCT_0400 "扩展名称"
  53. m_CheckList.InsertColumn(1, MiniCT_0401, LVCFMT_LEFT,2*width/3); //MiniCT_0401 "内容"
  54. CString m_IniPathName = ((CMiniCaApp *)AfxGetApp())->GetAppPath() +  "\MiniExt.ini";
  55. //加载配置信息
  56. //检测是否已经打开,如果打不开,则重新写入
  57. CFile file;
  58. if(!file.Open(m_IniPathName,CFile::modeRead))
  59. {
  60. /*得到配置,判断是否繁体环境*/
  61. HRSRC hRsrc = 0;
  62. if(CMiniCaApp::IsBig())
  63. hRsrc = FindResource(NULL,MAKEINTRESOURCE(IDR_MINICA_EXT_BG),"INI");
  64. else
  65. hRsrc = FindResource(NULL,MAKEINTRESOURCE(IDR_MINICA_EXT),"INI");
  66. DWORD lenCert = SizeofResource(NULL, hRsrc); 
  67. HGLOBAL hgCert=LoadResource(NULL,hRsrc);
  68. LPSTR lpCert=(LPSTR)LockResource(hgCert);
  69. if(file.Open(m_IniPathName,CFile::modeCreate|CFile::modeWrite)) //存文件
  70. {
  71. file.Write(lpCert,lenCert);
  72. }
  73. }
  74. file.Close();
  75. GetIniInfo(m_IniPathName);
  76. /*LVS_EX_CHECKBOXES 使用检查框 
  77. LVS_EX_FULLROWSELECT 选择整行 
  78. LVS_EX_GRIDLINES 在REPORT中画出分隔线 
  79. LVS_EX_HEADERDRAGDROP LVS_REPORT时可以利用drag-and-drop重新排序 
  80. LVS_EX_SUBITEMIMAGES 允许在子项中显示image 
  81. LVS_EX_TRACKSELECT 当鼠标指到某一项时便自动选择该项 */
  82. m_toolTip.Create(this);
  83. m_toolTip.AddTool(GetDlgItem(IDC_LIST), "证书扩展设置r详细设置请转到配置选项卡");
  84. return TRUE;  // return TRUE unless you set the focus to a control
  85.               // EXCEPTION: OCX Property Pages should return FALSE
  86. }
  87. void CCaCertExtPage::OnItemchangingList(NMHDR* pNMHDR, LRESULT* pResult) 
  88. {
  89. NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;
  90. *pResult = 0;
  91. if (pNMListView->uOldState == 0 && pNMListView->uNewState == 0)
  92. return; // No change
  93. BOOL bPrevState = (BOOL)(((pNMListView->uOldState & 
  94. LVIS_STATEIMAGEMASK)>>12)-1);   // Old check box state
  95. if (bPrevState < 0) // On startup there's no previous state 
  96. bPrevState = 0; // so assign as false (unchecked)
  97. // New check box state
  98. BOOL bChecked=(BOOL)(((pNMListView->uNewState & LVIS_STATEIMAGEMASK)>>12)-1);   
  99. if (bChecked < 0) // On non-checkbox notifications assume false
  100. bChecked = 0; 
  101. if (bPrevState == bChecked) // No change in check box
  102. return;
  103. // Now bChecked holds the new check box state
  104. // ....
  105. }
  106. void CCaCertExtPage::SetLVCheck (WPARAM ItemIndex, BOOL bCheck)
  107. {
  108. ListView_SetItemState(m_CheckList.m_hWnd, ItemIndex, 
  109. UINT((int(bCheck) + 1) << 12), LVIS_STATEIMAGEMASK);
  110. }
  111. //得到检查框状态
  112. //使用在commctl.h中定义的宏 ListView_GetCheckState(hwndLV,i);hwndLV为CONTROL的句柄,i为位置索引。 
  113. void CCaCertExtPage::GetCertInfo(CStaticTreeCtrl * p_WizardTree,
  114.  HTREENODE & hInfoExt) 
  115. {
  116. int nCount = m_CheckList.GetItemCount();
  117. CString info,strTemp,str,str1;
  118. for(int i = nCount - 1 ; i >= 0 ; i--)
  119. {
  120. //检查状态
  121. if(ListView_GetCheckState(m_CheckList.m_hWnd,i))//此项选中
  122. {
  123. str1 = m_CheckList.GetItemText(i,0);
  124. strTemp = m_CheckList.GetItemText(i,1);
  125. str.Format("%s(%d): %s",str1,m_CheckList.GetItemData(i),strTemp);
  126. str.Replace(",",", ");//逗号后面加空格,以免列表混乱
  127. HTREENODE hTemp = p_WizardTree->InsertChild( hInfoExt, _T(str));
  128. if(strTemp.IsEmpty())
  129. {
  130. p_WizardTree->SetNodeColor(hTemp,RGB(128,0,0));
  131. }
  132. }
  133. }
  134. }
  135. /*void CCaCertExtPage::OnKillfocusRichedit(NMHDR* pNMHDR, LRESULT* pResult) 
  136. {
  137. // TODO: Add your control notification handler code here
  138. // AfxMessageBox("kill");
  139. *pResult = 0;
  140. }
  141. void CCaCertExtPage::OnReturnRichedit(NMHDR* pNMHDR, LRESULT* pResult) 
  142. {
  143. // TODO: Add your control notification handler code here
  144. // AfxMessageBox("enter");
  145. *pResult = 0;
  146. }
  147. */
  148. void CCaCertExtPage::GetCert(stuCERTEXT *& pCertExt)
  149. {
  150. int nCount = m_CheckList.GetItemCount();
  151. CString strName,strInside;
  152. DWORD dData = 0;
  153. for(int i = 0;i<nCount;i++)
  154. {
  155. //检查状态
  156. if(ListView_GetCheckState(m_CheckList.m_hWnd,i))//此项选中
  157. {
  158. strName = m_CheckList.GetItemText(i,1);
  159. pCertExt->Add(pCertExt, m_ArrayInside[i], strName);
  160. }
  161. }
  162. }
  163. void CCaCertExtPage::GetIniInfo(CString strIniPath)
  164. {
  165. //删除原来内容
  166. m_CheckList.DeleteAllItems();
  167. //清除链表内容
  168. m_ArrayInside.RemoveAll();
  169. char buf[255] = {0};
  170. char info[255] = {0};
  171. char inside[255] = {0};
  172. GetPrivateProfileString("TOTAL", "ToTal","0",buf,50, strIniPath);
  173. CString strIndex;
  174. int uMax = atoi(buf);
  175. for(int i = 0, j = 0; i<uMax; i++)
  176. {
  177. strIndex.Format("INFO%d",i+1);
  178. //首先读取是否显示标志
  179. GetPrivateProfileString(strIndex, "IsDisp","0",buf,50, strIniPath);
  180. if(atoi(buf) <= 0)
  181. continue;
  182. GetPrivateProfileString(strIndex, "InsideName","0",inside,254, strIniPath);//内部名称
  183. if(strlen(inside) == 0)
  184. continue;
  185. else
  186. m_ArrayInside.Add(inside);
  187. GetPrivateProfileString(strIndex, "Info","0",info,254, strIniPath);
  188. if(strlen(info) == 0)
  189. continue;
  190. GetPrivateProfileString(strIndex, "DispName","0",buf,254, strIniPath);
  191. if(strlen(buf) == 0)
  192. continue;
  193. m_CheckList.InsertItem(j, buf, 7);
  194. m_CheckList.SetItemData(j, i);
  195. m_CheckList.SetItemText(j, 1, info);
  196. GetPrivateProfileString(strIndex, "IsCheck","78",buf,50, strIniPath);//是否选中
  197. SetLVCheck (j, atoi(buf));
  198. j++;
  199. }
  200. }
  201. void CCaCertExtPage::TranslateCT()
  202. {
  203. CHeaderCtrl * pHeader = m_CheckList.GetHeaderCtrl();
  204. if (pHeader)
  205. {
  206. CString str = MiniCT_0400;
  207. HDITEM hdi;
  208. hdi.mask = HDI_TEXT;
  209. hdi.pszText = (LPTSTR)((LPCTSTR)str);
  210. pHeader->SetItem(0, &hdi);
  211. str = MiniCT_0401;
  212. hdi.pszText = (LPTSTR)((LPCTSTR)str);
  213. pHeader->SetItem(1, &hdi);
  214. }
  215. }
  216. BOOL CCaCertExtPage::PreTranslateMessage(MSG* pMsg) 
  217. {
  218. // TODO: Add your specialized code here and/or call the base class
  219. m_toolTip.RelayEvent(pMsg);
  220. return CPropertyPage::PreTranslateMessage(pMsg);
  221. }