【问题标题】:Add a tool button dynamically with Visual Studio extensions使用 Visual Studio 扩展动态添加工具按钮
【发布时间】:2022-01-10 11:18:09
【问题描述】:

我正在构建一个 Visual Studio 扩展,它应该在 ToolBar 或 ToolStrip 上添加我的工具按钮。

有两种情况:

  • 第一种情况,将我的红色按钮添加到由另一个扩展(Visual Micro)添加的工具栏/工具条中,见图 1。

  • 第二种情况,将我的红色按钮添加到 Visual Studio UI 的属性工具栏/工具条中,见图 2。

图片1:

图 2:

我尝试实施第二种情况,但没有任何积极的结果。

代码如下:

EventHandler btnClick = new EventHandler(delegate (Object o, EventArgs a)
            {
                //snip
            });
System.Drawing.Image img = System.Drawing.Image.FromFile("W:\\...\\red_btn.png");

ToolStripButton btn = new ToolStripButton("My Button", img, btnClick, "RedButton");
            btn.Width = 32;
            btn.Height = 32;
            btn.Visible = true;
IntPtr hProperties = FindWindowEx(IntPtr.Zero, IntPtr.Zero, "WindowsForms10.Window.8.app.0.c940ee_r43_ad1", null) ;
ToolStrip toolStrip = (ToolStrip)ToolStrip.FromHandle(hProperties);

if (toolStrip != null)
{
  toolStrip.Items.Add(btn);
  toolStrip.Refresh();
  toolStrip.Visible = true;
}

当我从 ToolWindow1Control init() 方法执行上述代码时,没有任何反应。我尝试的是从“属性”窗口中找到工具栏的句柄并将我的按钮添加到其中。但这不起作用。

我希望将红色按钮添加到“属性”窗口的工具栏中。这个按钮应该执行一些与当前查看的源文件相关的代码。这是第二种情况。

对于第一种情况,我不知道如何找到该工具栏的句柄来添加我的按钮。

请帮忙。

【问题讨论】:

  • 要扩展 Visual Studio,您不应该破解它,而是使用 Visual Studio API:docs.microsoft.com/en-us/visualstudio/extensibility/…
  • @SimonMourier 感谢您的评论,但有时为了用户界面的简单性或直观性或有其他一些强有力的原因,最好按照我需要的方式扩展它。当然,遵循与此相关的可用文档是一个好习惯,但我想做的不是不允许做的事情,我使用 WinAPI 甚至从扩展内部运行,也许是为了扩展其他扩展功能,等等……
  • Visual Studio 将 WPF 用于其 UI。因此,您无法检索到任何HWNDs。整个应用程序呈现在一个窗口上。你试图做的事情是不可能的。如果需要向 Visual Studio 的 GUI 添加任何视觉效果,请使用公共 API。这不仅更好,而且是唯一的方法。

标签: c# wpf winapi visual-studio-extensions


【解决方案1】:

WPF 窗口中没有任何工具栏或工具条 HWND。你试图做的事情是不可能的。如果需要向 Visual Studio 的 GUI 添加任何视觉效果,请使用公共 API。这不仅更好,而且是唯一的方法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多