2011-12-23 12 views
6

में टेक्स्ट कर्सर की पूर्ण स्थिति कैसे प्राप्त करें मैंने एक इंटेलिसेन्स-जैसे डायलॉग विकसित किया है, जो एक विशिष्ट कुंजी-स्ट्रोक पर दिखाई देना चाहिए। (मेरा प्रोजेक्ट एक वीएस-पैकेज है, मेरा संवाद कमांड के रूप में खोला जाएगा) समस्या यह है कि, मुझे नहीं पता कि वर्तमान कर्सर-स्थिति पर मेरा संवाद कैसे प्रदर्शित करें। वर्तमान में चयनित पाठ से निपटने के आसान तरीके हैं, उदा।विजुअल स्टूडियो 2010 एक्सटेंशन

TextSelection objSel = (EnvDTE.TextSelection)(dte.ActiveDocument.Selection); 

लेकिन मुझे यहां कोई पूर्ण स्थिति प्राप्त नहीं हो सकती है।

मैंने बहुत कुछ खोजा है, लेकिन मुझे कुछ भी नहीं मिला, जो मेरी मदद कर सकता है। शायद कोई मेरी समस्या को हल करने के लिए मुझे एक संकेत या - बेहतर - कोड उदाहरण दे सकता है। मैं वास्तव में आपकी मदद की सराहना करता हूं!

उत्तर

6

मैं वर्तमान परियोजना में बिल्कुल वही कर रहा हूं, इसलिए यहां प्रासंगिक कोड कॉपी और पेस्ट किया गया है। मैं निम्नलिखित उत्तर का उपयोग कर activeWpfTextView ऑब्जेक्ट कहीं और उत्पन्न करता हूं: Find an IVsTextView or IWpfTextView for a given ProjectItem, in VS 2010 RC extension

private IVsWindowFrame GetWindow() 
    { 
     // parent is the Microsoft.VisualStudio.Shell.ToolWindowPane 
     // containing this UserControl given in the constructor. 
     var window = (ToolWindowPane)parent.GetIVsWindowPane(); 
     return (IVsWindowFrame)window.Frame; 
    } 

    private void DoShow() 
    { 
     var window = GetWindow(); 

     var textViewOrigin = (activeWpfTextView as UIElement).PointToScreen(new Point(0, 0)); 

     var caretPos = activeWpfTextView.Caret.Position.BufferPosition; 
     var charBounds = activeWpfTextView 
      .GetTextViewLineContainingBufferPosition(caretPos) 
      .GetCharacterBounds(caretPos); 
     double textBottom = charBounds.Bottom; 
     double textX = charBounds.Right; 

     Guid guid = default(Guid); 
     double newLeft = textViewOrigin.X + textX - activeWpfTextView.ViewportLeft; 
     double newTop = textViewOrigin.Y + textBottom - activeWpfTextView.ViewportTop; 
     window.SetFramePos(VSSETFRAMEPOS.SFP_fMove, ref guid, 
      (int)newLeft, (int)newTop, 
      0, 0); 

     window.Show(); 
     resultsList.Focus(); 
    } 
+0

इस कोड में 'मूल' क्या है? –

+1

कोड में एक टिप्पणी जोड़ा गया है जहां स्पष्ट किया गया है कि 'parent' से आया था। – perelman

संबंधित मुद्दे