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

CA认证

开发平台:

Visual C++

  1. // CaCertIniSetPage.cpp : implementation file
  2. //
  3. #include "stdafx.h"
  4. #include "minica.h"
  5. #include "CaCertIniSetPage.h"
  6. #include "MiniMainDlg.h"
  7. #include "CaCertWizardSheet.h"
  8. #include ".GenericClassLanguage.h"
  9. #include "minict.h"
  10. #ifdef _DEBUG
  11. #define new DEBUG_NEW
  12. #undef THIS_FILE
  13. static char THIS_FILE[] = __FILE__;
  14. #endif
  15. /////////////////////////////////////////////////////////////////////////////
  16. // CCaCertIniSetPage property page
  17. IMPLEMENT_DYNCREATE(CCaCertIniSetPage, CPropertyPage)
  18. CCaCertIniSetPage::CCaCertIniSetPage() : CPropertyPage(CCaCertIniSetPage::IDD)
  19. {
  20. //{{AFX_DATA_INIT(CCaCertIniSetPage)
  21. //}}AFX_DATA_INIT
  22. m_hOldItemUser = NULL;
  23. m_hOldItemExt = NULL;
  24. m_UserMap.InitHashTable(sizeof(stuINI) + 20);
  25. m_ExtMap.InitHashTable(sizeof(stuINI) + 20);
  26. }
  27. CCaCertIniSetPage::~CCaCertIniSetPage()
  28. {
  29. //清除结构MAP,释放内存空间
  30. POSITION pos = m_UserMap.GetStartPosition();
  31. while(pos != NULL)
  32. {
  33. UINT uIndex = 0;
  34. stuINI * pstuIni = NULL;
  35. m_UserMap.GetNextAssoc(pos, uIndex, pstuIni);
  36. delete pstuIni;
  37. }
  38. m_UserMap.RemoveAll();
  39. pos = m_ExtMap.GetStartPosition();
  40. while(pos != NULL)
  41. {
  42. UINT uIndex = 0;
  43. stuINI * pstuIni = NULL;
  44. m_ExtMap.GetNextAssoc(pos, uIndex, pstuIni);
  45. delete pstuIni;
  46. }
  47. m_ExtMap.RemoveAll();
  48. }
  49. void CCaCertIniSetPage::DoDataExchange(CDataExchange* pDX)
  50. {
  51. CPropertyPage::DoDataExchange(pDX);
  52. //{{AFX_DATA_MAP(CCaCertIniSetPage)
  53. DDX_Control(pDX, IDC_TREEEXT, m_ExtTree);
  54. DDX_Control(pDX, IDC_TREEUSER, m_UserTree);
  55. DDX_Control(pDX, IDC_B_SAVE, m_BSave);
  56. DDX_Control(pDX, IDC_B_RESERT, m_BResert);
  57. //}}AFX_DATA_MAP
  58. }
  59. BEGIN_MESSAGE_MAP(CCaCertIniSetPage, CPropertyPage)
  60. //{{AFX_MSG_MAP(CCaCertIniSetPage)
  61. ON_NOTIFY(TVN_SELCHANGED, IDC_TREEUSER, OnSelchangedTree)
  62. ON_EN_KILLFOCUS(IDC_EDIT2, OnKillfocusEdit2)
  63. ON_BN_CLICKED(IDC_B_SAVE, OnBSave)
  64. ON_BN_CLICKED(IDC_CAINI_RADIO1, OnRadio1)
  65. ON_BN_CLICKED(IDC_CAINI_RADIO2, OnRadio2)
  66. ON_BN_CLICKED(IDC_B_RESERT, OnBResert)
  67. ON_BN_CLICKED(IDC_CAINI_CHECK1, OnCheck1)
  68. ON_NOTIFY(NM_CLICK, IDC_TREEUSER, OnClickTree)
  69. ON_NOTIFY(NM_CLICK, IDC_TREEEXT, OnClickTreeext)
  70. ON_NOTIFY(TVN_SELCHANGED, IDC_TREEEXT, OnSelchangedTreeext)
  71. //}}AFX_MSG_MAP
  72. ON_NOTIFY_EX(TTN_NEEDTEXT, 0, OnToolTipNotify)
  73. END_MESSAGE_MAP()
  74. /////////////////////////////////////////////////////////////////////////////
  75. // CCaCertIniSetPage message handlers
  76. BOOL CCaCertIniSetPage::OnToolTipNotify( UINT id, NMHDR * pTTTStruct, LRESULT * pResult )
  77. {
  78. TOOLTIPTEXT *pTTT = (TOOLTIPTEXT *)pTTTStruct;    
  79.     UINT nID = pTTTStruct->idFrom;
  80. BOOL bInfoSetup = ((CButton * )GetDlgItem(IDC_CAINI_RADIO1))->GetCheck();//數證信息
  81. CString strText;
  82. switch(nID)
  83. {
  84. case IDC_CAINI_CHECK1:
  85. if(bInfoSetup)
  86. {
  87. strText = "是否在信息选项卡列表中出现r当前条目是否出现在信息n选项卡的基本信息列表中";
  88. }
  89. else
  90. {
  91. strText = "是否在扩展选项卡列表中出现r当前条目是否出现在扩展n选项卡的列表中";
  92. }
  93. _tcscpy(pTTT->szText, strText);//设置
  94. return TRUE;
  95. case IDC_CAINI_CHECK2:
  96. if(bInfoSetup)
  97. {
  98. strText = "是否在信息选项卡列表中选中r当前条目是否在信息选项卡n列表中处于选中状态";
  99. }
  100. else
  101. {
  102. strText = "是否在扩展选项卡列表中选中r当前条目是否在扩展选项卡n列表中处于选中状态";
  103. }
  104. _tcscpy(pTTT->szText,strText);//设置
  105. return TRUE;
  106. case IDC_EDIT1:
  107. if(bInfoSetup)
  108. {
  109. strText = "条目在证书信息中内部标识r证书信息程序内部使用的标识n详细信息请参阅RFC3383";
  110. }
  111. else
  112. {
  113. strText = "条目在证书扩展中内部标识r证书扩展程序内部使用的标识n详细信息请参阅RFC3383";
  114. }
  115. _tcscpy(pTTT->szText,strText);//设置
  116. return TRUE;
  117. case IDC_EDIT2:
  118. if(bInfoSetup)
  119. {
  120. strText = "条目在信息选项卡列表中显示名称r当前条目在信息选项卡n基本信息列表中的显示名称";
  121. }
  122. else
  123. {
  124. strText = "条目在扩展选项卡列表中显示名称r当前条目在扩展选项卡列表的显示名称";
  125. }
  126. _tcscpy(pTTT->szText,strText);//设置
  127. return TRUE;
  128. case IDC_EDIT3: //PKCS12
  129. if(bInfoSetup)
  130. {
  131. strText = "条目当前内容r当前条目在信息选项卡n基本信息列表中显示的内容";
  132. }
  133. else
  134. {
  135. strText = "条目当前内容r当前条目在扩展选项卡n列表中显示的内容";
  136. }
  137. _tcscpy(pTTT->szText,strText);//设置
  138. return TRUE;
  139. case IDC_B_RESERT: 
  140. if(bInfoSetup)
  141. {
  142. _tcscpy(pTTT->szText, "重置信息选项卡配置r操作不可恢复");//设置
  143. }
  144. else
  145. {
  146. _tcscpy(pTTT->szText, "重置扩展选项卡配置r操作不可恢复");//设置
  147. }
  148. return TRUE;
  149. case IDC_B_SAVE: //  
  150. if(bInfoSetup)
  151. {
  152. _tcscpy(pTTT->szText, "保存信息选项卡列表r保存后配置生效");//设置
  153. }
  154. else
  155. {
  156. _tcscpy(pTTT->szText, "保存扩展选项卡列表r保存后配置生效");//设置
  157. }
  158. return TRUE;
  159. }
  160. return FALSE;
  161. }
  162. /*CString CCaCertIniSetPage::GetCertPath(int dIndex)
  163. {
  164. //遍历树,得到dIndex对应的路径信息
  165. if(dIndex >= m_PathStrArray.GetSize() - 1)
  166. return "";
  167. return m_PathStrArray[dIndex];
  168. }*/
  169. BOOL CCaCertIniSetPage::OnInitDialog() 
  170. {
  171. CPropertyPage::OnInitDialog();
  172. // TODO: Add extra initialization here
  173. if(!((CMiniCaApp *)AfxGetApp())->IsXpStyle())
  174. {
  175. ClassXP(GetDlgItem(IDC_CAINI_CHECK1)->m_hWnd,TRUE);
  176. ClassXP(GetDlgItem(IDC_CAINI_CHECK2)->m_hWnd,TRUE);
  177. ClassXP(GetDlgItem(IDC_CAINI_RADIO1)->m_hWnd,TRUE);
  178. ClassXP(GetDlgItem(IDC_CAINI_RADIO2)->m_hWnd,TRUE);
  179. ClassXP(GetDlgItem(IDC_EDIT1)->m_hWnd,TRUE);
  180. ClassXP(GetDlgItem(IDC_EDIT2)->m_hWnd,TRUE);
  181. ClassXP(GetDlgItem(IDC_EDIT3)->m_hWnd,TRUE);
  182. }
  183. CXPStyleButtonST::SetAllThemeHelper(this, ((CMiniCaApp *)AfxGetApp())->GetThemeHelperST());
  184. m_BSave.SetIcon(IDI_ICON_VIEW);
  185. m_BSave.OffsetColor(CButtonST::BTNST_COLOR_BK_IN, 30);
  186. m_BResert.SetIcon(IDI_ICON19);
  187. m_BResert.OffsetColor(CButtonST::BTNST_COLOR_BK_IN, 30);
  188. ((CButton *)GetDlgItem(IDC_CAINI_RADIO1))->SetCheck(1);
  189. CImageList * pImgList = ((CMiniCaApp *)AfxGetApp())->GetImgList();
  190. m_UserTree.SetImageList(pImgList,TVSIL_NORMAL);//用来改变LISTCTRL行宽度
  191. m_ExtTree.SetImageList(pImgList,TVSIL_NORMAL);//用来改变LISTCTRL行宽度
  192. GetIniInfo(EXTTREE, ((CMiniCaApp *)AfxGetApp())->GetAppPath() +  "\MiniExt.ini");
  193. GetIniInfo(USERTREE, ((CMiniCaApp *)AfxGetApp())->GetAppPath() +  "\MiniCA.ini");
  194. GetDlgItem(IDC_TREEUSER)->ShowWindow(SW_SHOW);
  195. GetDlgItem(IDC_TREEEXT)->ShowWindow(SW_HIDE);
  196. m_eTreeType = USERTREE;
  197. m_toolTip.Create(this);
  198. m_toolTip.AddTool(GetDlgItem(IDC_TREEUSER), "数证信息配置树");
  199. m_toolTip.AddTool(GetDlgItem(IDC_TREEEXT), "数证扩展配置树");
  200. m_toolTip.AddTool(GetDlgItem(IDC_CAINI_RADIO1), "切换到数证信息配置");
  201. m_toolTip.AddTool(GetDlgItem(IDC_CAINI_RADIO2), "切换到数证扩展配置");
  202. m_toolTip.AddTool(GetDlgItem(IDC_CAINI_CHECK1), LPSTR_TEXTCALLBACK);
  203. m_toolTip.AddTool(GetDlgItem(IDC_CAINI_CHECK2), LPSTR_TEXTCALLBACK);
  204. m_toolTip.AddTool(GetDlgItem(IDC_EDIT1), LPSTR_TEXTCALLBACK);
  205. m_toolTip.AddTool(GetDlgItem(IDC_EDIT2), LPSTR_TEXTCALLBACK);
  206. m_toolTip.AddTool(GetDlgItem(IDC_EDIT3), LPSTR_TEXTCALLBACK);
  207. m_toolTip.AddTool(GetDlgItem(IDC_B_RESERT), LPSTR_TEXTCALLBACK);
  208. m_toolTip.AddTool(GetDlgItem(IDC_B_SAVE), LPSTR_TEXTCALLBACK);
  209. return TRUE;  // return TRUE unless you set the focus to a control
  210.               // EXCEPTION: OCX Property Pages should return FALSE
  211. }
  212. void CCaCertIniSetPage::GetIniInfo(eTreeType eType, CString strIniPath)
  213. {
  214. CMap<UINT, UINT, stuINI *, stuINI * > * pMap = NULL;
  215. CTreeCtrl * pTree = NULL;
  216. if(eType == USERTREE)
  217. {
  218. pMap = &m_UserMap;
  219. pTree = &m_UserTree;
  220. }
  221. else
  222. {
  223. pMap = &m_ExtMap;
  224. pTree = &m_ExtTree;
  225. }
  226. //清除结构MAP,释放内存空间
  227. POSITION pos = pMap->GetStartPosition();
  228. while(pos != NULL)
  229. {
  230. UINT uIndex = 0;
  231. stuINI * pstuIni = NULL;
  232. pMap->GetNextAssoc(pos, uIndex, pstuIni);
  233. delete pstuIni;
  234. }
  235. pMap->RemoveAll();
  236. pTree->SetRedraw(FALSE);
  237. //删除所有树信息
  238. pTree->DeleteAllItems();
  239. HTREEITEM hPathItem = TVI_ROOT;//pTree.InsertItem(strTreeName, 0, 0);
  240. pTree->SetItemData(hPathItem, -1);
  241. char isdisp[5] = {0};
  242. char info[255] = {0};
  243. char inside[255] = {0};
  244. char dispname[255] = {0};
  245. char ischeck[5] = {0};
  246. GetPrivateProfileString("TOTAL", "ToTal","0",info,50, strIniPath);
  247. CString strIndex;
  248. int uMax = atoi(info);
  249. for(int i = 0; i<uMax; i++)
  250. {
  251. strIndex.Format("INFO%d",i+1);
  252. //首先读取是否显示标志
  253. GetPrivateProfileString(strIndex, "IsDisp","0",isdisp,5, strIniPath);
  254. GetPrivateProfileString(strIndex, "InsideName","0",inside,254, strIniPath);//内部名称
  255. GetPrivateProfileString(strIndex, "DispName","0",dispname,254, strIniPath);
  256. GetPrivateProfileString(strIndex, "Info","0",info,254, strIniPath);
  257. GetPrivateProfileString(strIndex, "IsCheck","78",ischeck,5, strIniPath);//是否选中
  258. stuINI * pstuIni = new stuINI(atoi(isdisp), inside, dispname, info, atoi(ischeck));
  259. HTREEITEM hItem = pTree->InsertItem(dispname, 0, 0, hPathItem);
  260. //如果映射不合法,则显示图标为非法  显示在列表中,并且有空项为不合法
  261. if(atoi(isdisp) && (strlen(inside) == 0 || strlen(dispname) == 0 || strlen(info) == 0))
  262. {
  263. //非法
  264. pTree->SetItemImage(hItem, 16, 16);
  265. }
  266. else if(atoi(isdisp)) //如果显示
  267. {
  268. pTree->SetItemImage(hItem, 1, 1);
  269. }
  270. pTree->SetItemData(hItem, i);
  271. pMap->SetAt(i, pstuIni);
  272. }
  273. pTree->Expand(pTree->GetRootItem(), TVE_EXPAND);
  274. pTree->SelectItem(pTree->GetFirstVisibleItem());//设置选中
  275. pTree->SetRedraw();
  276. }
  277. void CCaCertIniSetPage::SelchangedTree(CTreeCtrl * pTree, NM_TREEVIEW* pNMTreeView,
  278.    CMap<UINT, UINT, stuINI *, stuINI * > * pMap)
  279. {
  280. //保存旧信息,显示新信息
  281. if(pNMTreeView->itemOld.hItem) //旧信息可能发生改变,这时候需要保存
  282. {
  283. UpdateInfo(pTree, pNMTreeView->itemOld.hItem, pMap);
  284. }
  285. if(pNMTreeView->itemNew.hItem)
  286. {
  287. DWORD dData = pTree->GetItemData(pNMTreeView->itemNew.hItem);
  288. if(dData != -1)
  289. {
  290. stuINI * pstuIni = (*pMap)[dData];
  291. if(pstuIni)
  292. {
  293. SetDlgItemText(IDC_EDIT1, pstuIni->cInsideName);
  294. SetDlgItemText(IDC_EDIT2, pstuIni->cDispName);
  295. SetDlgItemText(IDC_EDIT3, pstuIni->cInfo);
  296. ((CButton *)GetDlgItem(IDC_CAINI_CHECK1))->SetCheck(pstuIni->bIsDisp);
  297. ((CButton *)GetDlgItem(IDC_CAINI_CHECK2))->SetCheck(pstuIni->IsCheck);
  298. }
  299. }
  300. else
  301. {
  302. SetDlgItemText(IDC_EDIT1, "");
  303. SetDlgItemText(IDC_EDIT2, "");
  304. SetDlgItemText(IDC_EDIT3, "");
  305. ((CButton *)GetDlgItem(IDC_CAINI_CHECK1))->SetCheck(0);
  306. ((CButton *)GetDlgItem(IDC_CAINI_CHECK2))->SetCheck(0);
  307. }
  308. if(m_eTreeType == USERTREE)
  309. m_hOldItemUser = pNMTreeView->itemNew.hItem;
  310. else
  311. m_hOldItemExt = pNMTreeView->itemNew.hItem;
  312. }
  313. }
  314. void CCaCertIniSetPage::OnSelchangedTree(NMHDR* pNMHDR, LRESULT* pResult) 
  315. {
  316. NM_TREEVIEW* pNMTreeView = (NM_TREEVIEW*)pNMHDR;
  317. // TODO: Add your control notification handler code here
  318. SelchangedTree(&m_UserTree, pNMTreeView, &m_UserMap);
  319. *pResult = 0;
  320. }
  321. void CCaCertIniSetPage::OnSelchangedTreeext(NMHDR* pNMHDR, LRESULT* pResult) 
  322. {
  323. NM_TREEVIEW* pNMTreeView = (NM_TREEVIEW*)pNMHDR;
  324. // TODO: Add your control notification handler code here
  325. SelchangedTree(&m_ExtTree, pNMTreeView, &m_ExtMap);
  326. *pResult = 0;
  327. }
  328. void CCaCertIniSetPage::OnKillfocusEdit2() //更新左侧树中名称
  329. {
  330. // TODO: Add your control notification handler code here
  331. CString strDisp;
  332. GetDlgItemText(IDC_EDIT2, strDisp);
  333. strDisp.TrimLeft();
  334. if(!strDisp.IsEmpty())
  335. {
  336. if(m_eTreeType == USERTREE)
  337. m_UserTree.SetItemText(m_hOldItemUser, strDisp);
  338. else
  339. m_ExtTree.SetItemText(m_hOldItemExt, strDisp);
  340. }
  341. }
  342. void CCaCertIniSetPage::OnBSave() 
  343. {
  344. // TODO: Add your control notification handler code here
  345. CMap<UINT, UINT, stuINI *, stuINI * > * pMap = NULL;
  346. CMiniMainDlg * pMain = (CMiniMainDlg *)AfxGetMainWnd();
  347. BOOL bInfo = ((CButton *)GetDlgItem(IDC_CAINI_RADIO1))->GetCheck();
  348. CString strIni;
  349. if(bInfo)//保存信息
  350. {
  351. //首先更新当前选中的树项信息,因为如果树项不发生改变,信息不会被更新,这时候需要强制更新
  352. strIni = ((CMiniCaApp *)AfxGetApp())->GetAppPath() +  "\MiniCA.ini";
  353. pMap = &m_UserMap;
  354. UpdateInfo(&m_UserTree, m_UserTree.GetSelectedItem(), pMap);
  355. }
  356. else//保存扩展
  357. {
  358. //首先更新当前选中的树项信息,因为如果树项不发生改变,信息不会被更新,这时候需要强制更新
  359. strIni = ((CMiniCaApp *)AfxGetApp())->GetAppPath() +  "\MiniExt.ini";
  360. pMap = &m_ExtMap;
  361. UpdateInfo(&m_ExtTree, m_ExtTree.GetSelectedItem(), pMap);
  362. }
  363. for(int index = 1; index <= pMap->GetCount(); index++)
  364. {
  365. stuINI * pstuOld = NULL;
  366. if(pMap->Lookup(index-1, pstuOld)) //结构MAP从1开始
  367. {
  368. CString strIndex, strTemp;
  369. strIndex.Format("INFO%d", index);
  370. strTemp.Format("%d", pstuOld->bIsDisp);
  371. WritePrivateProfileString(strIndex, "IsDisp", strTemp, strIni);
  372. WritePrivateProfileString(strIndex, "InsideName", pstuOld->cInsideName, strIni);
  373. WritePrivateProfileString(strIndex, "DispName", pstuOld->cDispName, strIni);
  374. WritePrivateProfileString(strIndex, "Info", pstuOld->cInfo, strIni);
  375. strTemp.Format("%d", pstuOld->IsCheck);
  376. WritePrivateProfileString(strIndex, "IsCheck", strTemp, strIni);
  377. }
  378. }
  379. if(bInfo)//保存信息
  380. {
  381. CCaCertWizardSheet * pWizard = (CCaCertWizardSheet *)(pMain->GetPage("CCaCertWizardSheet"));
  382. if(pWizard)
  383. {
  384. CCaCertInfoPage * pInfoPage = (CCaCertInfoPage *)(pWizard->GetPage("CCaCertInfoPage"));
  385. if(pInfoPage)
  386. pInfoPage->GetIniInfo(strIni);
  387. }
  388. }
  389. else
  390. {
  391. CCaCertWizardSheet * pWizard = (CCaCertWizardSheet *)(pMain->GetPage("CCaCertWizardSheet"));
  392. if(pWizard)
  393. {
  394. CCaCertExtPage * pExtPage = (CCaCertExtPage *)(pWizard->GetPage("CCaCertExtPage"));
  395. if(pExtPage)
  396. pExtPage->GetIniInfo(strIni);
  397. }
  398. }
  399. }
  400. //切换证书信息与证书配置
  401. void CCaCertIniSetPage::OnRadio1() //从EXT -> USER
  402. {
  403. // TODO: Add your control notification handler code here
  404. GetDlgItem(IDC_TREEUSER)->ShowWindow(SW_SHOW);
  405. GetDlgItem(IDC_TREEEXT)->ShowWindow(SW_HIDE);
  406. m_eTreeType = USERTREE;
  407. //更新EXT
  408. UpdateInfo(&m_ExtTree, m_ExtTree.GetSelectedItem(), &m_ExtMap);
  409. HTREEITEM hItem = m_UserTree.GetSelectedItem();
  410. if(hItem)
  411. {
  412. DWORD dData = m_UserTree.GetItemData(hItem);
  413. stuINI * pstuOld = NULL;
  414. if(m_UserMap.Lookup(dData, pstuOld)) //结构MAP从1开始
  415. {
  416. SetDlgItemText(IDC_EDIT1, pstuOld->cInsideName);
  417. SetDlgItemText(IDC_EDIT2, pstuOld->cDispName);
  418. SetDlgItemText(IDC_EDIT3, pstuOld->cInfo);
  419. ((CButton *)GetDlgItem(IDC_CAINI_CHECK1))->SetCheck(pstuOld->bIsDisp);
  420. ((CButton *)GetDlgItem(IDC_CAINI_CHECK2))->SetCheck(pstuOld->IsCheck);
  421. }
  422. }
  423. }
  424. void CCaCertIniSetPage::OnRadio2() //从USER -> EXT
  425. {
  426. // TODO: Add your control notification handler code here
  427. GetDlgItem(IDC_TREEUSER)->ShowWindow(SW_HIDE);
  428. GetDlgItem(IDC_TREEEXT)->ShowWindow(SW_SHOW);
  429. m_eTreeType = EXTTREE;
  430. //更新USER
  431. UpdateInfo(&m_UserTree, m_UserTree.GetSelectedItem(), &m_UserMap);
  432. HTREEITEM hItem = m_ExtTree.GetSelectedItem();
  433. if(hItem)
  434. {
  435. DWORD dData = m_ExtTree.GetItemData(hItem);
  436. stuINI * pstuOld = NULL;
  437. if(m_ExtMap.Lookup(dData, pstuOld)) //结构MAP从1开始
  438. {
  439. SetDlgItemText(IDC_EDIT1, pstuOld->cInsideName);
  440. SetDlgItemText(IDC_EDIT2, pstuOld->cDispName);
  441. SetDlgItemText(IDC_EDIT3, pstuOld->cInfo);
  442. ((CButton *)GetDlgItem(IDC_CAINI_CHECK1))->SetCheck(pstuOld->bIsDisp);
  443. ((CButton *)GetDlgItem(IDC_CAINI_CHECK2))->SetCheck(pstuOld->IsCheck);
  444. }
  445. }
  446. }
  447. void CCaCertIniSetPage::OnBResert() 
  448. {
  449. // TODO: Add your control notification handler code here
  450. }
  451. void CCaCertIniSetPage::UpdateInfo(CTreeCtrl * pTree, const HTREEITEM hItem, 
  452.    CMap<UINT, UINT, stuINI *, stuINI * > * pMap) //信息项发生改变时候,更新MAP
  453. {
  454. if(!pTree || !hItem || !pMap)
  455. return;
  456. DWORD dData = pTree->GetItemData(hItem);
  457. if(dData != -1)
  458. {
  459. CString strInside,
  460. strDisp,
  461. strInfo;
  462. GetDlgItemText(IDC_EDIT1, strInside);
  463. GetDlgItemText(IDC_EDIT2, strDisp);
  464. if(strDisp.IsEmpty())
  465. {
  466. strDisp = pTree->GetItemText(hItem);
  467. }
  468. GetDlgItemText(IDC_EDIT3, strInfo);
  469. BOOL bIsDisp = ((CButton *)GetDlgItem(IDC_CAINI_CHECK1))->GetCheck();
  470. BOOL bIsCheck = ((CButton *)GetDlgItem(IDC_CAINI_CHECK2))->GetCheck();
  471. //删除原来映射
  472. stuINI * pstuOld = NULL;
  473. if(pMap->Lookup(dData, pstuOld))
  474. {
  475. delete [] pstuOld;
  476. }
  477. //增加新映射
  478. stuINI * pstuIni = new stuINI(bIsDisp, strInside.GetBuffer(255), 
  479. strDisp.GetBuffer(255), strInfo.GetBuffer(255), bIsCheck);
  480. pMap->SetAt(dData, pstuIni);
  481. //如果映射不合法,则显示图标为非法  显示在列表中,并且有空项为不合法
  482. if(bIsDisp)
  483. {
  484. if(strInside.IsEmpty() || strDisp.IsEmpty() || strInfo.IsEmpty()) //非法
  485. pTree->SetItemImage(hItem, 16, 16);
  486. else
  487. pTree->SetItemImage(hItem, 1, 1);
  488. }
  489. else//显示空白
  490. {
  491. pTree->SetItemImage(hItem, 0, 0);
  492. }
  493. }
  494. }
  495. void CCaCertIniSetPage::OnCheck1() //界面中显示
  496. {
  497. // TODO: Add your control notification handler code here
  498. CTreeCtrl * pCtrl = NULL;
  499. if(m_eTreeType == USERTREE)
  500. {
  501. pCtrl = &m_UserTree;
  502. }
  503. else
  504. {
  505. pCtrl = &m_ExtTree;
  506. }
  507. HTREEITEM hItem = pCtrl->GetSelectedItem();
  508. BOOL bIsDisp =  ((CButton *)GetDlgItem(IDC_CAINI_CHECK1))->GetCheck();
  509. if(bIsDisp) //如果显示
  510. {
  511. //判断是否合法,包括,右侧2项内容是否齐全
  512. CString strInside,
  513. strDisp,
  514. strInfo;
  515. GetDlgItemText(IDC_EDIT1, strInside);
  516. GetDlgItemText(IDC_EDIT3, strInfo);
  517. if(strInside.IsEmpty() || strInfo.IsEmpty())
  518. {
  519. pCtrl->SetItemImage(hItem, 16, 16);
  520. }
  521. else
  522. pCtrl->SetItemImage(hItem, 1, 1);
  523. }
  524. else
  525. pCtrl->SetItemImage(hItem, 0, 0);
  526. }
  527. void CCaCertIniSetPage::OnClickTree(NMHDR* pNMHDR, LRESULT* pResult) //用户信息
  528. {
  529. // TODO: Add your control notification handler code here
  530. ClickTree(&m_UserTree);
  531. *pResult = 0;
  532. }
  533. void CCaCertIniSetPage::OnClickTreeext(NMHDR* pNMHDR, LRESULT* pResult) 
  534. {
  535. // TODO: Add your control notification handler code here
  536. ClickTree(&m_ExtTree);
  537. *pResult = 0;
  538. }
  539. void CCaCertIniSetPage::ClickTree(CTreeCtrl *pTree)
  540. {
  541. CPoint point;
  542. GetCursorPos(&point); // 当前鼠标坐标
  543. CPoint PointInTree = point;
  544. pTree->ScreenToClient( &PointInTree);
  545. UINT nFlag;
  546. HTREEITEM hItem = pTree->HitTest( PointInTree, &nFlag);
  547. if(hItem == NULL)
  548. {
  549. return;
  550. }
  551. pTree->SelectItem(hItem);
  552. if (nFlag&TVHT_ONITEMICON) //点种图标,则选择或不选
  553. {
  554. int nImage,nSelectedImage,nState;
  555. pTree->GetItemImage(hItem,nImage,nSelectedImage);
  556. CString strInside,
  557. strDisp,
  558. strInfo;
  559. GetDlgItemText(IDC_EDIT1, strInside);
  560. GetDlgItemText(IDC_EDIT3, strInfo);
  561. BOOL bInvalid = FALSE;
  562. if(strInside.IsEmpty() || strInfo.IsEmpty()) //非法
  563. bInvalid = TRUE;
  564. if(nImage <3) // 0 -> 1; 1 -> 0
  565. {
  566. if(nImage == 0) //0 -> 1,需要判断//判断是否合法,包括,右侧2项内容是否齐全
  567. {
  568. if(bInvalid) //非法
  569. {
  570. pTree->SetItemImage(hItem, 16, 16);
  571. }
  572. else
  573. {
  574. nState = !nImage;
  575. pTree->SetItemImage(hItem,nState,nState);
  576. //nState 标示选中状态 0-未选择 1-以选择
  577. ((CButton *)GetDlgItem(IDC_CAINI_CHECK1))->SetCheck(nState);
  578. }
  579. }
  580. else // 1 -> 0
  581. {
  582. nState = !nImage;
  583. pTree->SetItemImage(hItem,nState,nState);
  584. //nState 标示选中状态 0-未选择 1-以选择
  585. ((CButton *)GetDlgItem(IDC_CAINI_CHECK1))->SetCheck(nState);
  586. }
  587. }
  588. else if(nImage == 16) //如果合法,可以变成选中,非法只能变成不选
  589. {
  590. if(bInvalid) //非法
  591. {
  592. pTree->SetItemImage(hItem, 0, 0);
  593. ((CButton *)GetDlgItem(IDC_CAINI_CHECK1))->SetCheck(0);
  594. }
  595. else
  596. {
  597. pTree->SetItemImage(hItem, 1, 1);
  598. ((CButton *)GetDlgItem(IDC_CAINI_CHECK1))->SetCheck(1);
  599. }
  600. }
  601. }
  602. }
  603. void CCaCertIniSetPage::TranslateCT()
  604. {
  605. SetDlgItemText(IDC_CAINI_RADIO1, MiniCT_10401);
  606. SetDlgItemText(IDC_CAINI_RADIO2, MiniCT_10402);
  607. SetDlgItemText(IDC_CAINI_CHECK1, MiniCT_10403);
  608. SetDlgItemText(IDC_CAINI_CHECK2, MiniCT_10404);
  609. SetDlgItemText(IDC_CAINI_STATIC1, MiniCT_10405);
  610. SetDlgItemText(IDC_CAINI_STATIC2, MiniCT_10406);
  611. SetDlgItemText(IDC_CAINI_STATIC3, MiniCT_10407);
  612. SetDlgItemText(IDC_CAINI_STATIC4, MiniCT_10408);
  613. SetDlgItemText(IDC_B_SAVE, MiniCT_10409);
  614. SetDlgItemText(IDC_B_RESERT, MiniCT_10410);
  615. }
  616. BOOL CCaCertIniSetPage::PreTranslateMessage(MSG* pMsg) 
  617. {
  618. // TODO: Add your specialized code here and/or call the base class
  619. {
  620. // Let the ToolTip process this message.
  621. m_toolTip.RelayEvent(pMsg);
  622. }
  623. return CPropertyPage::PreTranslateMessage(pMsg);
  624. }