⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 minimaindlg.cpp

📁 MiniCA V2.0版本源码。《小型CA系统V2.1含源码》发表以来
💻 CPP
📖 第 1 页 / 共 3 页
字号:
		{ 

			//得到窗口状态
	//		WINDOWPLACEMENT Ment;
	//		BOOL bGet = GetWindowPlacement(&Ment);
			
			POINT point;
			GetCursorPos(&point);

			BCMenu m_PopMenu;
			m_PopMenu.LoadMenu(IDR_MENU_SHELL);
			m_PopMenu.LoadToolbar(IDR_MINICAMENU);
			m_PopMenu.SetBitmapBackground(RGB(128,0,0));

			CLanguage::TranslateMenu(&m_PopMenu, MAKEINTRESOURCE(IDR_MENU_SHELL));

			CMenu * pPopup = m_PopMenu.GetSubMenu(0);
			SetForegroundWindow(); //点击可以关闭
			ASSERT(pPopup);
			UINT nSelection = pPopup->TrackPopupMenu(TPM_RIGHTALIGN|TPM_LEFTBUTTON|TPM_VERTICAL|
				TPM_NONOTIFY|TPM_RETURNCMD,point.x, point.y,this, NULL);
			m_PopMenu.DestroyMenu();
			//返回菜单id
			if(nSelection == ID_MENUITEM_CLOSE)//MiniCA关闭
			{
				SendMessage(WM_CLOSE,0,0);
			}
			else if(nSelection == ID_MENUITEM_SHOW)//显示
			{
				AfxGetApp()->m_pMainWnd->ShowWindow(SW_RESTORE);
				AfxGetApp()->m_pMainWnd->SetForegroundWindow();
				m_bHide = FALSE;
			}
			else if(nSelection == ID_MENUITEM_HIDE)//隐藏
			{
				AfxGetApp()->m_pMainWnd->ShowWindow(SW_HIDE);
				m_bHide = TRUE;
			}
			break;
		}
		
	case WM_SYSCOMMAND: //系统消息   
		if(wParam==SC_MINIMIZE)
		{ 
			AfxGetApp()->m_pMainWnd->ShowWindow(SW_HIDE);//窗口隐藏
			m_bHide = TRUE;
			return 0;
		}
		else if ((wParam >= IDM_View_Default) && (wParam <= IDM_View_Default + 49))
		{
			// 改变语言
			HMENU hMenu = GetSystemMenu(FALSE)->m_hMenu;
			if (((MF_CHECKED & GetMenuState(hMenu, wParam, MF_BYCOMMAND)) != MF_CHECKED))
			{
				CLanguage::Set(hMenu, wParam);
				Language();	//转换对话框文字
				// 翻译菜单
				CLanguage::TranslateMenu(hMenu, "60000"); //转换系统菜单文字
			}
			return 0;
		}

		break;
	}		
	return CDialog::WindowProc(message, wParam, lParam);
}


int CMiniMainDlg::AddMsg(CString caption, CString info, DWORD type)
{
	SYSTEMTIME tm;
	GetLocalTime(&tm);
	CString time,msg;
	time.Format(_T("%04d%02d%02d%02d%02d%02d"), tm.wYear,
		tm.wMonth,tm.wDay,tm.wHour, tm.wMinute,tm.wSecond);
	msg.Format("%s (%s) : %s",time, caption, info);
	if(type == M_OK)
		ShowNotifier(info);
	return m_ListBox.AddMsg(msg,type);
}

void CMiniMainDlg::DeleteLast()
{
	m_ListBox.DeleteLast();
}

/*HBRUSH CMiniMainDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) 
{
	HBRUSH hbr =  CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
	
	// TODO: Change any attributes of the DC here
	if(CTLCOLOR_LISTBOX  ==  nCtlColor)  
	{  
		LOGBRUSH  logBrush;  
		logBrush.lbStyle  =   BS_SOLID;  
		logBrush.lbColor  =   RGB(240,240,240);
		logBrush.lbHatch  =   HS_CROSS;  
		
		return  hbr  =   CreateBrushIndirect(&logBrush);  
	}
	
	// TODO: Return a different brush if the default is not desired
	return hbr;
}*/

void CMiniMainDlg::SetRegFlag(BOOL bFlag)
{
	m_RegFlag =  bFlag;
}

void CMiniMainDlg::SetItemIcon(CString pageName,UINT uIcon)
{
	if(pageName.IsEmpty())
		return ;
	HTREEITEM hItem = m_TreeCtrl.FindItem(m_TreeCtrl.GetRootItem(),CMiniCaApp::NormalCode(pageName));
	if(hItem!=NULL)
	{
		m_TreeCtrl.SetItemImage(hItem,uIcon,uIcon);

		if(pageName.Find("MiniCA")== -1)
			pageName =  "MiniCA "+pageName;
		if(!m_RegFlag)//0未注册
			pageName += "(未注册)";
		SetupShell(CMiniCaApp::NormalCode(pageName), m_ImgList.ExtractIcon(uIcon));

	}
	
}

BOOL CMiniMainDlg::GotoPage(CString pageName)//转到某页
{
	//遍历树,查找名称,展开父,选择
/*	if(pageName.IsEmpty())
		return FALSE;
	HTREEITEM hItem = m_TreeCtrl.FindItem(m_TreeCtrl.GetRootItem(),pageName);
	if(hItem!=NULL)
	{
		m_TreeCtrl.SelectItem(hItem);
		m_TreeCtrl.EnsureVisible(hItem);
		m_TreeCtrl.ExpandParent(hItem,TVE_EXPAND);
		return TRUE;
	}
	else
		return FALSE;*/
	return m_TreeCtrl.GotoPage(pageName);
}

void CMiniMainDlg::ViewCertInfo(char * cert,UINT certlen, void * x509)
{
	GotoPage(MiniCT_0004);			////MiniCT 4 "数证解析"
	char buf[255] = {0};
	if(!m_PageCertInfo.ViewCertInfo(cert,certlen,x509,buf))
		if(certlen == 0 && x509 == 0)
		{
			AddMsg(MiniCT_0004, buf, M_ERROR);		////MiniCT 4
		}
}

CColorListBox * CMiniMainDlg::GetListBox()
{
	return & m_ListBox;
}

void CMiniMainDlg::OnOK ()
{
}

void CMiniMainDlg::OnCancel()
{
}

void CMiniMainDlg::OnClose() 
{
	// TODO: Add your message handler code here and/or call default
	//向WEB服务器程序发送WM_CLOSE消息,以使WEB服务器响应,关闭线程,否则
	//WEB不会响应WM_CLOSE事件
	//WM_CLOSE响应事件中线程销毁内存泄漏严重,只能通过提示
	if(m_PageWebSheet.IsWebRun())
	{
//	m_PageWebServer.StopServer();
		GotoPage(MiniCT_0003);							//MiniCT 3 "Web服务"
		CString lpText = MiniCT_0009;
		CString lpCaption = MiniCT_0010;

		MessageBox(MiniCT_0009,	//MiniCT 9
			MiniCT_0010, MB_ICONWARNING | MB_OK);		////MiniCT 10
		return;
	}
//	m_PageWebServer.SendMessage(WM_CLOSE);

/*	if(!m_PageSafeData.CanQuit())	//操作中
	{
		GotoPage(MiniCT_0002);				//MiniCT 2
		if(MessageBox(MiniCT_0011,		//MiniCT 11
			MiniCT_0010, MB_ICONWARNING |			//MiniCT 10
			MB_YESNO |MB_DEFBUTTON2 )!=IDYES)
		{
			return;
		}
	}*/
	DestroyIcon(m_hIconSelect);
	CDialog::OnOK();
}

void CMiniMainDlg::SetupShell(CString & strName,const HICON hIcon)
{
	m_nid.hIcon =  hIcon;
	SetWindowText(strName);
	strcpy(m_nid.szTip, strName);
	::Shell_NotifyIcon( NIM_MODIFY,&m_nid);
}

//通过类名,返回制定属性页的对象指针
CWnd * CMiniMainDlg::GetPage(CString strPageName)
{
	//枚举属性页
	CRuntimeClass * prt = NULL;

	prt = m_PageCa.GetRuntimeClass();
	if(strcmp( prt->m_lpszClassName, strPageName )  == 0 )
		return &m_PageCa;

	prt = m_PageCertWizardSheet.GetRuntimeClass();
	if(strcmp( prt->m_lpszClassName, strPageName )  == 0 )
		return &m_PageCertWizardSheet;

	prt = m_PageExt.GetRuntimeClass();
	if(strcmp( prt->m_lpszClassName, strPageName )  == 0 )
		return &m_PageExt;

	prt = m_PageWinEvpSheet.GetRuntimeClass();
	if(strcmp( prt->m_lpszClassName, strPageName )  == 0 )
		return &m_PageWinEvpSheet;

/*	prt = m_SslSheet.GetRuntimeClass();
	if(strcmp( prt->m_lpszClassName, strPageName )  == 0 )
		return &m_SslSheet;

	prt = m_PageRa.GetRuntimeClass();
	if(strcmp( prt->m_lpszClassName, strPageName )  == 0 )
		return &m_PageRa;

	prt = m_OcspSheet.GetRuntimeClass();
	if(strcmp( prt->m_lpszClassName, strPageName )  == 0 )
		return &m_OcspSheet;

	prt = m_PageAsn1Parse.GetRuntimeClass();
	if(strcmp( prt->m_lpszClassName, strPageName )  == 0 )
		return &m_PageAsn1Parse;
*/
	prt = m_PageCertInfo.GetRuntimeClass();
	if(strcmp( prt->m_lpszClassName, strPageName )  == 0 )
		return &m_PageCertInfo;

	prt = m_PageReg.GetRuntimeClass();
	if(strcmp( prt->m_lpszClassName, strPageName )  == 0 )
		return &m_PageReg;

	prt = m_PageCertDb.GetRuntimeClass();
	if(strcmp( prt->m_lpszClassName, strPageName )  == 0 )
		return &m_PageCertDb;

	prt = m_PageUp.GetRuntimeClass();
	if(strcmp( prt->m_lpszClassName, strPageName )  == 0 )
		return &m_PageUp;

	return NULL;
}

void CMiniMainDlg::OnDropFiles(HDROP hDropInfo) 
{
	// TODO: Add your message handler code here and/or call default
	HTREEITEM hCurrent =  m_TreeCtrl.GetSelectedItem();
	
	WORD wNumFilesDropped = DragQueryFile(hDropInfo, -1, NULL, 0);
    // 
	POINT  pt;
	DragQueryPoint(hDropInfo, &pt);
	CString FileName;
    for (WORD x = 0 ; x < wNumFilesDropped; x++)
	{
        // 得到PathName的长度,由于第三个参数为NULL,所以调用会失败并返回所需长度
        WORD wPathnameSize = DragQueryFile(hDropInfo, x, NULL, 0);
        // 分配memory
        char * npszFile = (char *) LocalAlloc(LPTR, wPathnameSize += 1);
        // 分配错
        if (npszFile == NULL) continue;
        // 再次得到文件名
        DragQueryFile(hDropInfo, x, npszFile, wPathnameSize);
		// 如果是快捷方式则进行转换得到正确的文件名,expandedFile为最后的文件名
		FileName = ExpandShortcut(npszFile);
		if(FileName.IsEmpty())
		{
			LocalFree(npszFile);
			continue;
		}

/*		if(hCurrent == m_hPageWinEvpSheetItem)
		{
			CString strDir;
			strDir = FileName.Right(3);
			
			CSafeDataSetPage::EncType encType;
			
			CSafeDataSetPage * pSafeData = (CSafeDataSetPage*)m_PageWinEvpSheet.GetPage("CSafeDataSetPage");
		
			if(pSafeData)
			{
				if(strDir.CompareNoCase("evp") == 0)
				{
					pSafeData->ParseEvp(FileName, encType);
				}
				else
					pSafeData->AddList(FileName);		//如果扩展名不为.evp
			}
		}*/
		else if(hCurrent == m_hPageAsn1ParseItem)
		{
			m_PageAsn1Parse.GetAsn1Info(FileName);
		}
		else if(hCurrent == m_hPageCertInfoItem)
		{
			ViewCertInfo(FileName.GetBuffer(0));
		}
		
        // 释放memory
        LocalFree(npszFile);
    }
    //完成
    DragFinish(hDropInfo);	
	CDialog::OnDropFiles(hDropInfo);
}

CString CMiniMainDlg::ExpandShortcut(char * inFile)
{
    CString outFile = "";
	// Make sure we have a path
	ASSERT(inFile != _T(""));
	IShellLink * psl;
	HRESULT hres;
	// Create instance for shell link
	hres = ::CoCreateInstance(CLSID_ShellLink, NULL, CLSCTX_INPROC_SERVER,
		IID_IShellLink, (LPVOID*) &psl);
	if (SUCCEEDED(hres))
	{
		// Get a pointer to the persist file interface
		IPersistFile* ppf;
		hres = psl->QueryInterface(IID_IPersistFile, (LPVOID*) &ppf);
		if (SUCCEEDED(hres))
		{
			// Make sure it's ANSI
			WORD wsz[MAX_PATH];
			::MultiByteToWideChar(CP_ACP, 0, inFile, -1, wsz, MAX_PATH);
			
			// Load shortcut
			hres = ppf->Load(wsz, STGM_READ);
			if (SUCCEEDED(hres))
			{
                WIN32_FIND_DATA wfd;
                // find the path from that
                HRESULT hres = psl->GetPath(outFile.GetBuffer(MAX_PATH), 
					MAX_PATH,
					&wfd, 
					SLGP_UNCPRIORITY);
				
                outFile.ReleaseBuffer();
			}
			else 
				outFile = inFile;
			ppf->Release();
		}
		psl->Release();
	}
	
    // if this fails, outFile == ""
	return outFile;
}

BOOL CMiniMainDlg::PreTranslateMessage(MSG* pMsg) 
{
	// TODO: Add your specialized code here and/or call the base class
	return CDialog::PreTranslateMessage(pMsg);
}

void CMiniMainDlg::Language()
{
	TranslateCT(); 

	CLanguage::TranslateDialog(m_PageCa.m_hWnd, MAKEINTRESOURCE(IDD_PROPPAGE_CA));
	m_PageCa.TranslateCT();

	m_PageCertWizardSheet.Language();

	m_PageExt.TranslateCT();

	m_PageWinEvpSheet.Language();
	
	CLanguage::TranslateDialog(m_PageExt.m_hWnd, MAKEINTRESOURCE(IDD_PROPPAGE_EXT));

	m_PageWebSheet.Language();

	m_PageCertInfo.TranslateCT();

	m_PageAsn1Parse.TranslateCT();
	
	m_PageUp.TranslateCT();

	m_PageCertDb.TranslateCT();

	CLanguage::TranslateDialog(m_PageCertInfo.m_hWnd, MAKEINTRESOURCE(IDD_PROPPAGE_CERTINFO));
	CLanguage::TranslateDialog(m_PageAsn1Parse.m_hWnd, MAKEINTRESOURCE(IDD_PROPPAGE_ASN1));
	CLanguage::TranslateDialog(m_PageReg.m_hWnd, MAKEINTRESOURCE(IDD_PROPPAGE_REG));
	CLanguage::TranslateDialog(m_PageCertDb.m_hWnd, MAKEINTRESOURCE(IDD_PROPPAGE_CERTSETUP));

	HTREEITEM hCurrent =  m_TreeCtrl.GetSelectedItem();
	CString strName = m_TreeCtrl.GetItemText(hCurrent);

	if(strName.Find("MiniCA")== -1)
		strName =  "MiniCA "+strName;
	if(!m_RegFlag)//0未注册
		strName+= CMiniCaApp::NormalCode("(未注册)");

	m_CaptionBarCtrl.SetWindowText(strName);
	SetWindowText(strName);
}

void CMiniMainDlg::TranslateCT()	//繙譯諸如樹型控件,列錶控件等內容
{
	m_TreeCtrl.SetRedraw(FALSE);
	m_TreeCtrl.SetItemText(m_hPageCertWizardSheetItem, MiniCT_0000);	//MiniCT 0
	m_TreeCtrl.SetItemText(m_hPageExtItem, MiniCT_0001);	//MiniCT 1
	m_TreeCtrl.SetItemText(m_hPageWinEvpSheetItem, MiniCT_0002);	//MiniCT 2
	m_TreeCtrl.SetItemText(m_hPageWebSheetItem, MiniCT_0003);	//MiniCT 3
	m_TreeCtrl.SetItemText(m_hPageCertInfoItem, MiniCT_0004);	//MiniCT 4
	m_TreeCtrl.SetItemText(m_hPageAsn1ParseItem, MiniCT_0005);	//MiniCT 5
	m_TreeCtrl.SetItemText(m_hPageUpItem, MiniCT_0006);	//MiniCT 6
	m_TreeCtrl.SetItemText(m_hPageCertDbItem, MiniCT_0007);	//MiniCT 7
	m_TreeCtrl.SetItemText(m_hPageRegItem, MiniCT_0008);	//MiniCT 8
	m_TreeCtrl.SetRedraw();
}

void CMiniMainDlg::ShowNotifier(CString strNotifier)
{
	//首先判断窗口是否隐藏中
	if(m_bHide == TRUE)
		m_wndTaskbarNotifier.Show(strNotifier);
}

⌨️ 快捷键说明

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