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

时间:2010-11-16 13:02:44

标签: .net winforms toolbar ribbon

对于我正在开发的小程序,我决定最好实现快速访问工具栏(就像Ribbon控件附带的那些(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

1 个答案:

答案 0 :(得分:2)

从我收集的阅读评论中,您正在寻找一个简单的工具栏控件,为用户提供执行常见任务/操作的快捷方式。但是,与Microsoft Office样式功能区中包含的快速访问工具栏不同,您不需要需要在非客户端区域绘图的解决方案,因为此解决方案不可移植。在非客户区域中绘图需要完全自定义窗口镶边,这不能在所有版本的Windows中无缝工作(因为DWM和其他一些原因)。

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

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

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


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团队)非常喜欢自定义用户界面,这种方式让你真正全力以赴,与你的应用程序的外观相匹配。例如,以下是自定义渲染器,它们看起来像Visual Studio 2010Office 2007,可以帮助您入门。谷歌搜索将会增加更多。