我目前正在尝试创建一个类似于此的屏幕:
使用this tool浏览视觉样式部件和状态,我发现底部区域是FLYOUT_LINKPANEL。
但刷新按钮怎么样?我找不到任何具有相同行为的按钮;直到悬停才有背景。 此外,我已经尝试通过shell32中的dll查找复制该刷新图标的图标 - 没有骰子。刷新图标是ExplorerFrame.dll中的位图。
我也尝试过给WinSpy ++一个蠢蠢欲动的窗口,但这不起作用,因为它会在停用时立即消失。
么?
答案 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);
}
}
}