示例#1
0
void CHexEdit::OnLButtonDown(UINT nFlags, CPoint point) 
{
	SetFocus();
	if(!m_pData)
		return;
	CPoint pt = CalcPos(point.x, point.y);
	if(pt.x > -1)//点合法
	{
		m_editPos = pt;
		pt.x *= m_nullWidth;
		pt.y *= m_lineHeight;
		
		if(pt.x == 0 && m_bShowAddress)
			CreateAddressCaret();
		else
			CreateEditCaret();
		
		
		if(nFlags & MK_SHIFT)//按下SHIFT
			m_selEnd = m_currentAddress;
		else
		{
			m_selStart= m_currentAddress;
			m_selEnd = m_selStart;
			//if(DragDetect(m_hWnd,point))//按下左键时拖动
            if(DragDetect(point))//按下左键时拖动
				SetCapture();
		}
		SetCaretPos(pt);
		ShowCaret();
		Invalidate(FALSE);
	}


}
void CHexEditor::OnLButtonDown(UINT nFlags, CPoint point) 
{
	SetFocus();
	if(!m_pData)
		return;

	if(nFlags & MK_SHIFT)
	{
		m_selStart = m_currentAddress;
	}
	CPoint pt = CalcPos(point.x, point.y);
	if(pt.x > -1)
	{
		m_editPos = pt;
		pt.x *= m_nullWidth;
		pt.y *= m_lineHeight;
		
		if(pt.x == 0 && m_bShowAddress)
			CreateAddressCaret();
		else
			CreateEditCaret();

		SetCaretPos(pt);
		if(nFlags & MK_SHIFT)
		{
			m_selEnd = m_currentAddress;
			if(m_currentMode == EDIT_HIGH || m_currentMode == EDIT_LOW)
				m_selEnd++;
			RedrawWindow();
		}
	}
	if(!(nFlags & MK_SHIFT))
	{
#ifdef _VS6_USED
		if(DragDetect(this->m_hWnd, point))
#else
		if(DragDetect(point))
#endif
		{
			m_selStart = m_currentAddress;
			m_selEnd   = m_selStart;
			SetCapture();
		}
		else
		{
			BOOL bsel = m_selStart != 0xffffffff;

			m_selStart = 0xffffffff;
			m_selEnd   = 0xffffffff;
			if(bsel)
				RedrawWindow();
		}
	}
	if(!IsSelected())
	{
		ShowCaret();
	}
}
示例#3
0
void CHexEdit::RepositionCaret(int	 p)
{
	int x, y;
	
	y =(p - m_topindex) / m_bpr;
	x = (p - m_topindex) % m_bpr;
	
	switch(m_currentMode)
	{
	case EDIT_NONE:
		CreateAddressCaret();
		x = 0;
		break;
	case EDIT_HIGH:
		CreateEditCaret();
		x *= m_nullWidth*3;
		x += m_offHex;
		break;
	case EDIT_LOW:
		CreateEditCaret();
		x *= m_nullWidth*3;
		x += m_nullWidth;
		x += m_offHex;
		break;
	case EDIT_ASCII:
		CreateEditCaret();
		x *= m_nullWidth;
		x += m_offAscii;
		break;
	}
	m_editPos.x = x;
	m_editPos.y = y*m_lineHeight;//m_lineHeight为每行的高
	CRect rc;
	GetClientRect(&rc);
	rc.top+=m_lineHeight;
	rc.bottom-=m_lineHeight;
	if(rc.PtInRect(m_editPos))
	{
		rc.bottom+=m_lineHeight;
		rc.top-=m_lineHeight;
		SetCaretPos(m_editPos);
		ShowCaret();
	}
}
示例#4
0
void CHexEdit::OnSetFocus(CWnd* pOldWnd) 
{
	if(m_pData && !IsSelected())
	{
		if(m_editPos.x == 0 && m_bShowAddress)
			CreateAddressCaret();
		else
			CreateEditCaret();
		SetCaretPos(m_editPos);
		ShowCaret();
	}
	CWnd::OnSetFocus(pOldWnd);
}
示例#5
0
void CHexEdit::SetSel(int s, int e)
{
	DestroyCaret();
	m_selStart = s;
	m_selEnd = e;
	RedrawWindow();
	if(m_editPos.x == 0 && m_bShowAddress)
		CreateAddressCaret();
	else
		CreateEditCaret();
	SetCaretPos(m_editPos);
	ShowCaret();
}
示例#6
0
void CPWL_EditCtrl::CreateChildWnd(const PWL_CREATEPARAM& cp) {
  if (!IsReadOnly())
    CreateEditCaret(cp);
}