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

📄 hexeditview.cpp

📁 游戏修改器 大家可以看看呵呵 老牌子的 但是可能别人已经发过了
💻 CPP
📖 第 1 页 / 共 2 页
字号:
void CHexEditView::OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
{
	// TODO: 在此添加消息处理程序代码和/或调用默认值

	CView::OnVScroll(nSBCode, nPos, pScrollBar);

//	VERIFY(GetScrollInfo(SB_VERT, &sy));
	SCROLLINFO si;
	si.cbSize = sizeof(si);
	si.fMask = SIF_ALL;
	VERIFY(GetScrollInfo(SB_VERT, &si));

	switch (nSBCode)
	{
	case SB_TOP:
		m_nTopLine = 0;
		break;
	case SB_BOTTOM:
		m_nTopLine = m_nRows  - m_nPageRows + 1;
		break;
	case SB_LINEUP:
		m_nTopLine = m_nTopLine - 1;
		break;
	case SB_LINEDOWN:
		m_nTopLine = m_nTopLine + 1;
		break;
	case SB_PAGEUP:
		m_nTopLine = m_nTopLine - si.nPage + 1;
		break;
	case SB_PAGEDOWN:
		m_nTopLine = m_nTopLine + si.nPage - 1;
		break;
	case SB_THUMBPOSITION:
	case SB_THUMBTRACK:
		m_nTopLine = si.nTrackPos+1;
		break;
	default:
		return;
	}

	if((m_nTopLine + m_nPageRows -2) > m_nRows) 
		m_nTopLine = m_nRows - m_nPageRows + 2;
	if(m_nTopLine < 0)
		m_nTopLine = 0;
//	sy.nPos = m_nTopLine;

	SetVertScrollBar();
	//Invalidate(FALSE);
}

void CHexEditView::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
{
	// TODO: 在此添加消息处理程序代码和/或调用默认值

	CView::OnHScroll(nSBCode, nPos, pScrollBar);

	SCROLLINFO si;
	si.cbSize = sizeof(si);
	si.fMask = SIF_ALL;
	VERIFY(GetScrollInfo(SB_HORZ, &si));

	switch (nSBCode)
	{
	case SB_LEFT:
		m_nLeftChar = 0;
		break;
	case SB_BOTTOM:
		m_nLeftChar = 80 - m_nPageCols + 1;
		break;
	case SB_LINEUP:
		m_nLeftChar = m_nLeftChar - 1;
		break;
	case SB_LINEDOWN:
		m_nLeftChar = m_nLeftChar + 1;
		break;
	case SB_PAGEUP:
		m_nLeftChar = m_nLeftChar - si.nPage + 1;
		break;
	case SB_PAGEDOWN:
		m_nLeftChar = m_nLeftChar + si.nPage - 1;
		break;
	case SB_THUMBPOSITION:
	case SB_THUMBTRACK:
		m_nLeftChar = si.nTrackPos;
		break;
	default:
		return;
	}

	if((m_nLeftChar + m_nPageCols - 2) > 80) 
		m_nLeftChar = 80 - m_nPageCols +2;
	if(m_nLeftChar < 0) 
		m_nLeftChar = 0;
//	sx.nPos = m_nLeftChar;
	SetHorzScrollBar();
}

BOOL CHexEditView::OnMouseWheel(UINT nFlags, short zDelta, CPoint pt)
{
	// TODO: 在此添加消息处理程序代码和/或调用默认值
	if(zDelta > 0)
	{
		m_nTopLine = --m_nTopLine < 0 ? 0 : m_nTopLine;
	}
	else
	{
		if((m_nTopLine + m_nPageRows -2) < m_nRows)
			m_nTopLine+=1;
	}
//	sy.nPos = m_nTopLine;
	SetVertScrollBar();
	SetHorzScrollBar();

	return CView::OnMouseWheel(nFlags, zDelta, pt);
}
//16进制编辑有关函数

void CHexEditView::OnSetFocus(CWnd* pOldWnd)
{
	CView::OnSetFocus(pOldWnd);

	// TODO: 在此处添加消息处理程序代码
	m_bFocused = TRUE;
}

void CHexEditView::OnKillFocus(CWnd* pNewWnd)
{
	CView::OnKillFocus(pNewWnd);

	// TODO: 在此处添加消息处理程序代码
	m_bFocused = FALSE;
}

void CHexEditView::OnLButtonDown(UINT nFlags, CPoint point)
{
	// TODO: 在此添加消息处理程序代码和/或调用默认值

	CView::OnLButtonDown(nFlags, point);

	m_bStartDrag = TRUE;
//	m_bFirst = FALSE;
	m_bFirst = TRUE;

	m_noriStart = m_nSelStart = m_nSelEnd = PointPos(point);
	//comSelStart = comSelEnd = comSel;
	//SelectPointStart[0] = SelectPointEnd[0] = SelectPoint[0];
	//SelectPointStart[1] = SelectPointEnd[1] = SelectPoint[1];
	Invalidate(FALSE);
}

void CHexEditView::OnLButtonUp(UINT nFlags, CPoint point)
{
	// TODO: 在此添加消息处理程序代码和/或调用默认值

	CView::OnLButtonUp(nFlags, point);

/*	if(m_bStartDrag)
	{
		//SelectPoint = CPoint(-1,-1);
		Invalidate(FALSE);
		m_bStartDrag = FALSE;
		m_bFirst = FALSE;
	}
*/
	if(m_bStartDrag)
	{
		m_nSelEnd = PointPos(point);
		if(m_nSelEnd < m_noriStart)
		{
			m_nSelStart = m_nSelEnd;
			m_nSelEnd = m_noriStart;
		}
		else
		{
			m_nSelStart = m_noriStart;
		}
		Invalidate(FALSE);
		m_bStartDrag = FALSE;
	}
}

void CHexEditView::OnMouseMove(UINT nFlags, CPoint point)
{
	// TODO: 在此添加消息处理程序代码和/或调用默认值

	CView::OnMouseMove(nFlags, point);

	if(m_bStartDrag)
	{
		m_nSelEnd = PointPos(point);
		//comSelEnd = comSel;
		//SelectPointEnd[0] = SelectPoint[0];
		//SelectPointEnd[1] = SelectPoint[1];
		if(m_nSelEnd < m_noriStart)	//反向选择
		{
			m_nSelStart = m_nSelEnd;
			m_nSelEnd = m_noriStart;
		}
		else
		{
			m_nSelStart = m_noriStart;
		}
		Invalidate(FALSE);
	}
}

void CHexEditView::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags)
{
	// TODO: 在此添加消息处理程序代码和/或调用默认值

	CView::OnChar(nChar, nRepCnt, nFlags);

	UINT input;
	UCHAR cHex = strText[m_nSelEnd];
	
	if(nChar > 47 && nChar < 58)
	{
		input = nChar - 48;
	}
	else if (nChar > 64 && nChar < 71)
	{
		input = nChar - 64 + 9;
	}
	else if (nChar > 96 && nChar < 103)
	{
		input = nChar - 96 + 9;
	}
	else
	{
		return;
	}
	
	if(m_bFirst)
	{
		input = input << 4;
		cHex = cHex & 0x0f;
		cHex = cHex | input;
		m_bFirst = FALSE;
		strText[m_nSelEnd] = cHex;
	}
	else
	{
		cHex = cHex & 0xf0;
		cHex = cHex | input;
		m_bFirst = TRUE;
		strText[m_nSelEnd] = cHex;
		m_nSelEnd ++;
	}
	if(m_nSelEnd == m_nCharCount)
	{
		m_nCharCount = m_nSelEnd + 1;
		m_nRows = m_nCharCount/16;
	}
	//溢出处理
	if(block*block_num <= m_nCharCount)
	{
		block_num++;
		strText = (char *)realloc(strText,block*block_num);
	}

	m_nSelStart = m_nSelEnd;
	ChangeTop();
	ChangeLeft();
	Invalidate(FALSE);
}

//对键盘方向键处理


BOOL CHexEditView::PreTranslateMessage(MSG* pMsg)
{
	// TODO: 在此添加专用代码和/或调用基类
	if(pMsg->message == WM_KEYDOWN)
	{
		switch (LOWORD(pMsg->wParam))
		{
		case VK_LEFT:
			OnCharLeft();
			break;
		case VK_RIGHT:
			OnCharRight();
			break;
		case VK_UP:
			OnLineUp();
			break;
		case VK_DOWN:
			OnLineDown();
			break;
		default:
			break;
		}
	}

	return CView::PreTranslateMessage(pMsg);
}

void CHexEditView::OnCharLeft()
{
	if(m_bFirst && m_nSelEnd > 0)
	{
		m_nSelEnd--;
		m_bFirst = FALSE;
	}
	else
	{
		m_bFirst = TRUE;
	}
	ChangeTop();
	ChangeLeft();
	m_nSelStart = m_nSelEnd;
	Invalidate(FALSE);
}

void CHexEditView::OnCharRight()
{
	if(m_bFirst)
	{
		m_bFirst = FALSE;
	}
	else if( (int)m_nSelEnd < m_nCharCount-1)
	{
		m_bFirst = TRUE;
		m_nSelEnd++;
	}
	ChangeTop();
	ChangeLeft();
	m_nSelStart = m_nSelEnd;
	Invalidate(FALSE);
}

void CHexEditView::OnLineUp()
{
	if(m_nSelEnd > 15)
		m_nSelEnd = m_nSelEnd - 16;

	ChangeTop();
	ChangeLeft();
	m_nSelStart = m_nSelEnd;
	Invalidate(FALSE);
}

void CHexEditView::OnLineDown()
{
	if((int)m_nSelEnd + 16 < m_nCharCount)
		m_nSelEnd = m_nSelEnd + 16;
	else
		m_nSelEnd = m_nCharCount-1;
	ChangeTop();
	ChangeLeft();
	m_nSelStart = m_nSelEnd;
	Invalidate(FALSE);
}
BOOL CHexEditView::PreCreateWindow(CREATESTRUCT& cs)
{
	// TODO: 在此添加专用代码和/或调用基类
	CWnd *pParentWnd = CWnd::FromHandlePermanent(cs.hwndParent);
	if (pParentWnd == NULL || ! pParentWnd->IsKindOf(RUNTIME_CLASS(CSplitterWnd)))
	{
		//	View must always create its own scrollbars,
		//	if only it's not used within splitter
		cs.style |= (WS_HSCROLL | WS_VSCROLL);
	}
	cs.lpszClass = AfxRegisterWndClass(CS_DBLCLKS);

	return CView::PreCreateWindow(cs);
}

⌨️ 快捷键说明

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