gpt4 book ai didi

visual-studio-2010 - Visual Studio 2010 - 半透明 float 窗口

转载 作者:行者123 更新时间:2023-12-04 12:24:58 24 4
gpt4 key购买 nike

是否可以使 Visual Studio 2010 中的 float 窗口半透明?我希望能够 float 编辑器窗口并降低其上的 alpha 级别。是否可以使用修改股票编辑器窗口的扩展来创建此功能?

如果不是扩展,是否有体面的第三方应用程序能够修改 Visual Studio 2010 中特定子窗口的属性?

最佳答案

主要问题是,它取决于工具窗口,因为 Visual Studio 并没有过多地规定工具窗口的实际呈现方式。

如果工具窗口有 HNWD 可玩,您可以使用 SetLayeredWindowAttributes 函数设置透明度。如果工具窗口是 WPF,您可以使用其他技巧。

现在,问题是捕获一些有用的东西......只需在 Visual Studio 2010 上启动 SPY++,您就会发现周围没有多少可见的 HWND。一些包使用非托管代码,一些包使用 .NET + Winforms,最近的包越来越多地使用 .NET + WPF。

UISpy (另一个 spy 工具,但基于 UI Automation )可以看到所有工具窗口,但它没有显示任何 native 窗口句柄(UI 自动化可以读取的标准属性之一),这不是好消息。

Visual Studio 使用 IVsWindowPane 接口(interface),特别是 CreatePaneWindow 方法来创建主机窗口,但没有任何官方可以让任何 HWND 句柄重新使用。

唔!如果你有想要调整的特定工具窗口,我们可以更深入地了解,但我认为很难编写一个 100% 通用的工具。

编辑 :我已经搜索了更多。这是枚举当前 Visual Studio 实例的所有窗口框架(停靠或 float )的代码:

// WindowFrame needs Microsoft.VisualStudio.Platform.WindowManagement.dll
public static IEnumerable<WindowFrame> EnumWindowFrames(Microsoft.VisualStudio.OLE.Interop.IServiceProvider sp, __WindowFrameTypeFlags frameTypes)
{
if (sp == null)
throw new ArgumentNullException("sp");

ServiceProvider serviceProvider = new ServiceProvider(sp);
IVsUIShell4 shell = (IVsUIShell4)serviceProvider.GetService(typeof(SVsUIShell)); // VS 2010 only

IEnumWindowFrames framesEnum;
IVsWindowFrame[] frames = new IVsWindowFrame[1];
uint numFrames;
shell.GetWindowEnum((uint)frameTypes, out framesEnum);
if (framesEnum == null)
yield break;

while ((framesEnum.Next(1, frames, out numFrames) == VSConstants.S_OK) && (numFrames == 1))
{
WindowFrame frame = frames[0] as WindowFrame;
if (frame != null)
yield return frame;
}
}

这将给出一个 WindowFrame 实例的列表。 WindowFrame 没有记录,但它是公共(public)的(位于 Microsoft.VisualStudio.Platform.WindowManagement.dll 中),因此您可以使用它。每个 WindowFrame 实例都有一个 FrameView 属性,该属性具有一个 Content 属性。根据我的发现,这个 Content 属性大部分时间是 WPF 的 Panel 元素。然后,该面板下方的层次结构将取决于窗口的实际实现方式。

如果它是非托管或 Winforms(例如,.SQL 编辑器),则面板的子集合中将有一个 HwndHost。我试过玩它(使用 SetLayeredWindowAttributes ),但它似乎不起作用......

如果它是 WPF(例如,全新的 C#/VB 编辑器),则会有一个巨大的 WPF 层次结构,最终将下降到 IWfpTextView 实现。你可以在这个层次结构中改变很多东西,有些东西会起作用(比如背景属性),但是......关于透明度,我认为这是不可能的,因为根窗口不允许它(它设置了 AllowTransparency为false,一旦显示就无法更改)。例如设置 Opacity = 0.5 有效,但由于没有透明度,效果只是变暗的窗口......

关于visual-studio-2010 - Visual Studio 2010 - 半透明 float 窗口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3945242/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com