【问题标题】:A "Quick Access Toolbar" for a winforms window?winforms 窗口的“快速访问工具栏”?
【发布时间】:2010-11-16 13:02:43
【问题描述】:

对于我正在开发的一个小程序,我决定最好实现一个快速访问工具栏(比如那些带有功能区控件的工具栏(Office 2007、2010?))。 现在我的问题是我找不到可以从中提取工具栏的winforms的任何免费功能区控件。

我目前有一个伪 QAC,但标准工具栏存在渲染问题。

那么任何人都可以向我展示此控件的良好实现吗?它必须独立于操作系统。 (没有删除仅 DWM 的非客户端。)


对于其他人,这是我的结果:

在一个新表单中,我添加以下代码:

protected override CreateParams CreateParams
{
    get
    {
        var cp = base.CreateParams; // Retrieve the normal parameters.
        cp.Style = 0x40000000 | 0x4000000; // WS_CHILD | WS_CLIPSIBLINGS
        cp.ExStyle &= 0x00080000; // WS_EX_LAYERED
        cp.Parent = GetDesktopWindow(); // Make "GetDesktopWindow()" from your own namespace.
        return cp;
    }
}

然后放置一个由 Cody Gray 提供的样式的工具箱,我总是用它的所有者移动这个表单,现在我有了一个快速访问工具栏! :D

【问题讨论】:

  • 如果您正在寻找不需要在非客户区绘图的解决方案,为什么不直接使用ToolStrip 控件来创建标准工具栏?也许您可以详细说明您遇到的“渲染问题”?
  • 好的,当鼠标悬停在工具栏项目上时,一个带有较暗边框的蓝色矩形会放在它前面。使用我的解决方案,该矩形的下边框是不可见的,因为它位于面板下方。
  • 您是否尝试过更改控件的 z 顺序?您可以将面板放在工具栏后面。
  • 工具栏位于面板内,因此我可以隐藏它的下部,即一条白线。 (总是与背景颜色不同,所以我不能让它透明)
  • 你真的沉迷于这种疯狂的浮动表单方法不是吗!

标签: .net winforms toolbar ribbon


【解决方案1】:

根据我在阅读 cmets 时收集到的信息,您正在寻找一个简单的工具栏控件,它为用户提供了一种快速执行常见任务/操作的方法。但是,与 Microsoft Office 样式功能区中包含的快速访问工具栏不同,您不想要需要在非客户区绘图的解决方案,因为该解决方案不可移植。在非客户区绘图需要推出完全自定义的窗口镶边,这不会在所有版本的 Windows 中无缝工作(由于 DWM 和许多其他原因)。

我建议使用框架中提供的标准ToolStrip control,但您表示担心它会在其下方画一条白线,并说当您尝试通过将其放置在面板内来隐藏此白线时,高亮边框 (你想要的)也会被覆盖。

因此,我提出了几个可能的解决方案:

1. 仅当RenderMode property 设置为“系统”时,才会绘制ToolStrip 的底部白色边框。您可以改为将其设置为“专业”并永远消除白线,同时保留变暗的悬停边框效果。


2. 如果您不喜欢“专业”渲染风格并想坚持使用“系统”,您可以简单地继承现有的ToolStripSystemRenderer 并停止它从绘制底部白色边框:

public class CorrectedToolStripRenderer : ToolStripSystemRenderer
{
    protected override void OnRenderToolStripBorder(ToolStripRenderEventArgs e)
    {
        //do nothing here
    }
}

然后只需将ToolStrip 控件设置为使用您的自定义渲染器,如下所示:

myToolStrip.Renderer = new CorrectedToolStripRenderer();


3. 您可以为ToolStrip 实现一个完全 自定义渲染器,直接从基础ToolStripRenderer class 派生,并为自己定义具体的方式你想让它看起来。

例如,因为我讨厌看起来不像标准 Windows UI 元素的控件,所以我有一个自定义渲染器,用于确保我的所有 WinForms 应用程序中的菜单和工具栏的绘制与操作系统中的一样。 (“系统”在 Vista/7 中并没有完全正确。)我的是 this sample 的一个经过大量修改的版本。

其他人(这里看着您,Office 团队)绝对喜欢自定义 UI,这种方式可以让您真正全力以赴并匹配您的应用程序的外观。例如,这里有一些看起来像 Visual Studio 2010Office 2007 的自定义渲染器,可以帮助您入门。谷歌搜索会出现更多。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-04
    • 1970-01-01
    • 1970-01-01
    • 2016-11-29
    • 1970-01-01
    相关资源
    最近更新 更多