📄 myviewerdlg.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 + -