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