使用 Visual Studio 扩展动态添加工具按钮
Posted
技术标签:
【中文标题】使用 Visual Studio 扩展动态添加工具按钮【英文标题】:Add a tool button dynamically with Visual Studio extensions 【发布时间】: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。因此,您无法检索到任何HWND
s。整个应用程序呈现在一个窗口上。你试图做的事情是不可能的。如果需要向 Visual Studio 的 GUI 添加任何视觉效果,请使用公共 API。这不仅更好,而且是唯一的方法。
【参考方案1】:
WPF 窗口中没有任何工具栏或工具条 HWND。你试图做的事情是不可能的。如果需要向 Visual Studio 的 GUI 添加任何视觉效果,请使用公共 API。这不仅更好,而且是唯一的方法。
【讨论】:
以上是关于使用 Visual Studio 扩展动态添加工具按钮的主要内容,如果未能解决你的问题,请参考以下文章
我可以添加一个代码生成工具,我将其写入我的Visual Studio副本作为扩展吗?
如何使用 Javascript Intellisense 扩展工具在 Visual Studio 2013 中附加到完成列表
visual studio 2008 c++ 中怎样添加动态链接库?