5

vs2008 editörü üzerinde şeffaf bir form/pencere göstermek için vs2008 için bir eklenti oluşturmak istiyorum. "Aw.Left" ve "aw.Top" kod aşağıdakiVisual studio 2008'in editör penceresinin en üstteki ekran konumu nasıl alınır?

göreceli bir değerdir, hem 1.

SORU:

  1. sen nasıl anlarım Editör bölümünün sol/üst ekran konumu?

  2. veya kartuşu üst/sol char pozisyonuna taşıyabilirim, ancak ekran görüntüsünün nasıl elde edileceğini biliyor musunuz?

Çok teşekkürler.

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) iddiaya göre ebeveyn alır böylece sadece yukarı ve yukarı ve yukarı çıkabilirsiniz mutlak pozisyonunuz var. Ya da pencerenin bir çocuğunu bindirmeyi ve mutlak pozisyona geçmekten kaçınabilirsiniz. –

+0

Belki makrolarla yapabilirsin – Kuzgun

cevap

0

Sen Win32 ClientToScreen işlevini kullanabilirsiniz.

aşağıdaki harici işlevi bildirin: Bundan sonra

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

şöyle

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

Buna çağırabilir, nk nk mutlak koordinatlarını içermelidir. Ters işlem için ScreenToClient kullanın. İkisini kullanarak, bir noktanın konumunu başka bir pencereye göre de alabilirsiniz (her iki pencerenin pencere kolunu bildiğiniz sürece).