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

📄 myviewerdlg.cpp

📁 文件加密软件
💻 CPP
字号:
// MyViewerDlg.cpp : implementation file
//

#include "stdafx.h"
#include "MyViewer.h"
#include "MyViewerDlg.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CAboutDlg dialog used for App About

class CAboutDlg : public CDialog
{
public:
	CAboutDlg();

// Dialog Data
	//{{AFX_DATA(CAboutDlg)
	enum { IDD = IDD_ABOUTBOX };
	//}}AFX_DATA

	// ClassWizard generated virtual function overrides
	//{{AFX_VIRTUAL(CAboutDlg)
	protected:
	virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support
	//}}AFX_VIRTUAL

// Implementation
protected:
	//{{AFX_MSG(CAboutDlg)
	virtual BOOL OnInitDialog();
	//}}AFX_MSG
	DECLARE_MESSAGE_MAP()
};

CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
{
	//{{AFX_DATA_INIT(CAboutDlg)
	//}}AFX_DATA_INIT
}
BOOL CAboutDlg::OnInitDialog() 
{
	

	char hostname[_MAX_PATH];	//主机名
	char username[_MAX_PATH];	//用户名
	DWORD dwSize=_MAX_PATH;
	DWORD dwSize1=_MAX_PATH;
	MEMORYSTATUS mem_stat;		//可用物理内存

	GlobalMemoryStatus(&mem_stat);

	GetComputerName(hostname,&dwSize);
	GetUserName(username,&dwSize1);

	GetDlgItem(IDC_HOSTNAME)->SetWindowText(hostname);
	GetDlgItem(IDC_ORGANIZATION)->SetWindowText(username);
	
	CString str;
	str.Format("%d,%3dKB",mem_stat.dwTotalPhys/1024/1000,mem_stat.dwTotalPhys/1024-mem_stat.dwTotalPhys/1024/1000*1000);
	GetDlgItem(IDC_MEMPHYS)->SetWindowText(str);
	return  1;
}

void CAboutDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CAboutDlg)
	//}}AFX_DATA_MAP
}

BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
	//{{AFX_MSG_MAP(CAboutDlg)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CMyViewerDlg dialog

CMyViewerDlg::CMyViewerDlg(CWnd* pParent /*=NULL*/)
	: CDialog(CMyViewerDlg::IDD, pParent)
{
	//{{AFX_DATA_INIT(CMyViewerDlg)
		// NOTE: the ClassWizard will add member initialization here
	//}}AFX_DATA_INIT
	// Note that LoadIcon does not require a subsequent DestroyIcon in Win32
	m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
//	m_tmp.Open("tp.txt",CFile::modeCreate|CFile::modeWrite);
}

void CMyViewerDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CMyViewerDlg)
	DDX_Control(pDX, IDC_RICHEDIT1, m_show);
	//}}AFX_DATA_MAP
}

BEGIN_MESSAGE_MAP(CMyViewerDlg, CDialog)
	//{{AFX_MSG_MAP(CMyViewerDlg)
	ON_WM_SYSCOMMAND()
	ON_WM_PAINT()
	ON_WM_QUERYDRAGICON()
	ON_WM_SIZE()
	ON_COMMAND(IDM_NEW, OnNew)
	ON_COMMAND(IDM_SAVE, OnSave)
	ON_COMMAND(IDM_FONT, OnFont)
	ON_COMMAND(IDM_SAVEAS, OnSaveas)
	ON_COMMAND(IDM_OPEN, OnOpen)
	ON_EN_CHANGE(IDC_RICHEDIT1, OnChangeRichedit1)
	ON_COMMAND(IDM_ABOUT, OnAbout)
	ON_NOTIFY(EN_DROPFILES, IDC_RICHEDIT1, OnDropfilesRichedit1)
	ON_NOTIFY(EN_SELCHANGE, IDC_RICHEDIT1, OnSelchangeRichedit1)
	ON_COMMAND(IDM_CUT, OnCut)
	ON_COMMAND(IDM_COPY, OnCopy)
	ON_COMMAND(IDM_PASTE, OnPaste)
	ON_WM_CLOSE()
	ON_COMMAND(IDM_EXIT, OnExit)
	ON_COMMAND(IDM_HIDE, OnHide)
	ON_COMMAND(IDM_DECODE, OnDecode)
	ON_COMMAND(IDM_LINEAU, OnLineau)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CMyViewerDlg message handlers

void CMyViewerDlg::OnSysCommand(UINT nID, LPARAM lParam)
{
	if ((nID & 0xFFF0) == IDM_ABOUTBOX)
	{
		CAboutDlg dlgAbout;
		dlgAbout.DoModal();
	}
	else
	{
		CDialog::OnSysCommand(nID, lParam);
	}
}

// If you add a minimize button to your dialog, you will need the code below
//  to draw the icon.  For MFC applications using the document/view model,
//  this is automatically done for you by the framework.

void CMyViewerDlg::OnPaint() 
{
	if (IsIconic())
	{
		CPaintDC dc(this); // device context for painting

		SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);

		// Center icon in client rectangle
		int cxIcon = GetSystemMetrics(SM_CXICON);
		int cyIcon = GetSystemMetrics(SM_CYICON);
		CRect rect;
		GetClientRect(&rect);
		int x = (rect.Width() - cxIcon + 1) / 2;
		int y = (rect.Height() - cyIcon + 1) / 2;

		// Draw the icon
		dc.DrawIcon(x, y, m_hIcon);
	}
	else
	{
		CDialog::OnPaint();
	}
}

// The system calls this to obtain the cursor to display while the user drags
//  the minimized window.
HCURSOR CMyViewerDlg::OnQueryDragIcon()
{
	return (HCURSOR) m_hIcon;
}

void CMyViewerDlg::OnSize(UINT nType, int cx, int cy) 
{
	if(m_show.GetSafeHwnd())
	{
		RECT rc ;
		GetWindowRect(&rc);
		ScreenToClient(&rc);
		rc.top += 46 ;
		rc.left+=2 ;
		rc.right-=2 ;
		m_show.MoveWindow(&rc);
	}
	CDialog::OnSize(nType, cx, cy);	
}

BOOL CMyViewerDlg::PreTranslateMessage(MSG* pMsg) 
{
	HACCEL haccel =LoadAccelerators(AfxGetApp()->m_hInstance,(LPSTR)IDR_ACCELERATOR1) ;
	if(::TranslateAccelerator(this->m_hWnd,haccel,pMsg) )
		return 1 ;
	return CDialog::PreTranslateMessage(pMsg);
}

BOOL CMyViewerDlg::OnInitDialog()
{
	CDialog::OnInitDialog();

	
	//实现自动换行
	HDC hdc = ::GetDC(m_show.m_hWnd);
	m_show.SendMessage(EM_SETTARGETDEVICE,(WPARAM)hdc,0);
	::ReleaseDC(m_show.m_hWnd, hdc);
	// Add "About..." menu item to system menu.

	// IDM_ABOUTBOX must be in the system command range.
	ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
	ASSERT(IDM_ABOUTBOX < 0xF000);

	CMenu* pSysMenu = GetSystemMenu(FALSE);
	if (pSysMenu != NULL)
	{
		CString strAboutMenu;
		strAboutMenu.LoadString(IDS_ABOUTBOX);
		if (!strAboutMenu.IsEmpty())
		{
			pSysMenu->AppendMenu(MF_SEPARATOR);
			pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
		}
	}
	m_show.SetEventMask(ENM_CHANGE) ;
	m_show.DragAcceptFiles() ;
	m_show.SendMessage(EM_SETEVENTMASK,0,ENM_DROPFILES|ENM_CHANGE|ENM_SELCHANGE) ;
	m_font.CreateFont(18,10,0,0,400,0,0,0,0,0,0,0,0,"宋体") ;
	m_show.SetFont(&m_font) ;
	
	HMENU hmenu =LoadMenu(NULL,(LPSTR)IDR_MENU1);
	cmenu.Attach(hmenu) ;
	cmenu.EnableMenuItem(IDM_CUT,1);
	cmenu.EnableMenuItem(IDM_COPY,1);
	cmenu.EnableMenuItem(IDM_PASTE,1);
	cmenu.EnableMenuItem(IDM_SAVE,1);
	cmenu.EnableMenuItem(IDM_HIDE,1);
	SetMenu(&cmenu);
		
	m_title = "MyViewer-未命名" ;
	m_name  =  "" ;
	AfxGetApp()->GetMainWnd()->SetWindowText(m_title) ;
	m_ifcg = 0 ;
	m_ifnew = 0 ;
	m_first = 1 ;
	m_dropfile = 0 ;
	m_ifcode = 0 ;
	m_ifdecode = 0 ;
	m_hIcon =LoadIcon(AfxGetApp()->m_hInstance,(LPSTR)IDI_ICON1) ;


	char tmp[255] ;
	strcpy(tmp , AfxGetApp()->m_lpCmdLine) ;
	if(tmp[0] != 0)
	{
		m_name = AfxGetApp()->m_lpCmdLine ;
		m_dropfile = 1 ;
		OnOpen() ;
	}

	// Set the icon for this dialog.  The framework does this automatically
	//  when the application's main window is not a dialog
	SetIcon(m_hIcon, TRUE);			// Set big icon
	SetIcon(m_hIcon, FALSE);		// Set small icon
	
	// TODO: Add extra initialization here
	
	return TRUE;  // return TRUE  unless you set the focus to a control
}




void CMyViewerDlg::OnNew() 
{
	if(m_ifcg)
	{
		switch(MessageBox("文件内容发生改变,是否保存?","MyViewer",MB_YESNOCANCEL))
		{
		case IDYES:		
			if(OnSave()) m_ifcg = 0 ;
			break ;
		case IDCANCEL:
			return ;
			break ;
		default:
			break ;
		}
	}
	m_ifcode = 0 ;
	m_ifnew = 1 ;
	m_ifcg = 0 ;
	m_name = "" ;
	m_show.SetSel(0,-1) ;
	m_show.ReplaceSel("") ;
	m_ifnew = 0 ;
	m_title = "MyViewer-未命名" ;
	AfxGetApp()->GetMainWnd()->SetWindowText(m_title);
}

bool CMyViewerDlg::OnSave() 
{
	if(m_name == "")
	{
		CFileDialog m_fo(false,0,0,OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,"所有文件(*.*)|*.*||");
		if(m_fo.DoModal()!=IDOK)
			return 0;
		m_name = m_fo.GetPathName() ;
	}
	int		len = m_show.GetWindowTextLength() ;
	char * m_str = new char[len+10] ;
	m_file.Open(m_name,CFile::modeReadWrite|CFile::modeCreate);	
	m_show.GetWindowText(m_str,len+1) ;	
	m_str[len+1] = 0 ; 
	if(m_ifcode)
	{
		EnCode(m_str) ;
	}
	m_file.Write(m_str,strlen(m_str)) ;
	m_file.Close() ;
	m_title.Format("MyViewer-%s",m_name) ;
	AfxGetApp()->GetMainWnd()->SetWindowText(m_title);
	m_ifcg = 0 ;
	free(m_str);
	return 1 ;	
}
void CMyViewerDlg::OnSaveas() 
{
	m_name = ""  ;
	OnSave() ;
}

void CMyViewerDlg::OnFont() 
{	
	if(m_first)
	{
		lf.lfHeight = 20 ;
		lf.lfWidth  = 10 ;
		m_first = 0 ;
	}
	CFontDialog m_fdlg(&lf) ;
	if(m_fdlg.DoModal()==IDOK)
	{
		m_font.Detach();
		m_color = m_fdlg.GetColor();
		m_facename =m_fdlg.GetFaceName() ;
		m_weight =m_fdlg.GetWeight() ;
		m_ita = lf.lfItalic ;
		m_under = lf.lfUnderline ;
		m_height = lf.lfHeight ;
		m_width = lf.lfWidth ;	
		m_font.CreateFont( m_height,m_width,0,0,m_weight,m_ita,m_under,0,0,0,0,0,0,m_facename) ;
		m_show.SetFont(&m_font);
	}
}



void CMyViewerDlg::OnOpen() 
{
	if(m_ifcg)
	{
		switch(MessageBox("文件内容发生改变,是否保存?","MyViewer",MB_YESNOCANCEL))
		{
		case IDYES:		
			if(OnSave()) m_ifcg = 0 ;
			break ;
		case IDCANCEL:
			return ;
			break ;
		default:
			break ;
		}
	}
	m_ifcg = 0 ;
	CString ext ;
	if(!m_dropfile)
	{
		CFileDialog m_fo(true,0,0,OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,"文本文件(*.txt)|*.txt|所有文件(*.*)|*.*||");
		if(m_fo.DoModal()!=IDOK)
			return ;
		m_name = m_fo.GetPathName() ;
		ext =m_fo.GetFileExt() ;
	}
	m_dropfile = 0 ;
	m_file.Open(m_name,CFile::modeRead) ;
	m_flen = m_file.GetLength() ;
	DWORD bs = 0 , rs = 0 ,count = 0 ,c=0;
	char *cont = new char[m_flen+1] ;
	CArchive ar(&m_file,CArchive::load) ;
	m_show.SetSel(0,-1);
	ar.Read(cont,m_flen) ;
	cont[m_flen] = 0 ;
	if(ext == "heq" || ext == "Heq"||m_name.Right(3)=="heq"||m_name.Right(3)=="Heq"||m_ifdecode)
		DeCode(cont) ;
	
	m_show.ReplaceSel(cont) ;
	DWORD tplen =m_show.GetWindowTextLength() ;
	m_ifdecode = 0 ;
	m_ifcg = 0 ;
	delete []cont ;
	ar.Close() ;
	m_title.Format("MyViewer-%s",m_file.GetFilePath()) ;
	AfxGetApp()->GetMainWnd()->SetWindowText(m_title);
	m_ifcg = 0 ;
	m_file.Close() ;
}


void CMyViewerDlg::OnChangeRichedit1() 
{
	if(m_ifcg) return ;
	if(m_ifnew) return ;
	m_ifcg = 1 ;
	cmenu.EnableMenuItem(IDM_SAVE,0) ;
	cmenu.EnableMenuItem(IDM_SAVEAS,0);	
	m_title += "*" ;
	AfxGetApp()->GetMainWnd()->SetWindowText(m_title);
	
}



void CMyViewerDlg::OnAbout() 
{
	CAboutDlg m_about ;
	m_about.DoModal() ;	
}

void CMyViewerDlg::OnDropfilesRichedit1(NMHDR* pNMHDR, LRESULT* pResult) 
{
	ENDROPFILES *pEnDropFiles = reinterpret_cast<ENDROPFILES *>(pNMHDR);
	char tmp[255] ;
	m_dropfile = 1 ;
	::DragQueryFile((HDROP)pEnDropFiles->hDrop,0,tmp,255) ;
	m_name.Format("%s",tmp) ;
	OnOpen() ;
	// TODO: Add your control notification handler code here
	*pResult = 0;
}

void CMyViewerDlg::OnSelchangeRichedit1(NMHDR* pNMHDR, LRESULT* pResult) 
{
	SELCHANGE *pSelChange = reinterpret_cast<SELCHANGE *>(pNMHDR);
	if(pSelChange->chrg.cpMax != pSelChange->chrg.cpMin)
	{
		cmenu.EnableMenuItem(IDM_CUT,0) ;
		cmenu.EnableMenuItem(IDM_COPY,0) ;

	}
	else
	{
		cmenu.EnableMenuItem(IDM_CUT,1) ;
		cmenu.EnableMenuItem(IDM_COPY,1) ;
	}
	*pResult = 0;
}

void CMyViewerDlg::OnCut() 
{
	m_show.Cut() ;
	m_ifcut = 1 ;
	cmenu.EnableMenuItem(IDM_PASTE,0) ;
	
}

void CMyViewerDlg::OnCopy() 
{
	m_show.Copy() ;
	m_ifcut = 0 ;
	cmenu.EnableMenuItem(IDM_PASTE,0) ;
}

void CMyViewerDlg::OnPaste() 
{
	m_show.Paste() ;
	if(m_ifcut)
	{
		cmenu.EnableMenuItem(IDM_PASTE,1) ;
	}
	cmenu.EnableMenuItem(IDM_CUT,1) ;
	cmenu.EnableMenuItem(IDM_COPY,1) ;
}



void CMyViewerDlg::OnClose() 
{
	if(m_ifcg)
	{
		switch(MessageBox("文件内容发生改变,是否保存?","MyViewer",MB_YESNOCANCEL))
		{
		case IDYES:		
			if(OnSave()) m_ifcg = 0 ;
			break ;
		case IDCANCEL:
			return ;
			break ;
		default:
			break ;
		}
	}
	CDialog::OnClose();
}

void CMyViewerDlg::OnExit() 
{
	if(m_ifcg)
	{
		switch(MessageBox("文件内容发生改变,是否保存?","MyViewer",MB_YESNOCANCEL))
		{
		case IDYES:		
			if(OnSave()) m_ifcg = 0 ;
			break ;
		case IDCANCEL:
			return ;
			break ;
		default:
			break ;
		}
	}
	exit(0) ;
}

void CMyViewerDlg::EnCode(char a[])
{
	DWORD	i , k = 0 ;
	char	zcode[7] = {'H','e','Q','i','a','n','g'} ;
	char	special = zcode[0] ;
	for(i = 1 ; i < 7 ; i++) special ^=zcode[i] ;
	char append[8] ;
	SYSTEMTIME syt ;
	::GetLocalTime(&syt) ;	
	char x[8] ;
	for(int v= 0 ; v < 8 ; v++)
	{
		i=syt.wHour*3600+syt.wMinute*60+syt.wSecond ;
		srand(i*v+2) ;
		x[v] = (rand()*250)%12+3 ;
	}
	i = x[0] + 16 * x[1] + 256*x[2] + 4096*x[3] +65526*x[4] +0x100000*x[5]+0x1000000*x[6]+0x10000000*x[7] ;
	for(int j = 0 ; j<8 ; j++)
	{
		append[j] = (BYTE)(i>>(4*j)) ;
	}
	while(a[k])
	{
		char sp = special^(char)(k%256)^append[1] ;
		if(a[k] == sp)
		{
			k++ ;
		}
		else
		{
			a[k] ^=special ;
			a[k] ^=(k%256) ;
			a[k] ^= append[1] ;
			k++ ;
		}
	}
	for(j = 0 ; j < 8 ; j++)
		a[k+j] = append[j] ;
	a[k+j] = 0 ;
}
void CMyViewerDlg::DeCode(char a[])
{
	DWORD i  , k = 0 ;
	
	char	append[8] ;
	char	zcode[7] = {'H','e','Q','i','a','n','g'} ;
	char	special = zcode[0] ;
	for(i = 1 ; i < 7 ; i++) special ^=zcode[i] ;

	while(a[k])
		k++ ;
	for(i = 0 ; i< 8 ; i++)
		append[i] = a[k-8+i] ;

	if(!IsHeq(append))		//如果不是加密文件
		return ;			//则不解密 ,直接返回
	m_ifcode = 1 ;
	a[k-8] = 0 ; k = 0 ;
	while(a[k])
	{
		char sp = special^(char)(k%256)^append[1] ;
		if(a[k] == sp)
		{
			k++ ;
		}
		else
		{
			
			a[k] ^=special ;
			a[k] ^= (k%256) ;
			a[k] ^= append[1] ;
			k++ ;
		}
	}
}

bool CMyViewerDlg::IsHeq(char a[])
{
	int ptl1,ptl2 ;
	for(int i = 1 ; i < 7 ; i++)
	{
		ptl1 = (a[i-1]>>4)&0x0f ;
		ptl2 = a[i]&0x0f ;
		if(ptl1 != ptl2) return false ;
	}
	return true ;
}

void CMyViewerDlg::OnHide() 
{
	m_ifcode = 1 ;
	OnSaveas() ;
	
}

void CMyViewerDlg::OnDecode() 
{	
	m_ifdecode = 1 ;
	OnOpen() ;
}

LRESULT CMyViewerDlg::DefWindowProc(UINT message, WPARAM wParam, LPARAM lParam) 
{
	char a[2] ={9,0};
	/*
	char b[50];
	char c[2] = {13,10} ;
	ltoa(message,b,10) ;
	int a = strlen(b);
	b[a] = '-' ; b[a+1] = '\0';
	ltoa(wParam,b+strlen(b),10)  ;
	 a = strlen(b);
	b[a] = '-' ; b[a+1] = '\0';
	ltoa(lParam,b+strlen(b),10)  ;
	m_tmp.Write(b,strlen(b)) ;
	m_tmp.Write(c,2);
	*/
	if(message==40)
	{
		m_show.ReplaceSel(a);
		return 1;
	}
	return CDialog::DefWindowProc(message, wParam, lParam);
}

void CMyViewerDlg::OnLineau() 
{
	/*
	if(m_ifAutoLine ==0)
	{
		m_ifAutoLine =1 ;
		//实现自动换行
		HDC hdc = ::GetDC(m_main.m_hWnd);
		m_main.SendMessage(EM_SETTARGETDEVICE,(WPARAM)hdc,0);
		::ReleaseDC(m_main.m_hWnd, hdc);
	}
	else
	{
		m_ifAutoLine =0 ;
		m_main.SendMessage(EM_SETTARGETDEVICE,0,1);			//取消自动换行
	}
	*/
}

⌨️ 快捷键说明

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