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).

İlgili konular