我想为vs2008创建一个插件,在vs2008的编辑器上显示一个透明的表单/窗口。
在下面的代码中,“aw.Left”和“aw.Top”是相对值,两者都是1.
问题:
您知道如何获得编辑器部分的左/上屏幕位置吗?
或者我可以将插入符号移动到顶部/左侧字符位置,但是您知道如何获得插入符号的屏幕位置吗?
非常感谢。
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;
答案 0 :(得分:0)
您可以使用Win32 ClientToScreen
功能。
声明以下外部函数:
[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);
您可以按如下方式调用
POINT pt = new POINT();
pt.x = left;
pt.y = top;
ClientToScreen(myForm.Handle, ref pt);
在此之后,pt应该包含pt的绝对坐标。使用ScreenToClient
进行相反的操作。使用这两个,您还可以获得一个点相对于另一个窗口的位置(假设您知道两个窗口的窗口句柄)。