代码之家  ›  专栏  ›  技术社区  ›  Vercas

winforms窗口的“快速访问工具栏”?

  •  0
  • Vercas  · 技术社区  · 14 年前

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

    我现在有一个伪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提供的样式的工具箱,我总是和它的所有者一起移动这个表单,现在我有了一个快速访问工具栏!:天

    1 回复  |  直到 14 年前
        1
  •  2
  •   Cody Gray    14 年前

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

    我建议使用标准 ToolStrip control 在框架中提供,但是您担心它在下面画了一条白线,并说当您试图通过将这条白线放置在面板中来隐藏它时,高亮边框(您需要的)也会被覆盖。

    因此,我提出了两种可能的解决方案:

    一。 这个 工具栏 的底部白色边框只在其 RenderMode property 设置为“系统”。您可以将其设置为“专业”并永久取消白线,同时保留深色悬停边界效果。


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

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

    然后简单地设置 工具栏 控件以使用自定义渲染器,如下所示:

    myToolStrip.Renderer = new CorrectedToolStripRenderer();
    


    三。 您可以实现 完全地 自定义渲染器 工具栏 ,直接从基 ToolStripRenderer class ,并为自己准确地定义它的外观。

    例如,因为我讨厌看起来不像标准Windows UI元素的控件,所以我有一个自定义渲染器,用于确保所有WinForms应用程序中的菜单和工具栏都像OS中的菜单和工具栏一样被绘制。(“系统”在Vista/7中没有任何接近右边的地方)Mine是一个经过大量修改的版本 this sample .

    其他人(这里是看着你的,Office团队)绝对喜欢自定义UI,这样可以让你真正全力以赴地匹配应用程序的外观。例如,这里有一些自定义渲染器,它们看起来像 Visual Studio 2010 Office 2007 让你开始。谷歌的搜索结果会更多。