如何在Windows表单中控制边框的厚度和颜色?

3
我知道这可以在系统级别上进行控制,但我想覆盖系统设置,并仅为我的应用程序设置特定的外观。我假设必须有一个Windows API函数来控制此操作,因为我已经看到另一个Windows应用程序这样做了。
(不必解释为什么我不应该这样做)

3
谢谢您在这里放置了免责声明,否则你可能会收到10个回答告诉你不要这么做(您无疑已经知道)。这是 StackOverflow 中最令人讨厌的方面。 - MusiGenesis
2个回答

3
如果您想要为应用程序创建自定义外观,我会只取消窗体边框并自己处理所有事情,可以通过在 Paint 事件中在窗体本身上绘制或在调整大小事件中移动控件(面板等)来实现。您必须处理拖动、调整大小、关闭/最小化等操作,但这些都不是特别困难的。
以下是类似问题的我的回答,展示了自己完成此操作的基础知识(它适用于 Windows Mobile,但在常规 Windows 中也适用)。

我在提出问题后开始了这条路。我希望有更好的方法。如果我自己绘制内容,我是否仍然可以通过触发启动调整大小消息或类似的方式让窗口进行调整大小?如果不行,我就无法复制在调整窗口大小时看到的虚线效果(当窗口设置“拖动时显示窗口内容”被停用时)。 - Fantius
好的观点 - 我不知道那个。我刚刚查看了iTunes(在Windows中完全是自绘的,就像你正在尝试做的那样),并且在拖动时显示虚线轮廓,但有趣的是它不是普通Windows窗口的相同虚线边框,这意味着他们也在处理轮廓。 - MusiGenesis
1
我认为这个大纲相对容易自己实现。在mousedown事件中,您可以弹出一个带有透明背景和虚线边框的第二个无边框窗体,并将其移动到mouseup事件发生之前,然后将您的真实窗体移动到新位置。 - MusiGenesis

2
这些应用程序窗口的外部元素共同被称为窗口的“chrome”,并由操作系统进行渲染。在Windows API级别中,使用各种标志来控制每个窗口实例的某些方面(例如,控件框、边框、最小/最大化按钮等),但可调整大小的窗口的边框宽度是通过系统设置确定的,以确保统一性,并不能在单个窗口上进行配置。
在许多情况下,您可以通过与Windows API交互来控制一些未公开的窗口特性,因此建议阅读Windows API文档以确定在较低级别上可能的操作。我建议从阅读CreateWindowEx的文档开始。

http://msdn.microsoft.com/en-us/library/ms632680(VS.85).aspx

.NET允许您更改FormBorderStyle属性,以在无边框、单像素宽度边框和可调整大小(粗边框)之间进行选择。如果您想要做一些自定义的事情,您将不得不将.NET边框样式设置为无,并承担自己呈现窗口Chrome的责任。这包括呈现自己的标题栏、最小/最大化按钮和窗口边框。这不是一个轻松的任务,但许多应用程序都这样做。如果您只想控制边框宽度,这是一个漫长的过程。
本文介绍了如何在WPF中处理此任务,并可能有所帮助。 WPF中的窗口Chrome

+1除外,这是一个相对较轻松的任务。通常不值得去做,但完全不难。 - MusiGenesis

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