5

Ich möchte ein Add-in für vs2008 erstellen, um ein transparentes Formular/Fenster auf dem Editor von vs2008 anzuzeigen.Wie erhalte ich die obere linke Bildschirmposition des Editor-Fensters von Visual Studio 2008?

in folgenden Code, die "aw.Left" und "aw.Top" ist relativer Wert, die beide ist 1.

FRAGE:

  1. Sie wissen, wie das bekommen linke/obere Bildschirmposition des Editorteils?

  2. oder ich kann das Caret nach oben/links char Position verschieben, aber wissen Sie, wie Sie die Bildschirmposition von Caret bekommen?

Vielen Dank.

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) soll angeblich die Eltern, so dass Sie nur nach oben und nach oben und bis gehen können Du hast die absolute Position. Oder Sie könnten Ihr Overlay zu einem Kind des Fensters machen und vermeiden, die absolute Position zu benötigen. –

+0

Vielleicht können Sie es mit Makros tun – Kuzgun

Antwort

0

können Sie die ClientToScreen Funktion Win32 verwenden.

Deklarieren Sie die folgenden externen Funktion:

[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); 

Sie können dies nennen als

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

Danach folgt, sollte pt die absoluten Koordinaten pt enthalten. Verwenden Sie ScreenToClient für die umgekehrte Operation. Mit den beiden können Sie auch die Position eines Punktes relativ zu einem anderen Fenster ermitteln (vorausgesetzt, Sie kennen den Fenstergriff beider Fenster).