RECT TextViewMetrics::ClientToText( RECT rect ) const { POINT topLeft = { rect.left, rect.top }; POINT bottomRight = { rect.right, rect.bottom }; topLeft = ClientToText( topLeft ); bottomRight = ClientToText( bottomRight ); RECT result = { topLeft.x, topLeft.y, bottomRight.x, bottomRight.y }; return result; }
BOOL CCrystalEditView::DoDropText(COleDataObject *pDataObject, const CPoint &ptClient) { HGLOBAL hData = pDataObject->GetGlobalData(CF_TEXT); if (hData == NULL) return FALSE; CPoint ptDropPos = ClientToText(ptClient); if (IsDraggingText() && IsInsideSelection(ptDropPos)) { SetAnchor(ptDropPos); SetSelection(ptDropPos, ptDropPos); SetCursorPos(ptDropPos); EnsureVisible(ptDropPos); return FALSE; } LPSTR pszText = (LPSTR) ::GlobalLock(hData); if (pszText == NULL) return FALSE; int x, y; USES_CONVERSION; m_pTextBuffer->InsertText(this, ptDropPos.y, ptDropPos.x, A2T(pszText), y, x, CE_ACTION_DRAGDROP); // [JRT] CPoint ptCurPos(x, y); ASSERT_VALIDTEXTPOS(ptCurPos); SetAnchor(ptDropPos); SetSelection(ptDropPos, ptCurPos); SetCursorPos(ptCurPos); EnsureVisible(ptCurPos); ::GlobalUnlock(hData); return TRUE; }
HDC TextViewMetrics::ClientToText( HDC hdc, POINT* oldOrigin ) const { POINT clientOrigin = { 0, 0 }; clientOrigin = ClientToText( clientOrigin ); GetWindowOrgEx( hdc, oldOrigin ); SetWindowOrgEx( hdc, oldOrigin->x + clientOrigin.x, oldOrigin->y + clientOrigin.y, oldOrigin ); return hdc; }
void CCrystalEditView::ShowDropIndicator(const CPoint &point) { if (! m_bDropPosVisible) { HideCursor(); m_ptSavedCaretPos = GetCursorPos(); m_bDropPosVisible = TRUE; ::CreateCaret(m_hWnd, (HBITMAP) 1, 2, GetLineHeight()); } m_ptDropPos = ClientToText(point); if (m_ptDropPos.x >= m_nOffsetChar) { SetCaretPos(TextToClient(m_ptDropPos)); ShowCaret(); } else { HideCaret(); } }