5

我想为 vs2008 创建一个插件,在 vs2008 的编辑器上显示一个透明的表单/窗口。

在下面的代码中,“aw.Left”和“aw.Top”是相对值,都是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;

编辑部分

4

1 回答 1

0

您可以使用 Win32ClientToScreen功能。

声明以下外部函数:

[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相反的操作。使用这两者,您还可以获得一个点相对于另一个窗口的位置(假设您知道两个窗口的窗口句柄)。

于 2013-11-08T11:30:32.813 回答