📄 minimaindlg.cpp
字号:
{
//得到窗口状态
// 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 + -