5

vs2008의 편집기에서 투명한 양식/창을 표시하기 위해 vs2008에 대한 추가 기능을 만들고 싶습니다. 은 "aw.Left"와 "aw.Top을"코드는 다음의비주얼 스튜디오 2008의 에디터 윈도우의 상단 왼쪽 스크린 위치를 얻는 방법은 무엇입니까?

상대 값, 둘 다 1

질문 :

  1. 당신이 얻을하는 방법을 알고 편집기 부분의 왼쪽/위쪽 화면 위치?

  2. 또는 캐럿을 왼쪽/왼쪽 문자 위치로 이동할 수 있지만 캐럿의 화면 위치를 얻는 방법을 알고 있습니까?

대단히 감사합니다.

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)는 상위 항목을 가져 오므로 최대로 올라갈 때까지 너는 절대 위치에있어. 또는 오버레이를 창 자식으로 만들고 절대 위치가 필요하지 않도록 할 수 있습니다. –

+0

어쩌면 당신은 매크로로 할 수 있습니다. – Kuzgun

답변

0

당신은 Win32에서 ClientToScreen 기능을 사용할 수 있습니다.

다음 외부 함수 선언이 후

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

다음과 같이

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

본 부를 수를, PT는 PT의 절대 좌표를 포함한다. 반대 작업에는 ScreenToClient을 사용하십시오. 이 두 가지 방법을 사용하면 두 창에 대한 창 핸들을 알고 있으면 다른 창에 상대적인 한 점의 위치를 ​​얻을 수 있습니다.