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

CA认证

开发平台:

Visual C++

  1. // MiniMainDlg.cpp : implementation file
  2. //
  3. #include "stdafx.h"
  4. #include "minica.h"
  5. #include "MiniMainDlg.h"
  6. #include "SafeDataSetPage.h"
  7. #include ".ControlaboutctrlAboutCtrl.h"
  8. #include ".ControlSplashSplashWnd.h"
  9. #include ".GenericClassLanguage.h"
  10. #include ".ControlCreditsCtrl-AboutCreditsCtrl.h"
  11. #include "minict.h"
  12. #ifdef _DEBUG
  13. #define new DEBUG_NEW
  14. #undef THIS_FILE
  15. static char THIS_FILE[] =  __FILE__;
  16. #endif
  17. /////////////////////////////////////////////////////////////////////////////
  18. // CAboutDlg dialog used for App About
  19. class CAboutDlg : public CDialog
  20. {
  21. public:
  22. CAboutDlg();
  23. static void TestFunction2(LPCTSTR lpszArg);
  24. static void TestFunction(LPCTSTR lpszArg);
  25. static void DrawCreditsBackground(CDC *pDC, RECT rect, BOOL bAnimate, DWORD lParam);
  26. // Dialog Data
  27. //{{AFX_DATA(CAboutDlg)
  28. enum { IDD = IDD_ABOUTBOX };
  29. CAboutCtrl m_AboutCtrl;
  30. //}}AFX_DATA
  31. // ClassWizard generated virtual function overrides
  32. //{{AFX_VIRTUAL(CAboutDlg)
  33. public:
  34. virtual BOOL PreTranslateMessage(MSG* pMsg);
  35. protected:
  36. virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support
  37. //}}AFX_VIRTUAL
  38. // Implementation
  39. protected:
  40. CCreditsCtrl m_wndCredits;
  41. //{{AFX_MSG(CAboutDlg)
  42. virtual BOOL OnInitDialog();
  43. //}}AFX_MSG
  44. DECLARE_MESSAGE_MAP()
  45. };
  46. CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
  47. {
  48. //{{AFX_DATA_INIT(CAboutDlg)
  49. //}}AFX_DATA_INIT
  50. CString strCredits= "tMiniCA System V2.0 nn"
  51.    "r版本信息:n"
  52.    "MiniCA Bulid 051201n"
  53.    "OPENSSL 0.9.8n"
  54.    "CXPStyleButtonST By Davide Calabron"
  55.    "CProgressCtrlST By Davide Calabron"
  56.    "CSuperGridCtrl By Allan Nielsenn"
  57.    "CFileEditCtrl By PJ Arendsn"
  58.    "CStaticTreeCtrl By Franc Moralesn"
  59.    "CAboutCtrl By Pablo van der Meern"
  60.    "W3Mfc By PJ Naughtern"
  61.    "ADO classes By Carlos Antollinin"
  62.    "CSplashWnd By Kirk Stowelln"
  63.    "CBitmapSlider By Junho Ryun"
  64.    "ClassXP 1.2 By Yonsmn"
  65.    "nr程序设计:n"
  66.    "hpxs email:hpxs@hotmail.comnn"
  67.    "r感谢:n台中县张凯棠(Commer 卡门)"
  68.    "nemail:commercity@hotmail.comn"
  69.    "协助MiniCA测试n";
  70. m_AboutCtrl.SetCredits(CMiniCaApp::NormalCode(strCredits), 240, 350, 350);
  71. //滚动文字框的起点位置,宽度,高度
  72. // ____________________
  73. // |
  74. // |
  75. // |
  76. }
  77. void CAboutDlg::DoDataExchange(CDataExchange* pDX)
  78. {
  79. CDialog::DoDataExchange(pDX);
  80. //{{AFX_DATA_MAP(CAboutDlg)
  81. DDX_Control(pDX, IDC_ABOUTCTRL, m_AboutCtrl);
  82. //}}AFX_DATA_MAP
  83. }
  84. BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
  85. //{{AFX_MSG_MAP(CAboutDlg)
  86. //}}AFX_MSG_MAP
  87. END_MESSAGE_MAP()
  88. BOOL CAboutDlg::OnInitDialog() 
  89. {
  90. CDialog::OnInitDialog();
  91. // TODO: Add extra initialization here
  92. /* srand((unsigned)time(NULL));
  93. // initialize credits control...
  94. // Content
  95. CString s;
  96. s = "<font color='255,255,255' face='arial' size='12' align='center'>";
  97. s += "<font size='28' face='Comic Sans MS' style='ui' color='255,255,255'>Demo Stuff </font><p>";
  98. s += "  <font style='bu' align='left'>Color:<br></font><font color='255,0,0'>y</font><font color='220,30,10'>e</font><font color='200,60,30'>e</font><font color='200,100,50'>e</font><font color='180,120,80'>e</font><font color='160,140,100'>e</font><font color='140,160,120'>e</font><font color='120,180,140'>e</font><font color='100,200,160'>e</font><font color='80,180,180'>e</font><font color='60,140,220'>e</font><font color='80,120,250'>h</font><font color='110,100,255'>a</font><font color='130,90,255'>a</font><font color='150,80,255'>a</font><font color='170,70,255'>a</font><font color='180,50,255'>a</font><br>";
  99. s += "  <font style='bu' align='left'>Font:<br></font><font color='0,200,100' size='14' face='Comic Sans MS'>Comic Sans MS</font><br><font color='0,200,100' size='14' face='Courier New'>Courier New</font><br><font color='0,200,100' size='14' face='Tahoma'>Tahoma</font><br>";
  100. s += "  <font style='bu' align='left'>Size:<br></font><font color='150,100,255'><font size='42'>W</font><font size='36'>H</font><font size='28'>O</font><font size='18'>O</font><font size='14'>O</font><font size='18'>O</font><font size='28'>O</font><font size='36'>O</font><font size='42'>W</font></font><br>";
  101. s += "  <font style='bu' align='left'>Styles:<br></font><font color='40,120,240' size='14'><font style='b'>bold</font>  <font style='i'>italic</font>  <font style='u'>underline</font>  <font style='s'>strikeout</font></font><br>";
  102. s += "  <font style='bu' align='left'>Background:<br></font><font color='255,255,255' size='14' style='b'><font background='0,0,255'>Blue</font>  <font background='255,0,0'>Red</font>  <font background='210,150,40'>Brown</font>  <font background='0,0,255' color='none'>Ghost Font</font></font><br>";
  103. s += "  <font style='bu' align='left'>Alignment:<br></font><font color='255,150,40' size='14' style='b'><font align='right'>right <br></font><font align='center'>center<br></font><font align='left'> left<br></font></font>";
  104. s += "  <font style='bu' align='left'>Vertical Alignment:<br></font><font color='0,220,160' size='12' style='b'><font valign='top'>top</font><font valign='middle'>middle</font><font valign='bottom'>bottom</font><font size='48'>BIG</font></font><br>";
  105. s += "  <font style='bu' align='left'>Resource Bitmap:<br></font><font color='30,70,255' size='12' style='b'><img src='#%d'><font color='255,0,0'>    red </font><font valign='bottom'>bo</font><font valign='middle'>rd</font><font valign='top'>er </font><img src='#%d' border='4' color='255,0,0'></font><br>";
  106. s += "  <font style='bu' align='left'>Links:<br></font><font color='100,160,220' size='14' style='b'><a href='#Hello World!#%d' color='100,220,160'>Click Me!</a><br><a href='notepad.exe' color='100,220,160' style='bui'>notepad</a><br><a href='http://www.w3c.org' color='100,220,160' face='Courier New' size='16'>www.w3c.org</a><br><a href='mailto:devix@devix.cjb.net?SUBJECT=Hello World!! ;)' color='100,220,160' face='Comic Sans MS' size='18'>devix@devix.cjb.net</a><br><font size='36' color='255,200,0' style='u'><a href='#nDo or do not. There is no try.nntt-Yoda#%d' color='none' background='255,200,0' style='-uis'>Click Here</a></font><vspace size='4'><font valign='top' size='12' style='-b'>image link:  </font><a href='#%d#%d' color='255,200,0'><img src='#%d' border='2' color='none'></a></font><vspace size='80'>";
  107. s += "<font size='28' face='Comic Sans MS' style='ui'>CCreditsCtrl </font><p><font size='18' style='u' color='255,200,0'>About</font><p>Coded in January 2001<br>by <font style='b'>Marc Richarme</font><vspace size='5'><font align='left' size='11'><hspace size='30'><font style='i'>mail:   </font><font style='ub'><a href='mailto:devix@devix.cjb.net?SUBJECT=Hello World!' color='255,200,0'>devix@devix.cjb.net</a></font><br><hspace size='30'><font style='i'>web:   </font><font style='ub'><a href='http://devix.cjb.net' color='255,200,0'>http://devix.cjb.net</a></font><p></font><font size='18' style='u' color='255,200,0'>Credits</font><p>Thanks to <font style='ub'><a href='http://www.codeproject.com' color='255,200,0'>The Code Project</a></font> for being<br> the coolest VC++/MFC site out there!<br></font><vspace size='80'>";
  108. // Content Data
  109. m_wndCredits.FormatDataString(s,IDB_BACKGROUND,IDB_BACKGROUND,(long)CAboutDlg::TestFunction,
  110. (long)CAboutDlg::TestFunction,(long)this,(long)CAboutDlg::TestFunction2,IDB_BITMAP2);
  111. // use our own function for background drawing
  112. m_wndCredits.m_pBackgroundPaint = CAboutDlg::DrawCreditsBackground;
  113. m_wndCredits.m_dwBackgroundPaintLParam = FALSE;
  114. // as our background is going to be black, use black as default transparent color
  115. m_wndCredits.m_crInternalTransparentColor = RGB(0,0,0);
  116. // now, we're ready to begin... create the window
  117. m_wndCredits.Create(WS_EX_CLIENTEDGE,WS_VISIBLE|WS_CHILD,IDC_ABOUTCTRL,this,0,IDC_SMILEY,0);
  118. */
  119. return TRUE;  // return TRUE unless you set the focus to a control
  120. // EXCEPTION: OCX Property Pages should return FALSE
  121. }
  122. void CAboutDlg::DrawCreditsBackground(CDC *pDC, RECT rect, BOOL bAnimate, DWORD lParam)
  123. {
  124. static int on1,on2,oon1,oon2;
  125. pDC->FillSolidRect(&rect,0x00000000);
  126. // uncomment the following lines if you like small green squares :)
  127. // pDC->SetBkColor(0x000000);
  128. // CBrush bgBrush;
  129. // bgBrush.CreateHatchBrush(HS_CROSS,RGB(0,70,30));
  130. // pDC->FillRect(&rect,&bgBrush);
  131. if(bAnimate || (!lParam)) // return now if we are not supposed to do the animation
  132. return;
  133. int n1,n2;
  134. n1 = rand()*200/RAND_MAX-100;
  135. n2 = rand()*200/RAND_MAX-100;
  136. // 2/10 chance of (prehaps) making some wild stuff on one of the curves
  137. if(rand() < RAND_MAX/10)
  138. n1 = rand()*400/RAND_MAX-200;
  139. else if(rand() < RAND_MAX/10)
  140. n2 = rand()*400/RAND_MAX-200;
  141. POINT points1[4] = {
  142. rect.right,0,
  143. (rect.right-rect.left)/2+n1,(rect.bottom-rect.top)/2,
  144. (rect.right-rect.left)/2,(rect.bottom-rect.top)/2-n1,
  145. 0,rect.bottom
  146. };
  147. POINT points2[4] = {
  148. 0,0,
  149. (rect.right-rect.left)/2-n2,(rect.bottom-rect.top)/2,
  150. (rect.right-rect.left)/2,(rect.bottom-rect.top)/2-n2,
  151. rect.right,rect.bottom
  152. };
  153. POINT opoints1[4] = {
  154. rect.right,0,
  155. (rect.right-rect.left)/2+on1,(rect.bottom-rect.top)/2,
  156. (rect.right-rect.left)/2,(rect.bottom-rect.top)/2-on1,
  157. 0,rect.bottom
  158. };
  159. POINT opoints2[4] = {
  160. 0,0,
  161. (rect.right-rect.left)/2-on2,(rect.bottom-rect.top)/2,
  162. (rect.right-rect.left)/2,(rect.bottom-rect.top)/2-on2,
  163. rect.right,rect.bottom
  164. };
  165. POINT oopoints1[4] = {
  166. rect.right,0,
  167. (rect.right-rect.left)/2+oon1,(rect.bottom-rect.top)/2,
  168. (rect.right-rect.left)/2,(rect.bottom-rect.top)/2-oon1,
  169. 0,rect.bottom
  170. };
  171. POINT oopoints2[4] = {
  172. 0,0,
  173. (rect.right-rect.left)/2-oon2,(rect.bottom-rect.top)/2,
  174. (rect.right-rect.left)/2,(rect.bottom-rect.top)/2-oon2,
  175. rect.right,rect.bottom
  176. };
  177. CPen wpen(PS_SOLID,1,RGB(150,220,255));
  178. CPen pen(PS_SOLID,2,RGB(50,100,255));
  179. CPen open(PS_SOLID,1,RGB(50,100,255));
  180. CPen oopen(PS_SOLID,1,RGB(0,30,150));
  181. CPen *pOldPen = pDC->SelectObject(&oopen);
  182. pDC->PolyBezier(oopoints1,4);
  183. pDC->PolyBezier(oopoints2,4);
  184. pDC->SelectObject(&open);
  185. pDC->PolyBezier(opoints1,4);
  186. pDC->PolyBezier(opoints2,4);
  187. pDC->SelectObject(&pen);
  188. pDC->PolyBezier(points1,4);
  189. pDC->PolyBezier(points2,4);
  190. pDC->SelectObject(&wpen);
  191. pDC->PolyBezier(points1,4);
  192. pDC->PolyBezier(points2,4);
  193. pDC->SelectObject(pOldPen);
  194. oon1 = on1;
  195. oon2 = on2;
  196. on1 = n1;
  197. on2 = n2;
  198. }
  199. void CAboutDlg::TestFunction(LPCTSTR lpszArg)
  200. {
  201. if(lpszArg == NULL)
  202. AfxMessageBox("(null)");
  203. else
  204. AfxMessageBox(lpszArg);
  205. }
  206. void CAboutDlg::TestFunction2(LPCTSTR lpszArg)
  207. {
  208. static int cnt = 1;
  209. CAboutDlg *pDlg = (CAboutDlg*)atol(lpszArg);
  210. pDlg->m_wndCredits.m_nTimerSpeed = cnt==0 ? 30 : cnt * 40;
  211. if(++cnt > 3)
  212. cnt = 0;
  213. }
  214. BOOL CAboutDlg::PreTranslateMessage(MSG* pMsg) 
  215. {
  216. // TODO: Add your specialized code here and/or call the base class
  217. // If we get a keyboard or mouse message, hide the splash screen.
  218. if (pMsg->message == WM_KEYDOWN ||
  219.     pMsg->message == WM_RBUTTONDOWN ||
  220.     pMsg->message == WM_MBUTTONDOWN)
  221. {
  222. OnOK();
  223. }
  224. return CDialog::PreTranslateMessage(pMsg);
  225. }
  226. /////////////////////////////////////////////////////////////////////////////
  227. /////////////////////////////////////////////////////////////////////////////
  228. // CMiniMainDlg dialog
  229. CMiniMainDlg::CMiniMainDlg(CWnd* pParent /*=NULL*/)
  230. : CDialog(CMiniMainDlg::IDD, pParent)
  231. {
  232. //{{AFX_DATA_INIT(CMiniMainDlg)
  233. // NOTE: the ClassWizard will add member initialization here
  234. //}}AFX_DATA_INIT
  235. m_hIcon =  AfxGetApp()->LoadIcon(IDR_MAINFRAME);
  236. m_bDlgCreated =  false;
  237. m_RegFlag =  false;
  238. m_hPageCaItem = NULL;
  239. m_hPageCertWizardSheetItem = NULL;
  240. m_hPageExtItem = NULL;
  241. m_hPageWinEvpSheetItem = NULL;
  242. m_hPageWebSheetItem = NULL;
  243. m_hPageAsn1ParseItem = NULL;
  244. m_hPageCertInfoItem = NULL;
  245. m_hPageRegItem = NULL;
  246. m_hPageCertDbItem = NULL;
  247. m_hPageUpItem = NULL;
  248. m_bHide = FALSE;
  249. m_ImgList.DeleteImageList();
  250. }
  251. void CMiniMainDlg::DoDataExchange(CDataExchange* pDX)
  252. {
  253. CDialog::DoDataExchange(pDX);
  254. //{{AFX_DATA_MAP(CMiniMainDlg)
  255. DDX_Control(pDX, IDC_STATIC_LABLE, m_CaptionBarCtrl);
  256. DDX_Control(pDX, IDC_LISTBOX, m_ListBox);
  257. DDX_Control(pDX, IDC_TREE, m_TreeCtrl);
  258. //}}AFX_DATA_MAP
  259. }
  260. BEGIN_MESSAGE_MAP(CMiniMainDlg, CDialog)
  261. //{{AFX_MSG_MAP(CMiniMainDlg)
  262. ON_WM_SYSCOMMAND()
  263. ON_WM_PAINT()
  264. ON_WM_QUERYDRAGICON()
  265. ON_NOTIFY(TVN_SELCHANGING, IDC_TREE, OnSelchangingTree)
  266. ON_NOTIFY(TVN_SELCHANGED, IDC_TREE, OnSelchangedTree)
  267. ON_WM_DESTROY()
  268. ON_WM_CLOSE()
  269. ON_WM_DROPFILES()
  270. //}}AFX_MSG_MAP
  271. END_MESSAGE_MAP()
  272. /////////////////////////////////////////////////////////////////////////////
  273. // CMiniMainDlg message handlers
  274. BOOL CMiniMainDlg::OnInitDialog() 
  275. {
  276. CDialog::OnInitDialog();
  277. // Add "About..." menu item to system menu.
  278. // IDM_ABOUTBOX must be in the system command range.
  279. ASSERT((IDM_ABOUTBOX & 0xFFF0) ==  IDM_ABOUTBOX);
  280. ASSERT(IDM_ABOUTBOX < 0xF000);
  281. CMenu * pSysMenu =  GetSystemMenu(FALSE);
  282. // BCMenu * p = BCMenu::UpdateMenu(pSysMenu);
  283. if (pSysMenu   !=    NULL)
  284. {
  285. //删除最大化菜单
  286. pSysMenu->RemoveMenu(SC_ZOOM ,MF_BYCOMMAND); 
  287. //删除移动
  288. // pSysMenu->RemoveMenu(SC_MOVE ,MF_BYCOMMAND); 
  289. //删除恢复
  290. pSysMenu->RemoveMenu(SC_RESTORE ,MF_BYCOMMAND); 
  291. //删除大小
  292. pSysMenu->RemoveMenu(SC_SIZE ,MF_BYCOMMAND); 
  293. //修改移动0xF010 - 61456
  294. pSysMenu->ModifyMenu(SC_MOVE , MF_BYCOMMAND, SC_MOVE, "移动(&M)"); 
  295. //修改最小化 0xF020 - 61472
  296. pSysMenu->ModifyMenu(SC_ICON , MF_BYCOMMAND, SC_ICON, "隐藏(&H)"); 
  297. //修改关闭0xF060 - 61536
  298. pSysMenu->ModifyMenu(SC_CLOSE , MF_BYCOMMAND, SC_CLOSE, "关闭(&C) Alt + F4"); 
  299. CString strAboutMenu;
  300. strAboutMenu.LoadString(IDS_ABOUTBOX);
  301. if (!strAboutMenu.IsEmpty())
  302. {
  303. pSysMenu->AppendMenu(MF_SEPARATOR);
  304. pSysMenu->AppendMenu(MF_STRING, IDM_SHOWSPLINT, "观看闪屏(&S) Ctrl+S");
  305. m_LangMenu.LoadMenu(IDR_MENU_LANGUAGE);
  306. // 列出语言
  307. CLanguage::List(m_LangMenu.GetSubMenu(0)->m_hMenu);
  308. pSysMenu->InsertMenu(6, MF_BYPOSITION|MF_POPUP,
  309. (UINT)m_LangMenu.GetSubMenu(0)->m_hMenu, "LangUage"); //语言菜单 ID_MENUSYS_LANGUAGE
  310. pSysMenu->AppendMenu(MF_SEPARATOR);
  311. pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, "关于 MiniCA(&A)..."); //0x0010
  312. // 翻译菜单 bi xu cun zai , fou ze zai fan ti huan jing xiamian bu neng zhengque xianshi fanti zi
  313. CLanguage::TranslateMenu(pSysMenu->m_hMenu, "60000");
  314. }
  315. }
  316. // Set the icon for this dialog.  The framework does this automatically
  317. //  when the application's main window is not a dialog
  318. SetIcon(m_hIcon, TRUE); // Set big icon
  319. SetIcon(m_hIcon, FALSE); // Set small icon
  320. // TODO: Add extra initialization here
  321. //XP风格菜单,表现为选中时候图标偏移
  322. BCMenu::SetMenuDrawMode( BCMENU_DRAWMODE_XP );
  323. BCMenu::SetSelectDisableMode(FALSE);
  324. BCMenu::SetXPBitmap3D(TRUE);
  325. // BCMenu::SetIconSize(24,24);
  326. m_ImgList.Create(24,24,TRUE|ILC_COLOR24,20,1);
  327. //24:每个图片的宽度为24
  328. //24:每个图片的高度为24
  329. //TRUE  该图以透明方式显示
  330. //ILC_COLOR24,  颜色数为24位(其他可选常量祥见有关API)
  331. //16:    创建时容量为3个图片
  332. //1:    图片数量超出当前容量时,自动扩容,每次扩容1个图片的容量
  333. HICON hIcon =  NULL;
  334. hIcon =  (HICON)::LoadImage(::AfxGetInstanceHandle(), 
  335. MAKEINTRESOURCE(IDI_ICON_EXTERN), IMAGE_ICON, 24, 24, 0);
  336. m_ImgList.Add(hIcon);//0
  337. DestroyIcon(hIcon);
  338. hIcon =  (HICON)::LoadImage(::AfxGetInstanceHandle(), 
  339. MAKEINTRESOURCE(IDI_ICON_WIZARD), IMAGE_ICON, 24, 24, 0);
  340. m_ImgList.Add(hIcon);//1   - 数证向导
  341. DestroyIcon(hIcon);
  342. hIcon =  (HICON)::LoadImage(::AfxGetInstanceHandle(), 
  343. MAKEINTRESOURCE(IDI_ICON_CLIENT), IMAGE_ICON, 24, 24, 0);
  344. m_ImgList.Add(hIcon);//2
  345. DestroyIcon(hIcon);
  346. hIcon =  (HICON)::LoadImage(::AfxGetInstanceHandle(), 
  347. MAKEINTRESOURCE(IDI_ICON_SERVER), IMAGE_ICON, 24, 24, 0);
  348. m_ImgList.Add(hIcon);//3
  349. DestroyIcon(hIcon);
  350. hIcon =  (HICON)::LoadImage(::AfxGetInstanceHandle(), 
  351. MAKEINTRESOURCE(IDI_ICON_LOCK), IMAGE_ICON, 24, 24, 0);
  352. m_ImgList.Add(hIcon);//4
  353. DestroyIcon(hIcon);
  354. hIcon =  (HICON)::LoadImage(::AfxGetInstanceHandle(), 
  355. MAKEINTRESOURCE(IDI_ICON_RA), IMAGE_ICON, 24, 24, 0);
  356. m_ImgList.Add(hIcon);//5
  357. DestroyIcon(hIcon);
  358. hIcon =  (HICON)::LoadImage(::AfxGetInstanceHandle(), 
  359. MAKEINTRESOURCE(IDI_ICON_ASN1V), IMAGE_ICON, 24, 24, 0);
  360. m_ImgList.Add(hIcon);//6
  361. DestroyIcon(hIcon);
  362. hIcon =  (HICON)::LoadImage(::AfxGetInstanceHandle(), 
  363. MAKEINTRESOURCE(IDI_ICON_OCSPS), IMAGE_ICON, 24, 24, 0);
  364. m_ImgList.Add(hIcon);//7
  365. DestroyIcon(hIcon);
  366. hIcon =  (HICON)::LoadImage(::AfxGetInstanceHandle(), 
  367. MAKEINTRESOURCE(IDI_ICON_OCSPC), IMAGE_ICON, 24, 24, 0);
  368. m_ImgList.Add(hIcon);//8
  369. DestroyIcon(hIcon);
  370. hIcon =  (HICON)::LoadImage(::AfxGetInstanceHandle(), 
  371. MAKEINTRESOURCE(IDI_ICON_VIEWCERT), IMAGE_ICON, 24, 24, 0);
  372. m_ImgList.Add(hIcon);//9
  373. DestroyIcon(hIcon);
  374. hIcon =  (HICON)::LoadImage(::AfxGetInstanceHandle(), 
  375. MAKEINTRESOURCE(IDI_ICON_SETUP), IMAGE_ICON, 24, 24, 0);
  376. m_ImgList.Add(hIcon);//10 -  系统配置
  377. DestroyIcon(hIcon);
  378. hIcon =  (HICON)::LoadImage(::AfxGetInstanceHandle(), 
  379. MAKEINTRESOURCE(IDI_ICON_CERTYPE), IMAGE_ICON, 24, 24, 0);
  380. m_ImgList.Add(hIcon);//11 - 数证类型
  381. DestroyIcon(hIcon);
  382. hIcon =  (HICON)::LoadImage(::AfxGetInstanceHandle(), 
  383. MAKEINTRESOURCE(IDI_ICON_UP), IMAGE_ICON, 24, 24, 0);
  384. m_ImgList.Add(hIcon);//12
  385. DestroyIcon(hIcon);
  386. hIcon =  (HICON)::LoadImage(::AfxGetInstanceHandle(), 
  387. MAKEINTRESOURCE(IDR_MAINFRAME), IMAGE_ICON, 24, 24, 0);
  388. m_ImgList.Add(hIcon);//13  -   主图标
  389. DestroyIcon(hIcon);
  390. hIcon =  (HICON)::LoadImage(::AfxGetInstanceHandle(), 
  391. MAKEINTRESOURCE(IDI_ICON_CERTINFO), IMAGE_ICON, 24, 24, 0);
  392. m_ImgList.Add(hIcon);//14 - 数证信息
  393. DestroyIcon(hIcon);
  394. hIcon =  (HICON)::LoadImage(::AfxGetInstanceHandle(), 
  395. MAKEINTRESOURCE(IDI_ICON_CERTEXT), IMAGE_ICON, 24, 24, 0);
  396. m_ImgList.Add(hIcon);//15 - 数证扩展
  397. DestroyIcon(hIcon);
  398. hIcon =  (HICON)::LoadImage(::AfxGetInstanceHandle(), 
  399. MAKEINTRESOURCE(IDI_ICON_RUN), IMAGE_ICON, 24, 24, 0);
  400. m_ImgList.Add(hIcon);//16
  401. DestroyIcon(hIcon);
  402. hIcon =  (HICON)::LoadImage(::AfxGetInstanceHandle(), 
  403. MAKEINTRESOURCE(IDI_ICON_CERTMAN), IMAGE_ICON, 24, 24, 0);
  404. m_ImgList.Add(hIcon);//17 - 数证管理
  405. DestroyIcon(hIcon);
  406. hIcon =  (HICON)::LoadImage(::AfxGetInstanceHandle(), 
  407. MAKEINTRESOURCE(IDI_ICON_REG), IMAGE_ICON, 24, 24, 0);
  408. m_ImgList.Add(hIcon);//18 - 系统注册
  409. DestroyIcon(hIcon);
  410. //对于Create创建得窗口,需要用DestroyWindow销毁
  411. m_PageCa.Create(IDD_PROPPAGE_CA,this);
  412. m_PageCertWizardSheet.Create(IDD_PROPPAGE_CASHEET ,this);
  413. m_PageExt.Create(IDD_PROPPAGE_EXT,this);//证书扩展
  414. m_PageWinEvpSheet.Create(IDD_PROPPAGE_EVPSHEET,this);
  415. m_PageWebSheet.Create(IDD_PROPPAGE_WEBSHEET,this);
  416. // m_SslSheet.Create(IDD_PROPPAGE_SSLSHEET,this);
  417. // m_PageRa.Create(IDD_PROPPAGE_RASERVER,this);
  418. m_PageAsn1Parse.Create(IDD_PROPPAGE_ASN1,this);
  419. // m_OcspSheet.Create(IDD_PROPPAGE_OCSPSHEET,this); //leak 908
  420. m_PageCertInfo.Create(IDD_PROPPAGE_CERTINFO,this);
  421. m_PageCertDb.Create(IDD_PROPPAGE_CERTSETUP,this); //leak 1996
  422. m_PageUp.Create(IDD_PROPPAGE_UPDATE,this);
  423. m_PageReg.Create(IDD_PROPPAGE_REG,this);
  424. // m_TreeCtrl.SetBkImage(IDB_BITMAP);
  425. m_TreeCtrl.SetImageList(&m_ImgList,TVSIL_NORMAL);
  426. //添加树信息
  427. m_hPageCaItem =  m_TreeCtrl.InsertItem("MiniCA V2.0",0,0);
  428. m_TreeCtrl.SetItemImage(m_hPageCaItem,13,13);
  429. m_TreeCtrl.SetItemData(m_hPageCaItem,(DWORD)&m_PageCa);
  430. m_TreeCtrl.SelectItem(m_hPageCaItem);
  431. m_hPageCertWizardSheetItem =  m_TreeCtrl.InsertItem(MiniCT_0000, 0, 0,m_hPageCaItem);      //MiniCT 0
  432. m_TreeCtrl.SetItemImage(m_hPageCertWizardSheetItem,1,1);
  433. m_TreeCtrl.SetItemData(m_hPageCertWizardSheetItem,(DWORD)&m_PageCertWizardSheet);
  434. m_hPageExtItem =  m_TreeCtrl.InsertItem(MiniCT_0001, 0, 0,m_hPageCaItem); //MiniCT 1
  435. m_TreeCtrl.SetItemImage(m_hPageExtItem,0,0);
  436. m_TreeCtrl.SetItemData(m_hPageExtItem,(DWORD)&m_PageExt);
  437. m_hPageWinEvpSheetItem =  m_TreeCtrl.InsertItem(MiniCT_0002, 0, 0,m_hPageCaItem); ////MiniCT 2
  438. m_TreeCtrl.SetItemImage(m_hPageWinEvpSheetItem,4,4);
  439. m_TreeCtrl.SetItemData(m_hPageWinEvpSheetItem,(DWORD)&m_PageWinEvpSheet);
  440. m_hPageWebSheetItem =  m_TreeCtrl.InsertItem(MiniCT_0003, 0, 0,m_hPageCaItem); //MiniCT 3
  441. m_TreeCtrl.SetItemImage(m_hPageWebSheetItem,2,2);
  442. m_TreeCtrl.SetItemData(m_hPageWebSheetItem,(DWORD)&m_PageWebSheet);
  443. m_hPageCertInfoItem =  m_TreeCtrl.InsertItem("MiniCT_0004", 0, 0,m_hPageCaItem); //MiniCT 4
  444. m_TreeCtrl.SetItemImage(m_hPageCertInfoItem,9,9);
  445. m_TreeCtrl.SetItemData(m_hPageCertInfoItem,(DWORD)&m_PageCertInfo);
  446. m_hPageAsn1ParseItem =  m_TreeCtrl.InsertItem(MiniCT_0005, 0, 0,m_hPageCaItem); //MiniCT 5
  447. m_TreeCtrl.SetItemImage(m_hPageAsn1ParseItem,6,6);
  448. m_TreeCtrl.SetItemData(m_hPageAsn1ParseItem,(DWORD)&m_PageAsn1Parse);
  449. m_hPageUpItem =  m_TreeCtrl.InsertItem(MiniCT_0006, 0, 0,m_hPageCaItem); ////MiniCT 6
  450. m_TreeCtrl.SetItemImage(m_hPageUpItem,12,12);
  451. m_TreeCtrl.SetItemData(m_hPageUpItem,(DWORD)&m_PageUp);
  452. if(((CMiniCaApp *)AfxGetApp())->IsHpxs() || ((CMiniCaApp *)AfxGetApp())->IsReg())
  453. {
  454. m_hPageCertDbItem =  m_TreeCtrl.InsertItem(MiniCT_0007, 0, 0, m_hPageCaItem); ////MiniCT 7
  455. m_TreeCtrl.SetItemImage(m_hPageCertDbItem,10,10);
  456. m_TreeCtrl.SetItemData(m_hPageCertDbItem,(DWORD)&m_PageCertDb);
  457. }
  458. if(((CMiniCaApp *)AfxGetApp())->IsHpxs() || !((CMiniCaApp *)AfxGetApp())->IsReg())
  459. {
  460. m_hPageRegItem =  m_TreeCtrl.InsertItem(MiniCT_0008, 0, 0,m_hPageCaItem); //MiniCT 8
  461. m_TreeCtrl.SetItemImage(m_hPageRegItem,18,18);
  462. m_TreeCtrl.SetItemData(m_hPageRegItem,(DWORD)&m_PageReg);
  463. }
  464. m_TreeCtrl.Expand(m_hPageCaItem, TVE_EXPAND );
  465. m_bDlgCreated =  true;
  466. m_RegFlag =  ((CMiniCaApp *)AfxGetApp())->IsReg();
  467. CRect rcDlgs;
  468. GetDlgItem(IDC_PAGE_AREA)->GetWindowRect(rcDlgs);
  469. ScreenToClient(rcDlgs);
  470. rcDlgs.top +=  10;
  471. rcDlgs.bottom -=  5;
  472. rcDlgs.left +=  5;
  473. rcDlgs.right -=  5;
  474. m_PageExt.MoveWindow(rcDlgs);
  475. m_PageCa.MoveWindow(rcDlgs);
  476. m_PageCertWizardSheet.MoveWindow(rcDlgs);
  477. m_PageWinEvpSheet.MoveWindow(rcDlgs);
  478. m_PageWebSheet.MoveWindow(rcDlgs);
  479. // m_SslSheet.MoveWindow(rcDlgs);
  480. // m_PageRa.MoveWindow(rcDlgs);
  481. // m_OcspSheet.MoveWindow(rcDlgs);
  482. m_PageAsn1Parse.MoveWindow(rcDlgs);
  483. m_PageCertInfo.MoveWindow(rcDlgs);
  484. // if(::IsWindow(m_PageSetup.m_hWnd))
  485. // m_PageSetup.MoveWindow(rcDlgs);
  486. if(::IsWindow(m_PageCertDb.m_hWnd))
  487. m_PageCertDb.MoveWindow(rcDlgs);
  488. if(::IsWindow(m_PageUp.m_hWnd))
  489. m_PageUp.MoveWindow(rcDlgs);
  490. if(::IsWindow(m_PageReg.m_hWnd))
  491. m_PageReg.MoveWindow(rcDlgs);
  492. m_PageCa.ShowWindow(SW_SHOW);
  493. ////////////////////////系统托盘//////////////////////////////////////////////////////
  494. m_nid.cbSize =  sizeof( NOTIFYICONDATA );
  495. m_nid.hWnd =  m_hWnd; 
  496. m_nid.uID =  ID_SYSTEMTRAY; 
  497. m_nid.uFlags =  NIF_MESSAGE|NIF_ICON|NIF_TIP;
  498. m_nid.uCallbackMessage =  WM_SYSTEMTRAY;//自定义消息
  499. m_nid.hIcon =  AfxGetApp()->LoadIcon( IDR_MAINFRAME );
  500. // 标题条
  501. m_CaptionBarCtrl.m_textClr     = ::GetSysColor(COLOR_3DFACE);
  502. m_CaptionBarCtrl.m_fontWeight  = FW_BOLD;
  503. m_CaptionBarCtrl.m_fontSize    = 14;
  504. m_CaptionBarCtrl.m_csFontName  = "Verdana";
  505. m_CaptionBarCtrl.SetConstantText("MiniCA V2.0");
  506. CString strName =  "MiniCA V2.0";
  507. if(!m_RegFlag)//0未注册
  508. strName+= CMiniCaApp::NormalCode("(未注册)");
  509. SetWindowText(strName);
  510. strcpy(m_nid.szTip, strName);
  511. ::Shell_NotifyIcon( NIM_ADD,&m_nid);
  512. m_CaptionBarCtrl.SetWindowText(strName);
  513. //列表右键保存文件名
  514. CString lpszFile = ((CMiniCaApp *)AfxGetApp())->GetAppPath() + "\MiniLog.log";
  515. m_ListBox.SetSaveFile(lpszFile);
  516. //SetWindowLong(this->m_hWnd, GWL_EXSTYLE, WS_EX_TOOLWINDOW);
  517. ////////////////////////////////////////////////////////////////////////////////////
  518. // m_ListBox.SetBkColor(::GetSysColor(COLOR_BTNFACE));
  519. // m_TreeCtrl.SetBkColor(::GetSysColor(COLOR_BTNFACE));
  520. //得到命令行参数,打开外部传来的文件WinEvp
  521. CString strEvpFile;
  522. strEvpFile.Format("%s", AfxGetApp()->m_lpCmdLine);
  523. //命令行是带""的,需要去掉""
  524. strEvpFile.Replace(""", " ");
  525. strEvpFile.TrimLeft();
  526. strEvpFile.TrimRight();
  527. CString ext;
  528. ext = strEvpFile.Right(3);
  529. if(ext.CompareNoCase("Evp") == 0)
  530. {
  531. CSafeDataSetPage::EncType encType;
  532. CSafeDataSetPage * pPage = (CSafeDataSetPage * )m_PageWinEvpSheet.GetPage("CSafeDataSetPage");
  533. if(pPage)
  534. {
  535. if(!pPage->ParseEvp(strEvpFile, encType))
  536. {
  537. SendMessage(WM_CLOSE);
  538. }
  539. else
  540. {
  541. GotoPage("WinEvp");
  542. CWinEvpSheet * pEvpSheet = (CWinEvpSheet *)GetPage("CWinEvpSheet");
  543. if(pEvpSheet) //goto datasafeset
  544. {
  545. pEvpSheet->m_PageWinEvpSheet.SetCurSel(1);
  546. }
  547. }
  548. }
  549. }
  550. //关闭splash
  551. CSplashWnd::KillSplashScreen();
  552. Language();
  553. m_wndTaskbarNotifier.Create(this);
  554. m_wndTaskbarNotifier.SetSkin(IDB_SKIN_MSN);
  555. m_wndTaskbarNotifier.SetTextFont("Arial",90,TN_TEXT_NORMAL,TN_TEXT_UNDERLINE);
  556.   m_wndTaskbarNotifier.SetTextColor(RGB(0,0,0),RGB(0,0,200));
  557. m_wndTaskbarNotifier.SetTextRect(CRect(10,40,m_wndTaskbarNotifier.m_nSkinWidth-10,
  558. m_wndTaskbarNotifier.m_nSkinHeight-25));
  559. // m_bar.Create(this);
  560. // m_bar.AddPane(22222, 0);
  561. // m_bar.SetPaneInfo(0, 22222, SBPS_NOBORDERS, 300);
  562. // m_bar.GetStatusBarCtrl().SetBkColor(RGB(180,180,180));
  563. // RepositionBars(AFX_IDW_CONTROLBAR_FIRST,AFX_IDW_CONTROLBAR_LAST,
  564. // 122222);
  565. return TRUE;  // return TRUE unless you set the focus to a control
  566.               // EXCEPTION: OCX Property Pages should return FALSE
  567. }
  568. void CMiniMainDlg::OnSysCommand(UINT nID, LPARAM lParam)
  569. {
  570. if ((nID & 0xFFF0) ==  IDM_ABOUTBOX)
  571. {
  572. CAboutDlg dlgAbout;
  573. dlgAbout.DoModal();
  574. }
  575. else if(nID ==  IDM_SHOWSPLINT)
  576. {
  577. CSplashWnd::EnableSplashScreen(1);
  578. CSplashWnd::ShowSplashScreen(100000, "JPG", "IDR_SPLASHCA", this);
  579. }
  580. else
  581. {
  582. CDialog::OnSysCommand(nID, lParam);
  583. }
  584. }
  585. // If you add a minimize button to your dialog, you will need the code below
  586. //  to draw the icon.  For MFC applications using the document/view model,
  587. //  this is automatically done for you by the framework.
  588. void CMiniMainDlg::OnPaint() 
  589. {
  590. if (IsIconic())
  591. {
  592. CPaintDC dc(this); // device context for painting
  593. SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);
  594. // Center icon in client rectangle
  595. int cxIcon =  GetSystemMetrics(SM_CXICON);
  596. int cyIcon =  GetSystemMetrics(SM_CYICON);
  597. CRect rect;
  598. GetClientRect(&rect);
  599. int x =  (rect.Width() - cxIcon + 1) / 2;
  600. int y =  (rect.Height() - cyIcon + 1) / 2;
  601. // Draw the icon
  602. dc.DrawIcon(x, y, m_hIcon);
  603. }
  604. else
  605. {
  606. CDialog::OnPaint();
  607. }
  608. }
  609. // The system calls this to obtain the cursor to display while the user drags
  610. //  the minimized window.
  611. HCURSOR CMiniMainDlg::OnQueryDragIcon()
  612. {
  613. return (HCURSOR) m_hIcon;
  614. }
  615. void CMiniMainDlg::OnSelchangingTree(NMHDR* pNMHDR, LRESULT* pResult) 
  616. {
  617. NM_TREEVIEW* pNMTreeView =  (NM_TREEVIEW*)pNMHDR;
  618. // TODO: Add your control notification handler code here
  619. if(m_bDlgCreated)
  620. {
  621. HTREEITEM hCurrent =  m_TreeCtrl.GetSelectedItem();
  622. if(hCurrent)
  623. {
  624. DWORD dData =  m_TreeCtrl.GetItemData(hCurrent);
  625. if(dData!=0)
  626. ((CPropertyPage *)dData)->ShowWindow(SW_HIDE);
  627. }
  628. }
  629. *pResult =  0;
  630. }
  631. void CMiniMainDlg::OnSelchangedTree(NMHDR* pNMHDR, LRESULT* pResult) 
  632. {
  633. NM_TREEVIEW* pNMTreeView =  (NM_TREEVIEW*)pNMHDR;
  634. // TODO: Add your control notification handler code here
  635. if(m_bDlgCreated)
  636. {
  637. HTREEITEM hCurrent =  m_TreeCtrl.GetSelectedItem();
  638. if(hCurrent)
  639. {
  640. DWORD dData =  m_TreeCtrl.GetItemData(hCurrent);
  641. if(dData!=0)
  642. {
  643. /* if((DWORD)&m_PageCaWizard ==  dData)
  644. {
  645. m_PageCaWizard.ViewWizardInfo(); //生成报告
  646. }*/
  647. ((CPropertyPage *)dData)->ShowWindow(SW_SHOW);
  648. // ((CPropertyPage *)dData)->SetActiveWindow();
  649. CString strName =  m_TreeCtrl.GetItemText(hCurrent);
  650. if(/*hCurrent == m_hPageWinEvpSheetItem ||*/ hCurrent == m_hPageAsn1ParseItem || hCurrent == m_hPageCertInfoItem)
  651. {
  652. DragAcceptFiles(TRUE);
  653. }
  654. else
  655. DragAcceptFiles(FALSE);
  656. if(strName.Find("MiniCA")== -1)
  657. strName =  "MiniCA "+strName;
  658. if(!m_RegFlag)//0未注册
  659. strName+= CMiniCaApp::NormalCode("(未注册)");
  660. int nImage =  0, 
  661. nSelectedImage =  0;  
  662. m_TreeCtrl.GetItemImage(hCurrent,nImage,nSelectedImage);
  663. DestroyIcon(m_hIconSelect);
  664. m_hIconSelect =  m_ImgList.ExtractIcon(nImage);
  665. // SendMessage(WM_SETICON,ICON_SMALL,(LPARAM)hIcon); 
  666. SetIcon(m_hIconSelect, FALSE); // Set small icon
  667. SetWindowText(strName);
  668. m_CaptionBarCtrl.SetWindowText(strName);
  669. SetupShell(strName,m_hIconSelect);
  670. }
  671. }
  672. }
  673. *pResult =  0;
  674. }
  675. void CMiniMainDlg::OnDestroy() 
  676. {
  677. CDialog::OnDestroy();
  678. // TODO: Add your message handler code here
  679. m_PageCa.DestroyWindow();
  680. m_PageCertWizardSheet.DestroyWindow();
  681. m_PageExt.DestroyWindow();
  682. m_PageWinEvpSheet.DestroyWindow();
  683. m_PageWebSheet.DestroyWindow();
  684. // m_SslSheet.DestroyWindow();
  685. // m_PageRa.DestroyWindow();
  686. // m_OcspSheet.DestroyWindow();
  687. m_PageAsn1Parse.DestroyWindow();
  688. m_PageCertInfo.DestroyWindow();
  689. m_PageReg.DestroyWindow();
  690. m_PageCertDb.DestroyWindow();
  691. m_PageUp.DestroyWindow();
  692. ::Shell_NotifyIcon( NIM_DELETE,&m_nid );
  693. //删除XP风格界面库的全局钩子
  694. //ClassXP(NULL, FALSE);
  695. }
  696. LRESULT CMiniMainDlg::WindowProc(UINT message, WPARAM wParam, LPARAM lParam) 
  697. {
  698. // TODO: Add your specialized code here and/or call the base class
  699. switch(message)
  700. {
  701. case WM_SYSTEMTRAY:  //自定义消息     
  702. if(lParam==WM_LBUTTONDOWN)
  703. {  
  704. // AfxGetApp()->m_pMainWnd->ShowWindow(SW_SHOW);
  705. AfxGetApp()->m_pMainWnd->ShowWindow(SW_RESTORE);
  706. AfxGetApp()->m_pMainWnd->SetForegroundWindow();
  707. m_bHide = FALSE;
  708. break;
  709. }
  710. else if(lParam==WM_RBUTTONDOWN)
  711. //得到窗口状态
  712. // WINDOWPLACEMENT Ment;
  713. // BOOL bGet = GetWindowPlacement(&Ment);
  714. POINT point;
  715. GetCursorPos(&point);
  716. BCMenu m_PopMenu;
  717. m_PopMenu.LoadMenu(IDR_MENU_SHELL);
  718. m_PopMenu.LoadToolbar(IDR_MINICAMENU);
  719. m_PopMenu.SetBitmapBackground(RGB(128,0,0));
  720. CLanguage::TranslateMenu(&m_PopMenu, MAKEINTRESOURCE(IDR_MENU_SHELL));
  721. CMenu * pPopup = m_PopMenu.GetSubMenu(0);
  722. SetForegroundWindow(); //点击可以关闭
  723. ASSERT(pPopup);
  724. UINT nSelection = pPopup->TrackPopupMenu(TPM_RIGHTALIGN|TPM_LEFTBUTTON|TPM_VERTICAL|
  725. TPM_NONOTIFY|TPM_RETURNCMD,point.x, point.y,this, NULL);
  726. m_PopMenu.DestroyMenu();
  727. //返回菜单id
  728. if(nSelection == ID_MENUITEM_CLOSE)//MiniCA关闭
  729. {
  730. SendMessage(WM_CLOSE,0,0);
  731. }
  732. else if(nSelection == ID_MENUITEM_SHOW)//显示
  733. {
  734. AfxGetApp()->m_pMainWnd->ShowWindow(SW_RESTORE);
  735. AfxGetApp()->m_pMainWnd->SetForegroundWindow();
  736. m_bHide = FALSE;
  737. }
  738. else if(nSelection == ID_MENUITEM_HIDE)//隐藏
  739. {
  740. AfxGetApp()->m_pMainWnd->ShowWindow(SW_HIDE);
  741. m_bHide = TRUE;
  742. }
  743. break;
  744. }
  745. case WM_SYSCOMMAND: //系统消息   
  746. if(wParam==SC_MINIMIZE)
  747. AfxGetApp()->m_pMainWnd->ShowWindow(SW_HIDE);//窗口隐藏
  748. m_bHide = TRUE;
  749. return 0;
  750. }
  751. else if ((wParam >= IDM_View_Default) && (wParam <= IDM_View_Default + 49))
  752. {
  753. // 改变语言
  754. HMENU hMenu = GetSystemMenu(FALSE)->m_hMenu;
  755. if (((MF_CHECKED & GetMenuState(hMenu, wParam, MF_BYCOMMAND)) != MF_CHECKED))
  756. {
  757. CLanguage::Set(hMenu, wParam);
  758. Language(); //转换对话框文字
  759. // 翻译菜单
  760. CLanguage::TranslateMenu(hMenu, "60000"); //转换系统菜单文字
  761. }
  762. return 0;
  763. }
  764. break;
  765. }
  766. return CDialog::WindowProc(message, wParam, lParam);
  767. }
  768. int CMiniMainDlg::AddMsg(CString caption, CString info, DWORD type)
  769. {
  770. SYSTEMTIME tm;
  771. GetLocalTime(&tm);
  772. CString time,msg;
  773. time.Format(_T("%04d%02d%02d%02d%02d%02d"), tm.wYear,
  774. tm.wMonth,tm.wDay,tm.wHour, tm.wMinute,tm.wSecond);
  775. msg.Format("%s (%s) : %s",time, caption, info);
  776. if(type == M_OK)
  777. ShowNotifier(info);
  778. return m_ListBox.AddMsg(msg,type);
  779. }
  780. void CMiniMainDlg::DeleteLast()
  781. {
  782. m_ListBox.DeleteLast();
  783. }
  784. /*HBRUSH CMiniMainDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) 
  785. {
  786. HBRUSH hbr =  CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
  787. // TODO: Change any attributes of the DC here
  788. if(CTLCOLOR_LISTBOX  ==  nCtlColor)  
  789. {  
  790. LOGBRUSH  logBrush;  
  791. logBrush.lbStyle  =   BS_SOLID;  
  792. logBrush.lbColor  =   RGB(240,240,240);
  793. logBrush.lbHatch  =   HS_CROSS;  
  794. return  hbr  =   CreateBrushIndirect(&logBrush);  
  795. }
  796. // TODO: Return a different brush if the default is not desired
  797. return hbr;
  798. }*/
  799. void CMiniMainDlg::SetRegFlag(BOOL bFlag)
  800. {
  801. m_RegFlag =  bFlag;
  802. }
  803. void CMiniMainDlg::SetItemIcon(CString pageName,UINT uIcon)
  804. {
  805. if(pageName.IsEmpty())
  806. return ;
  807. HTREEITEM hItem = m_TreeCtrl.FindItem(m_TreeCtrl.GetRootItem(),CMiniCaApp::NormalCode(pageName));
  808. if(hItem!=NULL)
  809. {
  810. m_TreeCtrl.SetItemImage(hItem,uIcon,uIcon);
  811. if(pageName.Find("MiniCA")== -1)
  812. pageName =  "MiniCA "+pageName;
  813. if(!m_RegFlag)//0未注册
  814. pageName += "(未注册)";
  815. SetupShell(CMiniCaApp::NormalCode(pageName), m_ImgList.ExtractIcon(uIcon));
  816. }
  817. }
  818. BOOL CMiniMainDlg::GotoPage(CString pageName)//转到某页
  819. {
  820. //遍历树,查找名称,展开父,选择
  821. /* if(pageName.IsEmpty())
  822. return FALSE;
  823. HTREEITEM hItem = m_TreeCtrl.FindItem(m_TreeCtrl.GetRootItem(),pageName);
  824. if(hItem!=NULL)
  825. {
  826. m_TreeCtrl.SelectItem(hItem);
  827. m_TreeCtrl.EnsureVisible(hItem);
  828. m_TreeCtrl.ExpandParent(hItem,TVE_EXPAND);
  829. return TRUE;
  830. }
  831. else
  832. return FALSE;*/
  833. return m_TreeCtrl.GotoPage(pageName);
  834. }
  835. void CMiniMainDlg::ViewCertInfo(char * cert,UINT certlen, void * x509)
  836. {
  837. GotoPage(MiniCT_0004); ////MiniCT 4 "数证解析"
  838. char buf[255] = {0};
  839. if(!m_PageCertInfo.ViewCertInfo(cert,certlen,x509,buf))
  840. if(certlen == 0 && x509 == 0)
  841. {
  842. AddMsg(MiniCT_0004, buf, M_ERROR); ////MiniCT 4
  843. }
  844. }
  845. CColorListBox * CMiniMainDlg::GetListBox()
  846. {
  847. return & m_ListBox;
  848. }
  849. void CMiniMainDlg::OnOK ()
  850. {
  851. }
  852. void CMiniMainDlg::OnCancel()
  853. {
  854. }
  855. void CMiniMainDlg::OnClose() 
  856. {
  857. // TODO: Add your message handler code here and/or call default
  858. //向WEB服务器程序发送WM_CLOSE消息,以使WEB服务器响应,关闭线程,否则
  859. //WEB不会响应WM_CLOSE事件
  860. //WM_CLOSE响应事件中线程销毁内存泄漏严重,只能通过提示
  861. if(m_PageWebSheet.IsWebRun())
  862. {
  863. // m_PageWebServer.StopServer();
  864. GotoPage(MiniCT_0003); //MiniCT 3 "Web服务"
  865. CString lpText = MiniCT_0009;
  866. CString lpCaption = MiniCT_0010;
  867. MessageBox(MiniCT_0009, //MiniCT 9
  868. MiniCT_0010, MB_ICONWARNING | MB_OK); ////MiniCT 10
  869. return;
  870. }
  871. // m_PageWebServer.SendMessage(WM_CLOSE);
  872. /* if(!m_PageSafeData.CanQuit()) //操作中
  873. {
  874. GotoPage(MiniCT_0002); //MiniCT 2
  875. if(MessageBox(MiniCT_0011, //MiniCT 11
  876. MiniCT_0010, MB_ICONWARNING | //MiniCT 10
  877. MB_YESNO |MB_DEFBUTTON2 )!=IDYES)
  878. {
  879. return;
  880. }
  881. }*/
  882. DestroyIcon(m_hIconSelect);
  883. CDialog::OnOK();
  884. }
  885. void CMiniMainDlg::SetupShell(CString & strName,const HICON hIcon)
  886. {
  887. m_nid.hIcon =  hIcon;
  888. SetWindowText(strName);
  889. strcpy(m_nid.szTip, strName);
  890. ::Shell_NotifyIcon( NIM_MODIFY,&m_nid);
  891. }
  892. //通过类名,返回制定属性页的对象指针
  893. CWnd * CMiniMainDlg::GetPage(CString strPageName)
  894. {
  895. //枚举属性页
  896. CRuntimeClass * prt = NULL;
  897. prt = m_PageCa.GetRuntimeClass();
  898. if(strcmp( prt->m_lpszClassName, strPageName )  == 0 )
  899. return &m_PageCa;
  900. prt = m_PageCertWizardSheet.GetRuntimeClass();
  901. if(strcmp( prt->m_lpszClassName, strPageName )  == 0 )
  902. return &m_PageCertWizardSheet;
  903. prt = m_PageExt.GetRuntimeClass();
  904. if(strcmp( prt->m_lpszClassName, strPageName )  == 0 )
  905. return &m_PageExt;
  906. prt = m_PageWinEvpSheet.GetRuntimeClass();
  907. if(strcmp( prt->m_lpszClassName, strPageName )  == 0 )
  908. return &m_PageWinEvpSheet;
  909. /* prt = m_SslSheet.GetRuntimeClass();
  910. if(strcmp( prt->m_lpszClassName, strPageName )  == 0 )
  911. return &m_SslSheet;
  912. prt = m_PageRa.GetRuntimeClass();
  913. if(strcmp( prt->m_lpszClassName, strPageName )  == 0 )
  914. return &m_PageRa;
  915. prt = m_OcspSheet.GetRuntimeClass();
  916. if(strcmp( prt->m_lpszClassName, strPageName )  == 0 )
  917. return &m_OcspSheet;
  918. prt = m_PageAsn1Parse.GetRuntimeClass();
  919. if(strcmp( prt->m_lpszClassName, strPageName )  == 0 )
  920. return &m_PageAsn1Parse;
  921. */
  922. prt = m_PageCertInfo.GetRuntimeClass();
  923. if(strcmp( prt->m_lpszClassName, strPageName )  == 0 )
  924. return &m_PageCertInfo;
  925. prt = m_PageReg.GetRuntimeClass();
  926. if(strcmp( prt->m_lpszClassName, strPageName )  == 0 )
  927. return &m_PageReg;
  928. prt = m_PageCertDb.GetRuntimeClass();
  929. if(strcmp( prt->m_lpszClassName, strPageName )  == 0 )
  930. return &m_PageCertDb;
  931. prt = m_PageUp.GetRuntimeClass();
  932. if(strcmp( prt->m_lpszClassName, strPageName )  == 0 )
  933. return &m_PageUp;
  934. return NULL;
  935. }
  936. void CMiniMainDlg::OnDropFiles(HDROP hDropInfo) 
  937. {
  938. // TODO: Add your message handler code here and/or call default
  939. HTREEITEM hCurrent =  m_TreeCtrl.GetSelectedItem();
  940. WORD wNumFilesDropped = DragQueryFile(hDropInfo, -1, NULL, 0);
  941.     // 
  942. POINT  pt;
  943. DragQueryPoint(hDropInfo, &pt);
  944. CString FileName;
  945.     for (WORD x = 0 ; x < wNumFilesDropped; x++)
  946. {
  947.         // 得到PathName的长度,由于第三个参数为NULL,所以调用会失败并返回所需长度
  948.         WORD wPathnameSize = DragQueryFile(hDropInfo, x, NULL, 0);
  949.         // 分配memory
  950.         char * npszFile = (char *) LocalAlloc(LPTR, wPathnameSize += 1);
  951.         // 分配错
  952.         if (npszFile == NULL) continue;
  953.         // 再次得到文件名
  954.         DragQueryFile(hDropInfo, x, npszFile, wPathnameSize);
  955. // 如果是快捷方式则进行转换得到正确的文件名,expandedFile为最后的文件名
  956. FileName = ExpandShortcut(npszFile);
  957. if(FileName.IsEmpty())
  958. {
  959. LocalFree(npszFile);
  960. continue;
  961. }
  962. /* if(hCurrent == m_hPageWinEvpSheetItem)
  963. {
  964. CString strDir;
  965. strDir = FileName.Right(3);
  966. CSafeDataSetPage::EncType encType;
  967. CSafeDataSetPage * pSafeData = (CSafeDataSetPage*)m_PageWinEvpSheet.GetPage("CSafeDataSetPage");
  968. if(pSafeData)
  969. {
  970. if(strDir.CompareNoCase("evp") == 0)
  971. {
  972. pSafeData->ParseEvp(FileName, encType);
  973. }
  974. else
  975. pSafeData->AddList(FileName); //如果扩展名不为.evp
  976. }
  977. }*/
  978. else if(hCurrent == m_hPageAsn1ParseItem)
  979. {
  980. m_PageAsn1Parse.GetAsn1Info(FileName);
  981. }
  982. else if(hCurrent == m_hPageCertInfoItem)
  983. {
  984. ViewCertInfo(FileName.GetBuffer(0));
  985. }
  986.         // 释放memory
  987.         LocalFree(npszFile);
  988.     }
  989.     //完成
  990.     DragFinish(hDropInfo);
  991. CDialog::OnDropFiles(hDropInfo);
  992. }
  993. CString CMiniMainDlg::ExpandShortcut(char * inFile)
  994. {
  995.     CString outFile = "";
  996. // Make sure we have a path
  997. ASSERT(inFile != _T(""));
  998. IShellLink * psl;
  999. HRESULT hres;
  1000. // Create instance for shell link
  1001. hres = ::CoCreateInstance(CLSID_ShellLink, NULL, CLSCTX_INPROC_SERVER,
  1002. IID_IShellLink, (LPVOID*) &psl);
  1003. if (SUCCEEDED(hres))
  1004. {
  1005. // Get a pointer to the persist file interface
  1006. IPersistFile* ppf;
  1007. hres = psl->QueryInterface(IID_IPersistFile, (LPVOID*) &ppf);
  1008. if (SUCCEEDED(hres))
  1009. {
  1010. // Make sure it's ANSI
  1011. WORD wsz[MAX_PATH];
  1012. ::MultiByteToWideChar(CP_ACP, 0, inFile, -1, wsz, MAX_PATH);
  1013. // Load shortcut
  1014. hres = ppf->Load(wsz, STGM_READ);
  1015. if (SUCCEEDED(hres))
  1016. {
  1017.                 WIN32_FIND_DATA wfd;
  1018.                 // find the path from that
  1019.                 HRESULT hres = psl->GetPath(outFile.GetBuffer(MAX_PATH), 
  1020. MAX_PATH,
  1021. &wfd, 
  1022. SLGP_UNCPRIORITY);
  1023.                 outFile.ReleaseBuffer();
  1024. }
  1025. else 
  1026. outFile = inFile;
  1027. ppf->Release();
  1028. }
  1029. psl->Release();
  1030. }
  1031.     // if this fails, outFile == ""
  1032. return outFile;
  1033. }
  1034. BOOL CMiniMainDlg::PreTranslateMessage(MSG* pMsg) 
  1035. {
  1036. // TODO: Add your specialized code here and/or call the base class
  1037. return CDialog::PreTranslateMessage(pMsg);
  1038. }
  1039. void CMiniMainDlg::Language()
  1040. {
  1041. TranslateCT(); 
  1042. CLanguage::TranslateDialog(m_PageCa.m_hWnd, MAKEINTRESOURCE(IDD_PROPPAGE_CA));
  1043. m_PageCa.TranslateCT();
  1044. m_PageCertWizardSheet.Language();
  1045. m_PageExt.TranslateCT();
  1046. m_PageWinEvpSheet.Language();
  1047. CLanguage::TranslateDialog(m_PageExt.m_hWnd, MAKEINTRESOURCE(IDD_PROPPAGE_EXT));
  1048. m_PageWebSheet.Language();
  1049. m_PageCertInfo.TranslateCT();
  1050. m_PageAsn1Parse.TranslateCT();
  1051. m_PageUp.TranslateCT();
  1052. m_PageCertDb.TranslateCT();
  1053. CLanguage::TranslateDialog(m_PageCertInfo.m_hWnd, MAKEINTRESOURCE(IDD_PROPPAGE_CERTINFO));
  1054. CLanguage::TranslateDialog(m_PageAsn1Parse.m_hWnd, MAKEINTRESOURCE(IDD_PROPPAGE_ASN1));
  1055. CLanguage::TranslateDialog(m_PageReg.m_hWnd, MAKEINTRESOURCE(IDD_PROPPAGE_REG));
  1056. CLanguage::TranslateDialog(m_PageCertDb.m_hWnd, MAKEINTRESOURCE(IDD_PROPPAGE_CERTSETUP));
  1057. HTREEITEM hCurrent =  m_TreeCtrl.GetSelectedItem();
  1058. CString strName = m_TreeCtrl.GetItemText(hCurrent);
  1059. if(strName.Find("MiniCA")== -1)
  1060. strName =  "MiniCA "+strName;
  1061. if(!m_RegFlag)//0未注册
  1062. strName+= CMiniCaApp::NormalCode("(未注册)");
  1063. m_CaptionBarCtrl.SetWindowText(strName);
  1064. SetWindowText(strName);
  1065. }
  1066. void CMiniMainDlg::TranslateCT() //繙譯諸如樹型控件,列錶控件等內容
  1067. {
  1068. m_TreeCtrl.SetRedraw(FALSE);
  1069. m_TreeCtrl.SetItemText(m_hPageCertWizardSheetItem, MiniCT_0000); //MiniCT 0
  1070. m_TreeCtrl.SetItemText(m_hPageExtItem, MiniCT_0001); //MiniCT 1
  1071. m_TreeCtrl.SetItemText(m_hPageWinEvpSheetItem, MiniCT_0002); //MiniCT 2
  1072. m_TreeCtrl.SetItemText(m_hPageWebSheetItem, MiniCT_0003); //MiniCT 3
  1073. m_TreeCtrl.SetItemText(m_hPageCertInfoItem, MiniCT_0004); //MiniCT 4
  1074. m_TreeCtrl.SetItemText(m_hPageAsn1ParseItem, MiniCT_0005); //MiniCT 5
  1075. m_TreeCtrl.SetItemText(m_hPageUpItem, MiniCT_0006); //MiniCT 6
  1076. m_TreeCtrl.SetItemText(m_hPageCertDbItem, MiniCT_0007); //MiniCT 7
  1077. m_TreeCtrl.SetItemText(m_hPageRegItem, MiniCT_0008); //MiniCT 8
  1078. m_TreeCtrl.SetRedraw();
  1079. }
  1080. void CMiniMainDlg::ShowNotifier(CString strNotifier)
  1081. {
  1082. //首先判断窗口是否隐藏中
  1083. if(m_bHide == TRUE)
  1084. m_wndTaskbarNotifier.Show(strNotifier);
  1085. }