复制Win7网络弹出按钮刷新按钮

时间:2012-01-18 11:57:05

标签: c# winforms windows-7

我目前正在尝试创建一个类似于此的屏幕:

Image

使用this tool浏览视觉样式部件和状态,我发现底部区域是FLYOUT_LINKPANEL。

但刷新按钮怎么样?我找不到任何具有相同行为的按钮;直到悬停才有背景。 此外,我已经尝试通过shell32中的dll查找复制该刷新图标的图标 - 没有骰子。刷新图标是ExplorerFrame.dll中的位图。

我也尝试过给WinSpy ++一个蠢蠢欲动的窗口,但这不起作用,因为它会在停用时立即消失。

么?

2 个答案:

答案 0 :(得分:0)

这看起来像是带有一个刷新按钮的标准工具条。

您可以使用C# ToolStrip is transparent but border is still visible?中列出的方法使其透明。

我检查了%SystemRoot%\ system32 \ shell32.dll,并且有一个非常类似的图标,您可以使用它。

答案 1 :(得分:0)

这是一个示例实现。至于图像,可以从ExplorerFrame中提取它。

此类的第一次尝试只是在悬停时翻转按钮的FlatStyle,但只要按钮悬停在图像上,图像就会移位。

此外,该课程在弹出按钮中忠实地复制该按钮;它具有按下状态而不是移动图像,并且当它处于活动状态时也不会绘制虚线轮廓。然而,这违背了按钮通常在Windows中的功能,因此这并没有复制行为。

    public class FlyoutImageButton : Button
    {
        bool _isHovering = false;
        public FlyoutImageButton() : base()
        {
            MouseEnter += (sender, e) => _isHovering = true;
            MouseLeave += (sender, e) => _isHovering = false;
        }
        protected override void OnPaint(PaintEventArgs e)
        {
            if (_isHovering)
                base.OnPaint(e);
            else
            {
                if (this.Image != null)
                {
                    e.Graphics.Clear(BackColor);
                    if (this.Enabled)
                        e.Graphics.DrawImageUnscaled(
                            this.Image,
                            (this.Width - this.Image.Width) / 2,
                            (this.Height - this.Image.Height) / 2);
                    else
                        ControlPaint.DrawImageDisabled(
                            e.Graphics,
                            this.Image,
                            (this.Width - this.Image.Width) / 2,
                            (this.Height - this.Image.Height) / 2,
                            BackColor);
                }
                if (this.DesignMode)
                    ControlPaint.DrawBorder(
                        e.Graphics, ClientRectangle, SystemColors.ControlDarkDark, ButtonBorderStyle.Dashed);
            }
        }
    }