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

📄 edithex.cpp

📁 一些加密算法的介绍,可对文件或字符串加密
💻 CPP
字号:

// EditHex.cpp : implementation file
//

#include "stdafx.h"
#include "FileCrypt.h"
#include "EditHex.h"

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

/////////////////////////////////////////////////////////////////////////////
// CEditHex

CEditHex::CEditHex(COLORREF const& rclrText, COLORREF const& rclrBkgnd) : m_clrText(rclrText),
	m_clrBkgnd(rclrBkgnd), m_bFocus(FALSE)
{
	m_brBkgnd.CreateSolidBrush(m_clrBkgnd);
}

//Setting the Background Color
void CEditHex::SetBkColor(COLORREF const& roBkColor)
{
	m_clrBkgnd = roBkColor;
	m_brBkgnd.DeleteObject();
	m_brBkgnd.CreateSolidBrush(m_clrBkgnd);
}

CEditHex::~CEditHex()
{
}

BEGIN_MESSAGE_MAP(CEditHex, CEdit)
	//{{AFX_MSG_MAP(CEditHex)
	ON_WM_SETFOCUS()
	ON_WM_LBUTTONDOWN()
	ON_WM_CHAR()
	ON_WM_KILLFOCUS()
	ON_WM_CTLCOLOR_REFLECT()
	//}}AFX_MSG_MAP
	ON_MESSAGE_VOID(WM_PASTE, OnPaste)
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CEditHex message handlers

void CEditHex::OnSetFocus(CWnd* pOldWnd) 
{
	CEdit::OnSetFocus(pOldWnd);
	m_bFocus = TRUE;
	//Force another WM_LBUTTONDOWN
	PostMessage(WM_LBUTTONDOWN, 0 ,0);	
}

void CEditHex::OnLButtonDown(UINT nFlags, CPoint point) 
{
	if(TRUE == m_bFocus)
	{
		SetSel(0, -1);
		m_bFocus = FALSE;
	}
	else
		CEdit::OnLButtonDown(nFlags, point);
}

void CEditHex::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags) 
{
	//Backspace, ^C, ^V, ^X, ^Z
	if(8==nChar || 22==nChar || 3==nChar || 24==nChar || 26==nChar)
	{
		//Backspace
		if(8==nChar)
		{
			CString oStr;
			GetWindowText(oStr);
			int iLength = oStr.GetLength();
			if((iLength>0) && (0 == iLength%2))
				//For deleting groups of 2 Hexa Chars
				CEdit::OnChar(nChar, nRepCnt, nFlags);
		}
		CEdit::OnChar(nChar, nRepCnt, nFlags);
	}
	else
	{
		nChar = toupper(nChar);
		if(nChar>='0' && nChar<='9' || nChar>='A' && nChar<='F')
			CEdit::OnChar(nChar, nRepCnt, nFlags);
		else
			MessageBeep(0xFFFFFFFF);
	}
}

void CEditHex::OnKillFocus(CWnd* pNewWnd) 
{
	CString oStr;
	GetWindowText(oStr);
	//Should be an even number of chars
	if(oStr.GetLength()%2 != 0)
	{
		MessageBeep(0xFFFFFFFF);
		SetFocus();
	}
	else
		CEdit::OnKillFocus(pNewWnd);	
}

HBRUSH CEditHex::CtlColor(CDC* pDC, UINT nCtlColor) 
{
	pDC->SetTextColor(m_clrText);
    pDC->SetBkColor(m_clrBkgnd);
	return m_brBkgnd;
}

BOOL IsHex(CString const& roStr)
{
	int iLen = roStr.GetLength();
	if(iLen%2 != 0)
		//Should be an even number
		return FALSE;
	TCHAR ch;
	for(int i=0; i<iLen; i++)
	{
		ch = roStr.GetAt(i);
		if(ch<'0' || ch>'F')
			return FALSE;
	}
	return TRUE;
}

void CEditHex::OnPaste()
{
	//Reading from the clipboard
	OpenClipboard();
	HGLOBAL hMemHandle = ::GetClipboardData(CF_TEXT);
	if(hMemHandle != NULL)
	{
		//Is in the right format
		char* pMem = (char*)::GlobalLock(hMemHandle);
		CString oStr(pMem);
		//Check if is a hex string
		oStr.MakeUpper();
		if(TRUE == IsHex(oStr))
		{
			SetWindowText(oStr);
			int iSel = oStr.GetLength();
			SetSel(iSel, iSel);
		}
		else
			MessageBeep(0xFFFFFFFF);
		::GlobalUnlock(hMemHandle);
	}
	CloseClipboard();
}

⌨️ 快捷键说明

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