【问题标题】:How can I control the border thickness and color on Windows Forms?如何控制 Windows 窗体上的边框粗细和颜色?
【发布时间】:2009-08-07 12:58:00
【问题描述】:

我知道这可以在系统级别进行控制,但我想覆盖系统设置并只为我的应用程序设置某种外观。我假设必须有一个 Windows API 函数来控制它,因为我已经看到另一个 Windows 应用程序可以做到这一点。

(我不应该这样做的原因不必赘述)

【问题讨论】:

  • 幸好你把免责声明放在那里,否则你会得到 10 个答案告诉你不要这样做(你肯定知道)。这很容易成为 stackoverflow 最烦人的方面。

标签: winforms winapi border


【解决方案1】:

如果您想为您的应用程序自定义外观,我只会让我的表单无边框并自己处理所有内容,方法是在 Paint 事件中绘制表单本身,或者在 Resize 中移动控件(面板等)事件。您必须处理诸如拖动、调整大小、关闭/最小化等事情,但这些都不是特别困难。

这是my answer 的一个类似问题,它展示了自己动手做的基础知识(它适用于 windows mobile,但它也适用于普通 windows)。

【讨论】:

  • 我在问完这个问题后就开始了这条路。我希望有更好的方法。如果我自己绘制这些东西,我是否仍然可以让 Windows 通过触发 start-resize 消息或其他东西来调整大小?当然,我无法复制在调整窗口大小时看到的虚线效果(当窗口设置“拖动时显示窗口内容”被停用时)。
  • 好点 - 我不知道。我刚刚检查了 iTunes(在 Windows 中它完全是由所有者绘制的,就像你想要做的那样),它在拖动时显示了一个虚线轮廓,但有趣的是它与普通的虚线边框不同Windows 窗口,这意味着它们也在自己处理轮廓。
  • 我认为大纲相对容易实现。在 mousedown 事件中,您将弹出第二个具有透明背景和虚线边框的无边框表单,并将其移动直到 mouseup 事件,然后将您的真实表单移动到新位置。
【解决方案2】:

应用程序窗口的这些外部元素统称为窗口“chrome”,并且确实由操作系统呈现。在 windows API 级别使用各种标志来控制每个窗口实例的某些方面(例如,控制框、边框、最小/最大按钮等的存在),但可调整大小的窗口的边框宽度由系统设置确定以确保一致性,并且不能在逐个窗口的基础上进行配置。

在许多情况下,您可以通过与 windows API 交互来控制 .NET 未公开的窗口的某些方面,阅读 windows API 文档以确定在较低的情况下可能发生什么是有益的等级。我建议您先阅读 CreateWindowEx 的文档。

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

.NET 允许您更改 FormBorderStyle 属性以在无边框、单像素宽度边框和可调整大小(粗边框)之间进行选择。如果您想做一些自定义的事情,您必须将 .NET 边框样式设置为无,然后自己承担渲染窗口镶边的责任。这需要渲染您自己的标题栏、最小/最大按钮和窗口边框。这不是一项轻松的工作,但许多应用程序都可以做到。如果您真正想要的只是控制边框宽度,那还有很长的路要走。

本文介绍了如何在 WPF 中处理此任务,并且也可能有用。

Window Chrome In WPF

【讨论】:

  • +1 只是这是一项相对轻松的任务。通常不值得,但一点也不难。
猜你喜欢
  • 1970-01-01
  • 2016-04-25
  • 1970-01-01
  • 2011-03-20
  • 1970-01-01
  • 2014-10-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多