5

Chcę utworzyć dodatek dla vs2008, aby pokazać przezroczysty formularz/okno na edytorze vs2008.Jak uzyskać pozycję topLeft w oknie edytora Visual Studio 2008?

w poniższym kodzie "aw.Left" i "aw.Top" jest wartością względną, zarówno to 1.

PYTANIE:

  1. wiesz jak uzyskać pozycja lewego/górnego ekranu części edytora?

  2. lub mogę przenieść karetkę do górnej/lewej pozycji char, ale czy wiesz, jak uzyskać pozycję ekranu z karetką?

Wielkie dzięki.

public void Exec(string commandName, vsCommandExecOption executeOption, ref object varIn, ref object varOut, ref bool handled) 
    { 
     handled = false; 
     if(executeOption == vsCommandExecOption.vsCommandExecOptionDoDefault) 
     { 
      if(commandName == "MyAddin1.Connect.MyAddin1") 
      { 
       Window aw = _app.ActiveWindow; 
       int left = aw.Left; 
       int top = aw.Top; 

editor part

+0

['LinkedWindowFrame'] (http://msdn.microsoft.com/en-us/library/vstudio/envdte.window.linkedwindowframe.aspx) rzekomo dostaje rodzica, więc możesz po prostu podnosić się i wznosić, aż masz absolutną pozycję. Możesz też uczynić swoją nakładkę dzieckiem okna i unikać pozycji absolutnej. –

+0

Może to zrobić za pomocą makr – Kuzgun

Odpowiedz

0

Można użyć funkcji Win32 ClientToScreen.

stwierdzenie następujące funkcje zewnętrzne:

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)] 
public struct POINT 
{ 
    public int x; 
    public int y; 
}; 

[DllImport("user32.dll")] 
[return: MarshalAs(UnmanagedType.Bool)] 
public static extern bool ClientToScreen(IntPtr hwndClient, ref POINT lpPoint); 

Można nazwać to następująco

POINT pt = new POINT(); 
pt.x = left; 
pt.y = top; 
ClientToScreen(myForm.Handle, ref pt); 

po tym, pt powinno zawierać bezwzględne współrzędne pt. Użyj odwrotnej operacji, aby uzyskać ScreenToClient. Za pomocą tych dwóch można również uzyskać położenie jednego punktu względem innego okna (przy założeniu, że znasz uchwyt okna obu okien).