添加帮助按钮,但保留最大化和最小化。

11

我想在我的winform上添加帮助按钮,但是保留最大化和最小化按钮,但Windows标准是禁用这两个按钮才能显示帮助按钮。

已经有一个类似的问题:如何在Winform的标题栏中包含帮助“?” - 但在那个问题中,提问者满足于移除这两个按钮以显示帮助按钮。

是否有一种方法可以同时拥有帮助、最大化、最小化和关闭按钮?

谢谢。


1
是的,但你读了那个答案吗?它暗示你必须自己重新创建标题栏。这对于所获得的收益来说是很大的工作量。 - LarsTech
@LarsTech - 我希望有一种方法可以在不完全重新编写边框的情况下完成。 - Axxelsian
2个回答

13

Windows不支持同时显示两个按钮。一种解决方法是提供自己的按钮来触发相同的操作。将其放置在靠近右上角的位置。你可以通过发送WM_SYSCOMMAND消息来触发此操作,就像标准帮助按钮所做的那样。示例如下:

    private void Help_Click(object sender, EventArgs e) {
        Help.Capture = false;
        SendMessage(this.Handle, WM_SYSCOMMAND, (IntPtr)SC_CONTEXTHELP, IntPtr.Zero);
    }

    private const int WM_SYSCOMMAND = 0x112;
    private const int SC_CONTEXTHELP = 0xf180;
    [System.Runtime.InteropServices.DllImport("user32.dll")]
    private static extern IntPtr SendMessage(IntPtr hWnd, int msg, IntPtr wp, IntPtr lp);

这假设按钮的名称为“帮助”。


我没有意识到我可以使用我创建的按钮来触发相同的操作。谢谢。 - Axxelsian
实际上,看起来Windows支持同时显示两者,您可以通过打开最新版本的Word来看到。事实上,他们甚至在那里放了另一个按钮用于功能区控制。只是由于某种原因,在Windows Forms中没有得到正确支持... - glopes
3
办公应用程序使用自定义框架,而不是标准的Windows窗口框架。当你有数百名程序员在一个产品上工作时,你可以做一些很好的事情。 - Hans Passant

2
一种实现这个目标的方法是绘制自己的边框。
FormBorderStyle = None

现在构建自己的标题区域。 这是一项不小的任务,因为您必须处理拖动调整大小事件、透明度(如果您想要圆角等效果)等。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接