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(); } }
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(); } }
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); }
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(); }
void CPWL_EditCtrl::CreateChildWnd(const PWL_CREATEPARAM& cp) { if (!IsReadOnly()) CreateEditCaret(cp); }